summaryrefslogtreecommitdiffstats
path: root/meta.py
diff options
context:
space:
mode:
authorTomasz Kramkowski <tk@the-tk.com>2018-07-18 23:46:06 +0100
committerTomasz Kramkowski <tk@the-tk.com>2018-07-18 23:55:42 +0100
commitc34ae6fed8503c6f8b27b4bd55cf26bb3f47ad23 (patch)
treea50e1f923f5101846e440fba4b076b14d8ac6b4b /meta.py
downloadthe-tk.com-c34ae6fed8503c6f8b27b4bd55cf26bb3f47ad23.tar.gz
the-tk.com-c34ae6fed8503c6f8b27b4bd55cf26bb3f47ad23.tar.xz
the-tk.com-c34ae6fed8503c6f8b27b4bd55cf26bb3f47ad23.zip
init commit
Diffstat (limited to 'meta.py')
-rw-r--r--meta.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/meta.py b/meta.py
new file mode 100644
index 0000000..7bb948d
--- /dev/null
+++ b/meta.py
@@ -0,0 +1,28 @@
+from collections import OrderedDict, deque, namedtuple
+import shlex
+
+Meta = namedtuple('Meta', ['sects', 'meta'])
+
+def _merge(l):
+ return ''.join(l).strip()
+def _next(l):
+ sect = deque()
+ while l and not l[0].strip().startswith('$'):
+ sect.append(l.popleft())
+ if not l:
+ return (('TRAIL', _merge(sect)), l)
+ name = l.popleft().strip()[1:]
+ sect = _merge(sect)
+ return ((name, sect), l)
+def parse(s):
+ l = deque(s.splitlines(True))
+ meta = dict()
+ sects = OrderedDict()
+ while l and l[0].strip().startswith('$'):
+ s = shlex.split(l[0][1:])
+ meta[s[0]] = s[1:]
+ l.popleft()
+ while l:
+ s, l = _next(l)
+ sects[s[0]] = s[1]
+ return Meta(sects, meta)