From f2da02234d59b0b9c9ba13120735f7b937ab4aee Mon Sep 17 00:00:00 2001 From: Luthaf Date: Mon, 31 Mar 2014 21:39:44 +0100 Subject: [PATCH] =?UTF-8?q?Mise=20a=20jour=20du=20moteur=20de=20template?= =?UTF-8?q?=20pour=20g=C3=A9rer=20les=20traductions.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- songbook_core/templates.py | 46 +++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/songbook_core/templates.py b/songbook_core/templates.py index 9cc10280..58143195 100644 --- a/songbook_core/templates.py +++ b/songbook_core/templates.py @@ -7,6 +7,7 @@ from jinja2.meta import find_referenced_templates as find_templates import os import re import json +import locale _LATEX_SUBS = ( (re.compile(r'\\'), r'\\textbackslash'), @@ -59,30 +60,59 @@ class TexRenderer(object): # TODO: catch the TemplateNotFound self.template = self.texenv.get_template(template) + # Trick to get the language code + self.lang = locale.getdefaultlocale()[0].split('-')[0].split('_')[0] + def get_variables(self): + '''Get and return a dictionary with the default values + for all the variables + ''' data = self.parse_templates() variables = dict() - for param in data: - try: - variables[param["name"]] = param["default"] - except KeyError: - variables[param["name"]] = None + for name, param in data.items(): + variables[name] = self._get_default(param) return variables + def _get_default(self, parameter): + '''Get the default value for the parameter, according to the language. + ''' + default = None + try: + default = parameter['default'] + except KeyError: + return None + + if self.lang in default: + variable = default[self.lang] + elif "default" in default: + variable = default["default"] + elif "en" in default: + variable = default["en"] + elif len(default > 0): + variable = default.popitem()[1] + else: + variable = None + + return variable + def parse_templates(self): + '''Recursively parse all the used templates to extract all the + variables as a dictionary. + ''' templates = self.get_templates(self.template) templates |= set([self.template.name]) - variables = [] - regex = re.compile(r'\(% variables %\)(?P.*)' + variables = {} + regex = re.compile(r'\(% variables %\)\n(?P.*)' '\(% endvariables %\)', re.DOTALL) for template_name in templates: filename = self.texenv.get_template(template_name).filename + print filename with open(filename, 'r') as template_file: content = template_file.read() match = re.search(regex, content) if match: content = match.group('variables') - variables += json.loads(content) + variables.update(json.loads(content)) return variables def get_templates(self, template):