Skip to content

Commit

Permalink
added expr
Browse files Browse the repository at this point in the history
  • Loading branch information
Jim Fulton committed Sep 22, 1997
1 parent b711fb6 commit 74bc017
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 41 deletions.
36 changes: 24 additions & 12 deletions DT_If.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,45 +110,54 @@
# (540) 371-6909
#
############################################################################
__rcs_id__='$Id: DT_If.py,v 1.2 1997/09/08 15:35:40 jim Exp $'
__version__='$Revision: 1.2 $'[11:-2]
__rcs_id__='$Id: DT_If.py,v 1.3 1997/09/22 14:42:49 jim Exp $'
__version__='$Revision: 1.3 $'[11:-2]

from DT_Util import *

class If:
blockContinuations='else','elif'
name='if'
elses=None
expr=''

def __init__(self, blocks):

tname, args, section = blocks[0]
args=parse_params(args, name='')
name=name_param(args)
self.__name__ = name
self.sections=[(name, section)]
args=parse_params(args, name='', expr='')
name,expr=name_param(args,'if',1)
self.__name__= name
self.sections=[(name, expr, section)]

if blocks[-1][0]=='else':
tname, args, section = blocks[-1]
blocks=blocks[:-1]
args=parse_params(args, name='')
if args:
ename=name_param(args)
ename,expr=name_param(args,'else',1)
if ename != name:
raise ParseError, 'name in else does not match if'
self.elses=section

for tname, args, section in blocks[1:]:
if tname=='else':
raise ParseError, 'more than one else tag for a single if tag'
name=name_param(args)
self.sections.append((name, section))
args=parse_params(args, name='', expr='')
name,expr=name_param(args,'elif',1)
self.sections.append((name, expr, section))

def render(self,md):
for name, section in self.sections:
try: v=md[name]
except: v=None
for name, expr, section in self.sections:
if expr is None:
try: v=md[name]
except: v=None
else:
v=expr.eval(md)

if v: return section(None,md)

if self.elses: return self.elses(None, md)

return ''

__call__=render
Expand All @@ -175,6 +184,9 @@ def render(self,md):
##########################################################################
#
# $Log: DT_If.py,v $
# Revision 1.3 1997/09/22 14:42:49 jim
# added expr
#
# Revision 1.2 1997/09/08 15:35:40 jim
# Fixed bug that caused else blocks to render if blocks.
#
Expand Down
21 changes: 14 additions & 7 deletions DT_In.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@
of the module 'Missing', if present.
'''

__rcs_id__='$Id: DT_In.py,v 1.2 1997/09/02 19:04:24 jim Exp $'
__rcs_id__='$Id: DT_In.py,v 1.3 1997/09/22 14:42:50 jim Exp $'

############################################################################
# Copyright
Expand Down Expand Up @@ -266,23 +266,24 @@
# (540) 371-6909
#
############################################################################
__version__='$Revision: 1.2 $'[11:-2]
__version__='$Revision: 1.3 $'[11:-2]

from DT_Util import *

class In:
blockContinuations=('else',)
name='in'
elses=None
expr=None

def __init__(self, blocks):
tname, args, section = blocks[0]
args=parse_params(args, name='', start='1',end='-1',size='10',
orphan='3',overlap='1',mapping=1,
previous=1, next=1)
previous=1, next=1, expr='')
self.args=args
name=name_param(args)
self.__name__ = name
name,expr=name_param(args,'in',1)
self.__name__, expr = name, expr
self.section=section
if len(blocks) > 1:
if len(blocks) != 2: raise ParseError, 'too many else blocks'
Expand All @@ -296,8 +297,11 @@ def __init__(self, blocks):


def render(self, md):
try: sequence=md[self.__name__] or None
except: sequence=None
expr=self.expr
if expr is None:
try: sequence=md[self.__name__] or None
except: sequence=None
else: sequence=expr.eval(md)

if not sequence:
if self.elses: return self.elses(None, md)
Expand Down Expand Up @@ -714,6 +718,9 @@ def previous_batches(self):

############################################################################
# $Log: DT_In.py,v $
# Revision 1.3 1997/09/22 14:42:50 jim
# added expr
#
# Revision 1.2 1997/09/02 19:04:24 jim
# Got rid of ^Ms
#
Expand Down
35 changes: 27 additions & 8 deletions DT_Util.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
'''$Id: DT_Util.py,v 1.2 1997/09/02 20:35:09 jim Exp $'''
'''$Id: DT_Util.py,v 1.3 1997/09/22 14:42:50 jim Exp $'''

############################################################################
# Copyright
Expand Down Expand Up @@ -52,13 +52,14 @@
# (540) 371-6909
#
############################################################################
__version__='$Revision: 1.2 $'[11:-2]
__version__='$Revision: 1.3 $'[11:-2]

import sys, regex, string, types, math, os
from string import rfind, strip, joinfields, atoi,lower,upper,capitalize
from types import *
from regsub import gsub, sub, split
from __builtin__ import *
import VSEval

ParseError='Document Template Parse Error'

Expand All @@ -78,13 +79,28 @@ def __init__(self,varnames=('self','REQUEST')):
self.co_varnames=varnames
self.co_argcount=len(varnames)

def name_param(params):
if params.has_key(''):
if params.has_key('name'):
raise ParseError, 'Name given twice'
def _tm(m, tag):
return m + tag and (' in %s' % tag)

def name_param(params,tag='',expr=0):
used=params.has_key
if used(''):
if used('name'):
raise ParseError, _tm('Two names were given', tag)
if expr:
if used('expr'): raise ParseError, _tm('name and expr given', tag)
return params[''],None
return params['']
elif params.has_key('name'): return params['name']

elif used('name'):
if expr:
if used('expr'): raise ParseError, _tm('name and expr given', tag)
return params['name'],None
return params['name']
elif expr and used('expr'):
name=params['expr']
expr=VSEval.Eval(name, __mul__=VSEval.careful_mul, __getattr__=None)
return name, expr

raise ParseError, 'No name given'

def parse_params(text,
Expand Down Expand Up @@ -157,6 +173,9 @@ def parse_params(text,

############################################################################
# $Log: DT_Util.py,v $
# Revision 1.3 1997/09/22 14:42:50 jim
# added expr
#
# Revision 1.2 1997/09/02 20:35:09 jim
# Various fixes to parsing code.
#
Expand Down
37 changes: 24 additions & 13 deletions DT_Var.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
The parameter 'spacify' may be provided to cause underscores in
the inserted value to be converted to spaces.
'''
__rcs_id__='$Id: DT_Var.py,v 1.1 1997/08/27 18:55:44 jim Exp $'
__rcs_id__='$Id: DT_Var.py,v 1.2 1997/09/22 14:42:51 jim Exp $'

############################################################################
# Copyright
Expand Down Expand Up @@ -137,33 +137,33 @@
# (540) 371-6909
#
############################################################################
__version__='$Revision: 1.1 $'[11:-2]
__version__='$Revision: 1.2 $'[11:-2]

from DT_Util import *

class Var:
name='var'
expr=None

def __init__(self, args, fmt=''):
args = parse_params(args, name='', lower=1, upper=1,
args = parse_params(args, name='', lower=1, upper=1, expr='',
capitalize=1, spacify=1, null='', fmt='s')
self.args=args
used=args.has_key

if args.has_key('name'):
name=args
if args.has_key(''):
raise ParseError, 'Two named given in var'
elif args.has_key(''):
name=args['']
else:
raise ParseError, 'No name given in var'
name, expr = name_param(args,'var',1)

self.__name__ = name
self.__name__, self.expr = name, expr
self.fmt = fmt

def render(self, md):
name=self.__name__
val = md[name]
val=self.expr
if val is None:
val = md[name]
else:
val=val.eval(md)

__traceback_info__=name, val

# handle special formats defined using fmt= first
Expand Down Expand Up @@ -243,6 +243,12 @@ def dollars_and_cents_with_commas(v):
except: v= ''
return commatify(v)

def len_format(v):
return str(len(v))

def len_comma(v):
return commatify(str(len(v)))

special_formats={
'html-quote': html_quote,
'url-quote': url_quote,
Expand All @@ -251,10 +257,15 @@ def dollars_and_cents_with_commas(v):
'dollars-and-cents': dollars_and_cents,
'dollars-with-commas': whole_dollars_with_commas,
'dollars-and-cents-with-commas': dollars_and_cents_with_commas,
'collection-length': len_format,
'collection-length-with-commas': len_comma,
}

############################################################################
# $Log: DT_Var.py,v $
# Revision 1.2 1997/09/22 14:42:51 jim
# added expr
#
# Revision 1.1 1997/08/27 18:55:44 jim
# initial
#
Expand Down
2 changes: 1 addition & 1 deletion Setup
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
*shared*

cDocumentTemplate cDocumentTemplate.c -I../ExtensionClass
cDocumentTemplate cDocumentTemplate.c -I/projects/_/ExtensionClass

# install DT_Dict.py
# install DT_Doc.py
Expand Down

0 comments on commit 74bc017

Please sign in to comment.