flat parser
parent
7b9ffaaf9e
commit
c97e0a1dc1
@ -0,0 +1 @@
|
|||||||
|
venv/
|
@ -0,0 +1,77 @@
|
|||||||
|
import re
|
||||||
|
import json
|
||||||
|
|
||||||
|
def syntax():
|
||||||
|
'''regex setup for the flat syntax'''
|
||||||
|
# titles
|
||||||
|
t = re.compile('\(.*\)')
|
||||||
|
# sections
|
||||||
|
s = re.compile('\[(.*?)\]')
|
||||||
|
# notes
|
||||||
|
n = re.compile('(-->)')
|
||||||
|
return (t, s, n)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def test_scan(file):
|
||||||
|
with open(file, 'r') as f:
|
||||||
|
t, s, n = syntax()
|
||||||
|
|
||||||
|
# scan through the document
|
||||||
|
line = f.readline()
|
||||||
|
while line:
|
||||||
|
if not line.rstrip('\n'):
|
||||||
|
line=f.readline()
|
||||||
|
continue
|
||||||
|
if t.match(line):
|
||||||
|
print(f"title: {line[1:-2]}")
|
||||||
|
line = f.readline()
|
||||||
|
continue
|
||||||
|
if s.match(line):
|
||||||
|
print(f'section: {line[1:-2]}')
|
||||||
|
line = f.readline()
|
||||||
|
continue
|
||||||
|
if n.match(line):
|
||||||
|
print(f'note: {line}')
|
||||||
|
line = f.readline()
|
||||||
|
continue
|
||||||
|
print(f'text: {line}')
|
||||||
|
line = f.readline()
|
||||||
|
|
||||||
|
def parse(file):
|
||||||
|
with open(file, 'r') as f:
|
||||||
|
|
||||||
|
parsed = {}
|
||||||
|
current_title = ''
|
||||||
|
current_section = ''
|
||||||
|
|
||||||
|
t, s, n = syntax()
|
||||||
|
line = f.readline()
|
||||||
|
|
||||||
|
while line:
|
||||||
|
if not line.rstrip('\n'):
|
||||||
|
line=f.readline()
|
||||||
|
continue
|
||||||
|
# titles
|
||||||
|
if t.match(line):
|
||||||
|
current_title = line[1:-2]
|
||||||
|
parsed[current_title] = {}
|
||||||
|
line = f.readline()
|
||||||
|
continue
|
||||||
|
# sections
|
||||||
|
if s.match(line):
|
||||||
|
current_section = line[1:-2]
|
||||||
|
parsed[current_title][current_section]=''
|
||||||
|
line = f.readline()
|
||||||
|
continue
|
||||||
|
# notes (TBD)
|
||||||
|
if n.match(line):
|
||||||
|
parsed[current_title][current_section]+=line.rstrip('\n') + ' \n'
|
||||||
|
line = f.readline()
|
||||||
|
continue
|
||||||
|
# normal text
|
||||||
|
parsed[current_title][current_section]+=line.rstrip('\n') + ' \n'
|
||||||
|
line = f.readline()
|
||||||
|
return json.dumps(parsed, indent=4)
|
||||||
|
|
||||||
|
print(parse('list.1dl'))
|
Loading…
Reference in New Issue