From 2df31977ececc3c71c902795bbceca9be33bbc14 Mon Sep 17 00:00:00 2001 From: Louis Date: Mon, 25 Mar 2013 21:40:32 +0100 Subject: [PATCH] =?UTF-8?q?Les=20modules=20LaTeX=20ne=20sont=20charg=C3=A9?= =?UTF-8?q?s=20qu'une=20seule=20fois=20par=20PlasTeX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/plastex.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/utils/plastex.py b/utils/plastex.py index 7773546a..0402817d 100755 --- a/utils/plastex.py +++ b/utils/plastex.py @@ -1,8 +1,30 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -import plasTeX from plasTeX.TeX import TeX +import codecs +import copy + +from utils import songs + +class SongParser: + """Classe singleton, pour ne charger qu'une fois les modules LaTeX""" + _tex = None + + @classmethod + def _create_TeX(cls): + cls._tex = TeX() + cls._tex.disableLogging() + cls._tex.ownerDocument.context.loadBaseMacros() + cls._tex.ownerDocument.context.loadPackage(cls._tex, "babel") + + @classmethod + def parse(cls, filename): + if not cls._tex: + cls._create_TeX() + tex = copy.copy(cls._tex) + tex.input(codecs.open(filename, 'r+', 'utf-8', 'replace')) + return tex.parse() def parsetex(filename): """Analyse syntaxique d'un fichier .sg @@ -12,13 +34,8 @@ def parsetex(filename): - languages: l'ensemble des langages utilisés (recherche des \selectlanguages{}). """ - # Chargement du fichier .sg (.tex), et des modules nécessaires - tex = TeX(file = filename) - tex.disableLogging() - tex.ownerDocument.context.loadPackage(tex, "babel") - # Analyse syntaxique - doc= tex.parse() + doc = SongParser.parse(filename) # Extraction des données data = {