From 003cf96b4dfcaa8ea6d6abe81e97041a4f1b18eb Mon Sep 17 00:00:00 2001 From: Benjamin Bohard Date: Mon, 6 Jul 2015 14:45:39 +0200 Subject: [PATCH] =?UTF-8?q?M=C3=A9thodes=20pour=20initialiser=20les=20fich?= =?UTF-8?q?iers=20de=20la=20formation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setup_main_tex_file.py | 143 +++++++++++++++++++++++++++-------------- templates/main.tex | 2 +- 2 files changed, 94 insertions(+), 51 deletions(-) diff --git a/setup_main_tex_file.py b/setup_main_tex_file.py index 04ef832..b6f8e03 100755 --- a/setup_main_tex_file.py +++ b/setup_main_tex_file.py @@ -25,13 +25,86 @@ def escape_tex(value): def main(): - parser = argparse.ArgumentParser(description="Préparation du fichier maître tex") - parser.add_argument('-n', '--name', help="Nom du fichier à créer") - parser.add_argument('-a', '--author', help="Auteur de la formation") - parser.add_argument('-t', '--title', help="Titre de la formation") - parser.add_argument('-d', '--directory', help="Sous-répertoires où créer le fichier") - args = parser.parse_args() - + + def init(args): + """ + init function + """ + root = '../' + if args.directory: + root = root + re.sub(r'[\w]+/?', '../', args.directory) + else: + root = '../' + + name = args.name + if name: + if path.splitext(name)[1] == '': + name = name.decode('utf-8') + u'.tex' + else: + name = get_unique_name('formation') + + title = args.title + if not title: + title = u'FIXME' + else: + title = title.decode('utf-8') + + author = args.author + if not author: + author = u'Cadoles' + else: + author = author.decode('utf-8') + + directory = args.directory + if not directory: + directory = '' + + env = {'root': root, + 'title': title, + 'author': author} + resources = [(path.join('presentations', directory), 'main.tex'),] + #('slides', 'license-cc-by-sa-2.0.tex'), + #('slides', 'preambule.tex'), + #('slides', 'title.tex')] + for directory, template_file in resources: + template = jinja_env.get_template(template_file) + rendered_template = template.render(**env) + if not path.exists(directory): + makedirs(directory) + with open(path.join(directory, name), 'w') as rendered_file: + rendered_file.write(rendered_template.encode('utf-8')) + + def update(args): + """ + update function + """ + re_class = re.compile(r'\\documentclass\{(?P.*)\}') + #skbconfig_re = re.compile(r'\\skbconfig\[\s*root\s*=\s*(?P.*),\s*rep\s*=\s*(?P.*),\s*pub\s*=\s*(?P.*),\s*fig\s*=\s*(?P.*),\s*sli\s*=\s*(?P.*),\s*acr\s*=\s*(?P.*),\s*bib\s*=\s*(?P.*),\s*\]\{skblocal.tex\}', re.M) + skbconfig_re = re.compile(r'\\skbconfig\[\n\s*root\s*=\s*(?P.*),\n\s*rep\s*=\s*(?P.*),\n\s*pub\s*=\s*(?P.*),\n\s*fig\s*=\s*(?P.*),\n\s*sli\s*=\s*(?P.*),\n\s*acr\s*=\s*(?P.*),\n\s*bib\s*=\s*(?P.*)\n\s*\]\{skblocal.tex\}', re.M) + skbinput_re = re.compile(r'\\skbinput\[from=(?P.*)\]\{(?P.*?)\}') + 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) + + for skbinput in tex_skbinputs: + rep = path.dirname(skbinput.group('tex')) + rep = path.join(tex_skbconfig.group(skbinput.group('rep')), rep) + basename = '{0}.tex'.format(skbinput.group('tex')) + dest = path.join(rep, basename) + if not path.isfile(dest): + if not path.isdir(rep): + print rep + makedirs(rep) + template = jinja_env.get_template('slide') + env = {'title': '', 'subtitle': ''} + rendered_template = template.render(**env) + with open(dest, 'w') as rendered_file: + rendered_file.write(rendered_template.encode('utf-8')) + + + jinja_loader = FileSystemLoader('./templates') jinja_env = Environment(loader=jinja_loader, block_start_string='((*', @@ -43,50 +116,20 @@ def main(): trim_blocks=True) jinja_env.filters['escape_tex'] = escape_tex - root = '../' - if args.directory: - root = root + re.sub(r'[\w]+/?', '../', args.directory) - else: - root = '../' + parser = argparse.ArgumentParser(description="Préparation des fichiers tex") + subparsers = parser.add_subparsers(help='Aide des sous-commandes') + parser_init = subparsers.add_parser('init', help='Initialisation du fichier maître') + parser_init.add_argument('-n', '--name', help="Nom du fichier à créer", required=True) + parser_init.add_argument('-a', '--author', help="Auteur de la formation") + parser_init.add_argument('-t', '--title', help="Titre de la formation") + parser_init.add_argument('-d', '--directory', help="Sous-répertoires où créer le fichier", required=True) + parser_init.set_defaults(func=init) + parser_update = subparsers.add_parser('update', help='Mise à jour des fichiers inclus') + parser_update.add_argument('-m', '--master', help="Emplacement du fichier maître", required=True) + parser_update.set_defaults(func=update) + args = parser.parse_args() + args.func(args) - name = args.name - if name: - if path.splitext(name)[1] == '': - name = name.decode('utf-8') + u'.tex' - else: - name = get_unique_name('formation') - - title = args.title - if not title: - title = u'FIXME' - else: - title = title.decode('utf-8') - - author = args.author - if not author: - author = u'Cadoles' - else: - author = author.decode('utf-8') - - directory = args.directory - if not directory: - directory = '' - - env = {'root': root, - 'title': title, - 'author': author} - resources = [(path.join('presentations', directory), 'main.tex'),] - #('slides', 'license-cc-by-sa-2.0.tex'), - #('slides', 'preambule.tex'), - #('slides', 'title.tex')] - for directory, template_file in resources: - template = jinja_env.get_template(template_file) - rendered_template = template.render(**env) - if not path.exists(directory): - makedirs(directory) - with open(path.join(directory, name), 'w') as rendered_file: - rendered_file.write(rendered_template.encode('utf-8')) - diff --git a/templates/main.tex b/templates/main.tex index 76331b7..c993936 100644 --- a/templates/main.tex +++ b/templates/main.tex @@ -41,7 +41,7 @@ % Corps de la formation %\skbinput[from=slides]{} -\skbinput[]{styles/license-cc-by-sa-2.0.tex} +\skbinput[from=rep]{licences/(((license)))} \end{document}