diff --git a/implementations/Python/joy/utils/snippets.py b/implementations/Python/joy/utils/snippets.py new file mode 100644 index 0000000..843c325 --- /dev/null +++ b/implementations/Python/joy/utils/snippets.py @@ -0,0 +1,34 @@ +from collections import namedtuple +from re import compile as RE + +Snippet = namedtuple('Snippet', 'sha offset length') +fmt = '{%s %i %i}' +pat = ( + '{' + '\s*' + '(?P[a-f0-9]+)' + '\s+' + '(?P\d+)' + '\s+' + '(?P\d+)' + '\s*' + '}' + ) +PAT = RE(pat) + + +def to_string(snip): + return fmt % _ts(*snip) + +def _ts(sha, offset, length): + return sha.decode('ascii'), offset, length + +def from_string(text): + m = PAT.match(text) + if not m: + raise ValueError + return _fs(**m.groupdict()) + +def _fs(sha, offset, length): + return Snippet(sha.encode('ascii'), int(offset), int(length)) +