You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.1 KiB
Python

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'))