From c34ae6fed8503c6f8b27b4bd55cf26bb3f47ad23 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Wed, 18 Jul 2018 23:46:06 +0100 Subject: init commit --- meta.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 meta.py (limited to 'meta.py') 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) -- cgit v1.2.3-54-g00ecf