implement correct dropping modes
This commit is contained in:
parent
74b185e35c
commit
d1d6252e8b
4 changed files with 57 additions and 8 deletions
|
@ -32,6 +32,7 @@ def get_default_macros(tex_flavour: TeXFlavour):
|
||||||
ConfigBeginMacro(),
|
ConfigBeginMacro(),
|
||||||
MacroCodeBeginMacro(),
|
MacroCodeBeginMacro(),
|
||||||
MacroCodeEndMacro(),
|
MacroCodeEndMacro(),
|
||||||
|
GuardMacro(),
|
||||||
]
|
]
|
||||||
tex2 = [
|
tex2 = [
|
||||||
ArgumentMacro(
|
ArgumentMacro(
|
||||||
|
|
|
@ -2,15 +2,37 @@ from __future__ import annotations
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from PyTeX.logger import logger
|
|
||||||
|
|
||||||
|
|
||||||
class FormatterMode(Enum):
|
class FormatterMode(Enum):
|
||||||
normal = 0
|
normal = 0
|
||||||
drop = 1
|
normal_drop = 1
|
||||||
macrocode = 2
|
macrocode = 2
|
||||||
macrocode_drop = 3
|
macrocode_drop = 3
|
||||||
meta = 4
|
meta = 4
|
||||||
|
meta_drop = 5
|
||||||
|
|
||||||
|
def to_drop(self):
|
||||||
|
switcher = {
|
||||||
|
FormatterMode.normal: FormatterMode.normal_drop,
|
||||||
|
FormatterMode.macrocode: FormatterMode.macrocode_drop,
|
||||||
|
FormatterMode.meta: FormatterMode.meta_drop
|
||||||
|
}
|
||||||
|
return switcher[self]
|
||||||
|
|
||||||
|
def to_undrop(self):
|
||||||
|
switcher = {
|
||||||
|
FormatterMode.normal_drop: FormatterMode.normal,
|
||||||
|
FormatterMode.macrocode_drop: FormatterMode.macrocode,
|
||||||
|
FormatterMode.meta_drop: FormatterMode.meta
|
||||||
|
}
|
||||||
|
return switcher[self]
|
||||||
|
|
||||||
|
def is_drop(self) -> bool:
|
||||||
|
return self.value in [
|
||||||
|
FormatterMode.normal_drop.value,
|
||||||
|
FormatterMode.macrocode_drop.value,
|
||||||
|
FormatterMode.meta_drop.value
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class NamingScheme(Enum):
|
class NamingScheme(Enum):
|
||||||
|
|
|
@ -133,6 +133,23 @@ class SingleLineMacro(Macro, ABC):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class RegexSingleLineMacro(SingleLineMacro, ABC):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
regex: str,
|
||||||
|
strip: str = ' %\n'
|
||||||
|
):
|
||||||
|
self.regex = regex
|
||||||
|
super(RegexSingleLineMacro, self).__init__(strip)
|
||||||
|
|
||||||
|
def _matches(self, line: str) -> Optional[str]:
|
||||||
|
match = re.search(self.regex, line)
|
||||||
|
if match is not None:
|
||||||
|
return match.group()
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class SimpleSingleLineMacro(SingleLineMacro, ABC):
|
class SimpleSingleLineMacro(SingleLineMacro, ABC):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
@ -146,14 +163,23 @@ class SimpleSingleLineMacro(SingleLineMacro, ABC):
|
||||||
return self.chars if self.chars in line else None
|
return self.chars if self.chars in line else None
|
||||||
|
|
||||||
|
|
||||||
|
class GuardMacro(RegexSingleLineMacro):
|
||||||
|
def __init__(self):
|
||||||
|
super(GuardMacro, self).__init__(r'<(\*|/|@@=)[a-zA-Z]*>')
|
||||||
|
|
||||||
|
def _apply(self, line, formatter) -> Union[str, List[str]]:
|
||||||
|
match = re.search(self.regex, line)
|
||||||
|
return '%' + match.group()
|
||||||
|
|
||||||
|
|
||||||
class ConfigBeginMacro(SimpleSingleLineMacro):
|
class ConfigBeginMacro(SimpleSingleLineMacro):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(ConfigBeginMacro, self).__init__(FORMATTER_PREFIX + INFILE_CONFIG_BEGIN_CONFIG)
|
super(ConfigBeginMacro, self).__init__(FORMATTER_PREFIX + INFILE_CONFIG_BEGIN_CONFIG)
|
||||||
|
|
||||||
def _apply(self, line: str, formatter) -> Union[str, List[str]]:
|
def _apply(self, line: str, formatter) -> Union[str, List[str]]:
|
||||||
if formatter.mode not in [FormatterMode.normal, FormatterMode.meta]:
|
if formatter.mode.is_drop():
|
||||||
raise NotImplementedError # invalid config begin
|
raise NotImplementedError # invalid config begin
|
||||||
formatter.mode = FormatterMode.drop
|
formatter.mode = formatter.mode.to_drop()
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
@ -162,9 +188,9 @@ class ConfigEndMacro(SimpleSingleLineMacro):
|
||||||
super(ConfigEndMacro, self).__init__(FORMATTER_PREFIX + INFILE_CONFIG_END_CONFIG)
|
super(ConfigEndMacro, self).__init__(FORMATTER_PREFIX + INFILE_CONFIG_END_CONFIG)
|
||||||
|
|
||||||
def _apply(self, line: str, formatter) -> Union[str, List[str]]:
|
def _apply(self, line: str, formatter) -> Union[str, List[str]]:
|
||||||
if not formatter.mode == FormatterMode.drop:
|
if not formatter.mode.is_drop():
|
||||||
raise NotImplementedError # invalid
|
raise NotImplementedError # invalid
|
||||||
formatter.mode = FormatterMode.normal
|
formatter.mode = formatter.mode.to_undrop()
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ class TexFormatter(PyTeXFormatter, ABC):
|
||||||
def write_line(self, line: str):
|
def write_line(self, line: str):
|
||||||
if self._output_file is None:
|
if self._output_file is None:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
if not self._mode == FormatterMode.drop or self._mode == FormatterMode.macrocode_drop:
|
if not self.mode.is_drop():
|
||||||
self._output_file.write(line)
|
self._output_file.write(line)
|
||||||
|
|
||||||
def format_pre_header(self) -> None:
|
def format_pre_header(self) -> None:
|
||||||
|
|
Loading…
Reference in a new issue