summaryrefslogtreecommitdiff
path: root/pypers/oxford/sexpr2indent.py
blob: 63cd2cfc73effffbfd85ecdc478162860849bf9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# sexpr2indent.py
"""A simple s-expression formatter."""

import re

def parse(sexpr):
    position = 0
    nesting_level = 0
    paren = re.compile(r"(?P<paren_beg>\()|(?P<paren_end>\))")
    while True:
        match = paren.search(sexpr, position)
        if match:
            yield nesting_level, sexpr[position: match.start()]
            if match.lastgroup == "paren_beg":
                nesting_level += 1
            elif match.lastgroup == "paren_end":
                nesting_level -= 1
            position = match.end()
        else:
            break

def sexpr_indent(sexpr):
    for nesting, text in parse(sexpr.replace("\n", "")):
        if text.strip():  print " "*nesting, text