summaryrefslogtreecommitdiff
path: root/pypers/oxford/sexpr2indent.py
diff options
context:
space:
mode:
Diffstat (limited to 'pypers/oxford/sexpr2indent.py')
-rwxr-xr-xpypers/oxford/sexpr2indent.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/pypers/oxford/sexpr2indent.py b/pypers/oxford/sexpr2indent.py
new file mode 100755
index 0000000..63cd2cf
--- /dev/null
+++ b/pypers/oxford/sexpr2indent.py
@@ -0,0 +1,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
+
+