aboutsummaryrefslogtreecommitdiff
path: root/extract_src.py
blob: 766bf1a0a57b5ea0f0d200af4a3ba16f40e691c1 (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
27
28
29
30
31
32
33
#!/usr/bin/env python3

import os
from stat import ST_MODE
import sys
import re

with open(sys.argv[1], "r") as inp:
    with open(sys.argv[2], "w") as out:
        in_src = False
        startp = re.compile(r"^\s*#\+begin_src .* :tangle")
        endp = re.compile(r"^\s*#\+end_src")
        quoted = re.compile(r"^\s*,(\*|,\*|#\+)")

        lines = inp.readlines()
        curr = []
        min_spaces = -1
        for line in lines:
            if startp.match(line):
                in_src = True
            elif endp.match(line):
                in_src = False
                for l in curr:
                    out.write(l[min_spaces:])
                curr = []
                min_spaces = -1
            elif in_src:
                spaces = len(line) - len(line.lstrip())
                if min_spaces == -1 or min_spaces > spaces:
                    min_spaces = spaces
                curr.append(re.sub(r"^(\s*),(\*|,\*|#\+|,#\+)", r"\1\2", line))

        os.chmod(sys.argv[2], os.stat(sys.argv[1])[ST_MODE])