chiark / gitweb /
make-secnet-sites: pline: Break up `copyout'
[secnet.git] / make-secnet-sites
index d1c174c9e9fd885a49a48b7b17b328391b5f9ef1..38badbbe830f8562bf512f44aa5cabe9938c4a3a 100755 (executable)
@@ -589,8 +589,15 @@ def set_property(obj,w):
        else:
                obj.properties[propname]=kw[0](w)
 
-
-def pline(il,allow_include=False):
+class FilterState:
+       def __init__(self):
+               self.reset()
+       def reset(self):
+               # called when we enter a new node,
+               # in particular, at the start of each site
+               pass
+
+def pline(il,filterstate,allow_include=False):
        "Process a configuration file line"
        global allow_defs, obstack, root
        w=il.rstrip('\n').split()
@@ -598,9 +605,9 @@ def pline(il,allow_include=False):
        w=list([Tainted(x) for x in w])
        keyword=w[0]
        current=obstack[len(obstack)-1]
-       copyout=lambda: ['    '*len(obstack) +
-                       ' '.join([ww.output() for ww in w]) +
-                       '\n']
+       copyout_core=lambda: ' '.join([ww.output() for ww in w])
+       indent='    '*len(obstack)
+       copyout=lambda: [indent + copyout_core() + '\n']
        if keyword=='end-definitions':
                keyword.raw_mark_ok()
                allow_defs=sitelevel.depth
@@ -647,6 +654,7 @@ def pline(il,allow_include=False):
                                sys.exit(1)
                        current.children[tname]=nl
                        current=nl
+               filterstate.reset()
                obstack.append(current)
                return copyout()
        if keyword.raw() not in current.allow_properties:
@@ -674,10 +682,11 @@ def pfile(name,lines,allow_include=False):
        file=name
        line=0
        outlines=[]
+       filterstate = FilterState()
        for i in lines:
                line=line+1
                if (i[0]=='#'): continue
-               outlines += pline(i,allow_include=allow_include)
+               outlines += pline(i,filterstate,allow_include=allow_include)
        return outlines
 
 def outputsites(w):