#-*- coding: utf-8 -*-
import sys, re
regex = re.compile(r"\[(?P<idx>\d+)\]|(?P<footer>@footnote)")
""" Indices fuer gewuenschte Sortierungen aufbauen """
def build_index(filename):
positions = {}
foot_idx = {}
ref_idx = {}
footer = False
fr = open(filename)
for i, line in enumerate(fr.readlines()):
for mo in regex.finditer(line):
idx = mo.group("idx")
if idx:
start, end = mo.span("idx")
#Im Fussnotenteil steht die Nummer immer am Zeilenanfang nach [
if footer and start > 1:
continue
#Jeder Zeile werden Koordinaten von Fussnotennummern Zugewiesen
positions.setdefault(i,[]).extend((start, end))
if footer:
foot_idx[idx] = len(foot_idx) + 1
if idx not in ref_idx:
ref_idx[idx] = len(ref_idx) + 1
else:
assert mo.group("footer")
footer = True
fr.close()
return positions, ref_idx, foot_idx
""" Datei in gewuenschter Sortierung ausgeben """
def write(positions, sort_idx, filename):
fr = open(filename)
for i, line in enumerate(fr.readlines()):
pos = 0
#Hier keine Regex. Ausgabezeile wird mit Zeilenindex zu Fuss aufgebaut.
posis = positions.get(i)
if posis:
for p, nextpos in enumerate(posis):
part = line[pos:nextpos]
if p % 2 == 1:
part = sort_idx[part]
print(part, end="")
pos = nextpos
print(line[pos:], end="")
fr.close()