extract-profile: Allow `%' characters in internal property names.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 7 Jan 2012 02:07:10 +0000 (02:07 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 7 Jan 2012 16:12:41 +0000 (16:12 +0000)
Now we don't have to spam the caller with uninteresting properties.

extract-profile.in

index 918da8c..03fe455 100755 (executable)
@@ -277,7 +277,9 @@ class Section (object, UD.DictMixin):
       ## Otherwise take as many constituent characters as we can.
       else:
         left = dol + 1
-        while left < n and (string[left].isalnum() or string[left] in '-_'):
+        if left < n and string[left] == '@':
+          left += 1
+        while left < n and (string[left].isalnum() or string[left] in '%-_'):
           left += 1
         prop = string[dol + 1:left]
 
@@ -296,10 +298,13 @@ class Section (object, UD.DictMixin):
               (' -> '.join(["`%s'" % p for p in path[seen[prop]:]]))
 
       ## Look up the raw value.
-      try:
-        value = me.inherited[prop]
-      except KeyError:
-        raise UserError, "unknown property `%s'" % prop
+      if prop == '@name':
+        value = me.name
+      else:
+        try:
+          value = me.inherited[prop]
+        except KeyError:
+          raise UserError, "unknown property `%s'" % prop
 
       ## Recursively expand, and unwind the PATH and SEEN stuff.
       seen[prop] = len(path) - 1
@@ -391,7 +396,7 @@ def parse(filename, d):
       name = name.replace('-', '_')
       if not (name and
               (name in SPECIALS or
-               all(map(lambda ch: ch == '_' or ch.isalnum(), name)))):
+               all(map(lambda ch: ch in '%_' or ch.isalnum(), name)))):
         raise UserError, "%s:%d: bad name `%s'" % (filename, n, name)
 
       ## Store the assignment.
@@ -443,6 +448,7 @@ def main(args):
     except KeyError:
       raise UserError, "unknown section `%s'" % sect
     for k, v in s.inherited.iteritems():
+      if '%' in k: continue
       print '%s=%s' % (k, s.expand(v))
 
   ## Report errors for expected problems.