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