diff --git a/.gitignore b/.gitignore index 1cb9fdc..30da264 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -__pycache__/* +**/__pycache__ .idea/* main.py test.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..4649aef --- /dev/null +++ b/__init__.py @@ -0,0 +1,6 @@ +from PyTeX.default_formatters import ClassFormatter, PackageFormatter + +__all__ = [ + "ClassFormatter", + "PackageFormatter" +] diff --git a/base/__init__.py b/base/__init__.py new file mode 100644 index 0000000..299428e --- /dev/null +++ b/base/__init__.py @@ -0,0 +1,11 @@ +from .config import LICENSE, DEFAULT_AUTHOR, PACKAGE_INFO_TEXT, PYTEX_INFO_TEXT +from .enums import Attributes, Args + +__all__ = [ + 'LICENSE', + 'DEFAULT_AUTHOR', + 'PACKAGE_INFO_TEXT', + 'PYTEX_INFO_TEXT', + 'Args', + 'Attributes' +] diff --git a/config.py b/base/config.py similarity index 100% rename from config.py rename to base/config.py diff --git a/enums.py b/base/enums.py similarity index 100% rename from enums.py rename to base/enums.py diff --git a/class_formatter.py b/class_formatter.py deleted file mode 100644 index f76e0ab..0000000 --- a/class_formatter.py +++ /dev/null @@ -1,11 +0,0 @@ -from formatter import Formatter -from config import DEFAULT_AUTHOR -from replacements import make_default_commands - - -class ClassFormatter(Formatter): - def __init__(self, class_name: str, author: str = DEFAULT_AUTHOR, extra_header: str = ''): - Formatter.__init__(self, class_name, author, extra_header, '.cls') - - def make_default_macros(self): - make_default_commands(self, 'class') diff --git a/default_formatters/__init__.py b/default_formatters/__init__.py new file mode 100644 index 0000000..b32b533 --- /dev/null +++ b/default_formatters/__init__.py @@ -0,0 +1,7 @@ +from .class_formatter import ClassFormatter +from .package_formatter import PackageFormatter + +__all__ = [ + 'PackageFormatter', + 'ClassFormatter' +] diff --git a/default_formatters/class_formatter.py b/default_formatters/class_formatter.py new file mode 100644 index 0000000..9a1b77b --- /dev/null +++ b/default_formatters/class_formatter.py @@ -0,0 +1,11 @@ +import PyTeX.formatter +import PyTeX.base +import PyTeX.macros + + +class ClassFormatter(PyTeX.formatter.TexFormatter): + def __init__(self, class_name: str, author: str = PyTeX.base.DEFAULT_AUTHOR, extra_header: [str] = []): + PyTeX.formatter.TexFormatter.__init__(self, class_name, author, extra_header, '.cls') + + def make_default_macros(self): + PyTeX.macros.make_default_macros(self, 'class') diff --git a/default_formatters/package_formatter.py b/default_formatters/package_formatter.py new file mode 100644 index 0000000..3da18e7 --- /dev/null +++ b/default_formatters/package_formatter.py @@ -0,0 +1,11 @@ +import PyTeX.formatter +import PyTeX.base +import PyTeX.macros + + +class PackageFormatter(PyTeX.formatter.TexFormatter): + def __init__(self, package_name: str, author: str = PyTeX.base.DEFAULT_AUTHOR, extra_header: [str] = []): + PyTeX.formatter.TexFormatter.__init__(self, package_name, author, extra_header, '.cls') + + def make_default_macros(self): + PyTeX.macros.make_default_macros(self, 'package') diff --git a/formatter/__init__.py b/formatter/__init__.py new file mode 100644 index 0000000..7093d28 --- /dev/null +++ b/formatter/__init__.py @@ -0,0 +1,5 @@ +from .tex_formatter import TexFormatter + +__all__ = [ + 'TexFormatter' +] diff --git a/formatter.py b/formatter/tex_formatter.py similarity index 82% rename from formatter.py rename to formatter/tex_formatter.py index 85df89e..f773cda 100644 --- a/formatter.py +++ b/formatter/tex_formatter.py @@ -3,11 +3,12 @@ import re from pathlib import Path from typing import Dict from datetime import * -from enums import Attributes, Args + +from PyTeX.base import Attributes, Args -class Formatter: - def __init__(self, name: str, author: str, extra_header: str, file_extension: str): +class TexFormatter: + def __init__(self, name: str, author: str, extra_header: [str], file_extension: str): self.extra_header = extra_header self.name_raw = name self.author = author @@ -24,10 +25,10 @@ class Formatter: self.source_file_name = "not specified" @staticmethod - def command_name2keyword(keyword: str): + def __command_name2keyword(keyword: str): return '__' + keyword.upper().strip().replace(' ', '_') + '__' - def parse_replacement_args(self, match_groups, *user_args, **user_kwargs): + def __parse_replacement_args(self, match_groups, *user_args, **user_kwargs): new_args = [] for arg in user_args: if type(arg) == Attributes: @@ -51,24 +52,12 @@ class Formatter: new_kwargs[kw] = 'ERROR' return new_args, new_kwargs - def add_replacement(self, keyword: str, replacement: str, *args, **kwargs): - args, kwargs = self.parse_replacement_args([], *args, **kwargs) - self.replace_dict[self.command_name2keyword(keyword)] = replacement.format(*args, **kwargs) - - def add_arg_replacement(self, num_args: int, keyword: str, replacement: str, *args, **kwargs): - self.arg_replace_dict[self.command_name2keyword(keyword)] = { - 'num_args': num_args, - 'replacement': replacement, - 'format_args': args, - 'format_kwargs': kwargs - } - - def format_string(self, contents: str) -> str: + def __format_string(self, contents: str) -> str: for key in self.replace_dict.keys(): contents = contents.replace(key, self.replace_dict[key]) return contents - def format_string_with_arg(self, contents: str) -> str: + def __format_string_with_arg(self, contents: str) -> str: for command in self.arg_replace_dict.keys(): search_regex = re.compile(r'{keyword}\({arguments}(?