<commit_before># coding: utf-8
"""Gestion des documents tex

Ces documents nécessitent TeXLive (ou équivalent) avec un ensemble raisonnable
d'extensions.

Pour la documentation, google est votre ami…
Les pages de <NAME>-Gonnard peuvent être de quelque utilité pour un bon
point de départ :
https://elzevir.fr/imj/latex/
"""
from . import txt as txt
from etc import config as cfg
import os
import shutil
import re
from deps.outils import copytree, traiter_erreur, templateperso, _

TEMPLATETEX = templateperso()


class Document(txt.Document):
    """Document tex
    """
    def __init__(self, chemin, proprietes=None):
        txt.Document.__init__(
            self, chemin,
            formats={
                'pdf': (self.pdf, {
                    'aa_perso': (_("Personnaliser la mise en page"), False),
                    'document': (_("Document"), {
                        'ba_papier':
                            (
                                _("Taille de la page (largeur, hauteur)"),
                                '210mm, 297mm'
                            ),
                        'marge':
                            (
                                _("Marges (haut, bas, gauche, droite)"),
                                ('25mm', '35mm', '25mm', '25mm')
                            ),
                        'page_numero':
                            (_("Numéros de page"), True),
                    }),
                    'police': (_("Police"), {
                        'police_famille':
                            (_("Nom"), 'libertine'),
                        'police_taille':
                            (_("Taille de la police"), '12'),
                    }),
                }),
            },
            proprietes=proprietes
        )

    @property
    def _documentmaitre(self):
        """Test pour savoir s'il s'agit d'un document maître
        """
        entete = re.compile('\\\\documentclass')
        with self._fichier().open() as doc:
            for ligne in doc:
                if entete.match(ligne):
                    return True
        return False

    @property
    def obsolete(self):
        return self.est_obsolete(self._fichiersortie('pdf'))

    def afficher(self, actualiser=0):
        if self._documentmaitre:
            return self.afficher_pdf(actualiser=actualiser)
        else:
            return txt.Document.afficher(self, actualiser=actualiser)

    def pdf(self, chemin=None, indice='', actualiser=0):
        """Format pdf

        Pour les documents latex, on désactive l'actualisation automatique,
        pour les raisons suivantes :

        - la compilation peut être longue, et l'utilisateur n'a pas forcément<commit_msg>TeX : ajout d'un critère pour reconnaître un document maître<commit_after># coding: utf-8
"""Gestion des documents tex

Ces documents nécessitent TeXLive (ou équivalent) avec un ensemble raisonnable
d'extensions.

Pour la documentation, google est votre ami…
Les pages de <NAME> peuvent être de quelque utilité pour un bon
point de départ :
https://elzevir.fr/imj/latex/
"""
from . import txt as txt
from etc import config as cfg
import os
import shutil
import re
from deps.outils import copytree, traiter_erreur, templateperso, _

TEMPLATETEX = templateperso()


class Document(txt.Document):
    """Document tex
    """
    def __init__(self, chemin, proprietes=None):
        txt.Document.__init__(
            self, chemin,
            formats={
                'pdf': (self.pdf, {
                    'aa_perso': (_("Personnaliser la mise en page"), False),
                    'document': (_("Document"), {
                        'ba_papier':
                            (
                                _("Taille de la page (largeur, hauteur)"),
                                '210mm, 297mm'
                            ),
                        'marge':
                            (
                                _("Marges (haut, bas, gauche, droite)"),
                                ('25mm', '35mm', '25mm', '25mm')
                            ),
                        'page_numero':
                            (_("Numéros de page"), True),
                    }),
                    'police': (_("Police"), {
                        'police_famille':
                            (_("Nom"), 'libertine'),
                        'police_taille':
                            (_("Taille de la police"), '12'),
                    }),
                }),
            },
            proprietes=proprietes
        )

    @property
    def _documentmaitre(self):
        """Test pour savoir s'il s'agit d'un document maître
        """
        entete = re.compile('\\\\documentclass|\\\\begin{document}')
        with self._fichier().open() as doc:
            for ligne in doc:
                if entete.match(ligne):
                    return True
        return False

    @property
    def obsolete(self):
        return self.est_obsolete(self._fichiersortie('pdf'))

    def afficher(self, actualiser=0):
        if self._documentmaitre:
            return self.afficher_pdf(actualiser=actualiser)
        else:
            return txt.Document.afficher(self, actualiser=actualiser)

    def pdf(self, chemin=None, indice='', actualiser=0):
        """Format pdf

        Pour les documents latex, on désactive l'actualisation automatique,
        pour les raisons suivantes :

        - la compilation peut être longue, et l'utilisateur n'a pas forcément
{'fraction_non_alphanumeric': 0.10376843255051885, 'fraction_numerical': 0.006917895503367923, 'mean_word_length': 1.4758900405588102, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '755026', 'n_tokens_mistral': 1537, 'n_tokens_neox': 1471, 'n_words': 401}