diff options
author | Tomasz Kramkowski <tk@the-tk.com> | 2018-07-18 23:46:06 +0100 |
---|---|---|
committer | Tomasz Kramkowski <tk@the-tk.com> | 2018-07-18 23:55:42 +0100 |
commit | c34ae6fed8503c6f8b27b4bd55cf26bb3f47ad23 (patch) | |
tree | a50e1f923f5101846e440fba4b076b14d8ac6b4b /meta.py | |
download | the-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.py | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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) |