Print outline from master tex file
This commit is contained in:
parent
4b691783be
commit
bb699bf2ee
|
@ -27,6 +27,10 @@ LATEX_SUBS = [(re.compile('_'), '\\_'),
|
|||
]
|
||||
|
||||
|
||||
DOCUMENTCLASS_RE = re.compile(r'\\documentclass\{(?P<document_class>.+?)\}')
|
||||
SKBCONFIG_RE = re.compile(r'\\skbconfig\[\n\s*root\s*=\s*(?P<root>.*),\n\s*rep\s*=\s*(?P<rep>.*),\n\s*pub\s*=\s*(?P<pub>.*),\n\s*fig\s*=\s*(?P<fig>.*),\n\s*sli\s*=\s*(?P<sli>.*),\n\s*acr\s*=\s*(?P<acr>.*),\n\s*bib\s*=\s*(?P<bib>.*)\n\s*\]\{skblocal.tex\}', re.M)
|
||||
SKBINPUT_RE = re.compile(r'[^%]\\skbinput\[from=(?P<rep>.*?)(,.*)?\]\{(?P<tex>.*?)\}', re.M)
|
||||
|
||||
def get_unique_name(base):
|
||||
now = time.localtime()
|
||||
year = str(now[0])
|
||||
|
@ -143,15 +147,11 @@ def main():
|
|||
"""
|
||||
update function
|
||||
"""
|
||||
re_class = re.compile(r'\\documentclass\{(?P<document_class>.*)\}')
|
||||
#skbconfig_re = re.compile(r'\\skbconfig\[\s*root\s*=\s*(?P<root>.*),\s*rep\s*=\s*(?P<rep>.*),\s*pub\s*=\s*(?P<pub>.*),\s*fig\s*=\s*(?P<fig>.*),\s*sli\s*=\s*(?P<sli>.*),\s*acr\s*=\s*(?P<acr>.*),\s*bib\s*=\s*(?P<bib>.*),\s*\]\{skblocal.tex\}', re.M)
|
||||
skbconfig_re = re.compile(r'\\skbconfig\[\n\s*root\s*=\s*(?P<root>.*),\n\s*rep\s*=\s*(?P<rep>.*),\n\s*pub\s*=\s*(?P<pub>.*),\n\s*fig\s*=\s*(?P<fig>.*),\n\s*sli\s*=\s*(?P<sli>.*),\n\s*acr\s*=\s*(?P<acr>.*),\n\s*bib\s*=\s*(?P<bib>.*)\n\s*\]\{skblocal.tex\}', re.M)
|
||||
skbinput_re = re.compile(r'[^%]\\skbinput\[from=(?P<rep>.*?)(,.*)?\]\{(?P<tex>.*?)\}', re.M)
|
||||
with open(args.master, 'r') as master:
|
||||
tex_master = master.read()
|
||||
tex_class = re_class.search(tex_master)
|
||||
tex_skbconfig = skbconfig_re.search(tex_master)
|
||||
tex_skbinputs = skbinput_re.finditer(tex_master)
|
||||
tex_class = DOCUMENTCLASS_RE.search(tex_master)
|
||||
tex_skbconfig = SKBCONFIG_RE.search(tex_master)
|
||||
tex_skbinputs = SKBINPUT_RE.finditer(tex_master)
|
||||
fragment = TEMPLATES[tex_class.group('document_class')]['fragment']
|
||||
fragment_pratique = TEMPLATES[tex_class.group('document_class')]['fragment_pratique']
|
||||
|
||||
|
@ -177,14 +177,69 @@ def main():
|
|||
"""
|
||||
outline creation
|
||||
"""
|
||||
part_level = 0
|
||||
section_level = 1
|
||||
subsection_level = 2
|
||||
frametitle_level = 3
|
||||
framesubtitle_level = 4
|
||||
def file_path_from_skbinput(skbinput_re, master, skbconfig):
|
||||
rel_path = path.join(skbconfig.group('root'), skbconfig.group(skbinput_re.group('rep')), skbinput_re.group('tex')) + '.tex'
|
||||
root_path = path.abspath(path.dirname(master))
|
||||
return path.normpath(path.join(root_path, rel_path))
|
||||
|
||||
def reorder_lists(*args):
|
||||
reordered_list = []
|
||||
for l in args:
|
||||
reordered_list.extend(l)
|
||||
reordered_list.sort(key=lambda x: x[0])
|
||||
return reordered_list
|
||||
|
||||
def outline_from_include(include, start, document_class):
|
||||
frametitle_re = re.compile(r'\\frametitle\{(?P<name>.*?)\}')
|
||||
framesubtitle_re = re.compile(r'\\framesubtitle\{(?P<name>.*?)\}')
|
||||
skbheading_re = re.compile(r'\\skbheading\{(?P<name>.*?)\}')
|
||||
with open(include, 'r') as include_fh:
|
||||
content = include_fh.read()
|
||||
if document_class == 'beamer':
|
||||
frametitles = frametitle_re.finditer(content)
|
||||
framesubtitles = framesubtitle_re.finditer(content)
|
||||
frametitles_list = [(ft.start(), frametitle_level, ft.group('name')) for ft in frametitles]
|
||||
framesubtitles_list = [(fs.start(), framesubtitle_level, fs.group('name')) for fs in framesubtitles]
|
||||
frame_list = reorder_lists(frametitles_list, framesubtitles_list)
|
||||
if frame_list:
|
||||
div = int('1{}'.format('0'*len(str(frame_list[-1][0]))))
|
||||
return [(start + f[0]/div, f[1], f[2]) for f in frame_list]
|
||||
else:
|
||||
return []
|
||||
|
||||
def outline_format(headers_list):
|
||||
levels = list(set([hl[1] for hl in headers_list]))
|
||||
levels.sort()
|
||||
flattened_levels = {l: levels.index(l) for l in levels}
|
||||
for header in headers_list:
|
||||
print('{}{}'.format('\t' * flattened_levels[header[1]], header[2]))
|
||||
|
||||
|
||||
|
||||
|
||||
section_re = re.compile(r'\\section\{(?P<name>.*?)\}')
|
||||
part_re = re.compile(r'\\part\{(?P<name>.*?)}')
|
||||
subsection_re = re.compile(r'\\subsection\{(?P<name>.*?)\}')
|
||||
with open(args.master, 'r') as master_tex:
|
||||
master = master_tex.read()
|
||||
skbconfig = SKBCONFIG_RE.search(master)
|
||||
|
||||
document_class = DOCUMENTCLASS_RE.search(master).group('document_class')
|
||||
parts = part_re.finditer(master)
|
||||
section = section_re.finditer(master)
|
||||
subsection_re = subsection_re.finditer(master)
|
||||
sections = section_re.finditer(master)
|
||||
subsections = subsection_re.finditer(master)
|
||||
includes = SKBINPUT_RE.finditer(master)
|
||||
print(document_class)
|
||||
parts_list = [(part.start(), part_level, part.group('name')) for part in parts]
|
||||
sections_list = [(section.start(), section_level, section.group('name')) for section in sections]
|
||||
includes_list = [element for skbinput in includes for element in outline_from_include(file_path_from_skbinput(skbinput, args.master, skbconfig), skbinput.start(), document_class)]
|
||||
subsections_list = [(subsection.start(), subsection_level, subsection.group('name')) for subsection in subsections]
|
||||
print(outline_format(reorder_lists(parts_list, sections_list, includes_list, subsections_list)))
|
||||
|
||||
|
||||
jinja_loader = FileSystemLoader('./templates')
|
||||
|
|
Loading…
Reference in New Issue