From e760eaef6d8f6371de318d65e9ffd11f28008f40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Ke=C3=9Fler?= Date: Wed, 9 Feb 2022 19:39:27 +0100 Subject: [PATCH] implement config begin and end macros to drop config at beginning of file --- PyTeX/format/default_macros.py | 4 +++- PyTeX/format/macros.py | 38 +++++++++++++++++++++++++++++++++- PyTeX/format/tex_formatter.py | 8 +++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/PyTeX/format/default_macros.py b/PyTeX/format/default_macros.py index fee0a58..d059171 100644 --- a/PyTeX/format/default_macros.py +++ b/PyTeX/format/default_macros.py @@ -14,5 +14,7 @@ def make_simple_macro(name: str, arg): def get_default_macros(): return [ make_simple_macro('!', FormatterProperty.file_prefix), - make_simple_macro('name', FormatterProperty.name) + make_simple_macro('name', FormatterProperty.name), + ConfigEndMacro(), + ConfigBeginMacro() ] diff --git a/PyTeX/format/macros.py b/PyTeX/format/macros.py index 10d6052..0bf8750 100644 --- a/PyTeX/format/macros.py +++ b/PyTeX/format/macros.py @@ -2,7 +2,7 @@ import re from typing import List, Union, Tuple, Dict from .constants import * -from .enums import FormatterProperty, Argument +from .enums import FormatterProperty, Argument, FormatterMode from abc import ABC, abstractmethod @@ -98,6 +98,42 @@ class SimpleMacro(Macro): )) +class SingleLineMacro(Macro, ABC): + def __init__( + self, + chars: str, + strip: str = ' %\n' + ): + self.chars = chars + self.strip = strip + def matches(self, line: str) -> bool: + if line.find(self.chars) != -1: + if not line.strip(self.strip) == self.chars: + raise NotImplementedError + return True + else: + return False + +class ConfigBeginMacro(SingleLineMacro): + def __init__(self): + super(ConfigBeginMacro, self).__init__(FORMATTER_PREFIX + INFILE_CONFIG_BEGIN_CONFIG) + + def apply(self, line: str, formatter) -> Union[str, List[str]]: + if not formatter.mode == FormatterMode.normal: + raise NotImplementedError # invalid config begin + formatter.mode = FormatterMode.drop + return [] + +class ConfigEndMacro(SingleLineMacro): + def __init__(self): + super(ConfigEndMacro, self).__init__(FORMATTER_PREFIX + INFILE_CONFIG_END_CONFIG) + + def apply(self, line: str, formatter) -> Union[str, List[str]]: + if not formatter.mode == FormatterMode.drop: + raise NotImplementedError # invalid + formatter.mode = FormatterMode.normal + return [] + class ArgumentMacro(Macro): def __init__( self, diff --git a/PyTeX/format/tex_formatter.py b/PyTeX/format/tex_formatter.py index 5fb755e..ac78a65 100644 --- a/PyTeX/format/tex_formatter.py +++ b/PyTeX/format/tex_formatter.py @@ -135,6 +135,14 @@ class TexFormatter(PyTeXFormatter, ABC): def format_pre_header(self) -> None: pass + @property + def mode(self) -> FormatterMode: + return self._mode + + @mode.setter + def mode(self, mode: FormatterMode) -> None: + self._mode = mode + def format_header(self): if self._output_file is None: raise NotImplementedError