diff --git a/PyTeX/build/build/builder.py b/PyTeX/build/build/builder.py index 04b7689..ee4da2a 100644 --- a/PyTeX/build/build/builder.py +++ b/PyTeX/build/build/builder.py @@ -6,6 +6,8 @@ import shutil from .enums import PyTeXRootDirType from .pytex_config import PyTeXConfig +from ...exceptions import PyTeXException +from ...format.errors import PyTeXError from ...format.formatting_config import FormattingConfig from ...logger import logger from .constants import * @@ -304,7 +306,11 @@ class PyTeXBuilder: logger.info(f"Needing to build {len(self._files_to_build)} many files.") self._check_output_directory_integrity() # 1ms logger.info(f"Starting build") - self._build_files() # 53 ms + try: + self._build_files() # 53 ms + except PyTeXError as e: + e.add_explanation('while building output files') + raise e logger.info(f"Built files") self._move_files() self._write_version_info() diff --git a/PyTeX/format/dtx_formatter.py b/PyTeX/format/dtx_formatter.py index 1391c60..0c0adda 100644 --- a/PyTeX/format/dtx_formatter.py +++ b/PyTeX/format/dtx_formatter.py @@ -25,7 +25,7 @@ class DTXFormatter(TexFormatter): files.append(self.name + '.ins') return files - def _get_internal_file(self) -> str: + def _get_internal_file(self, comment: bool) -> str: g = GenericText(INS_FILE) switcher = { TeXType.TeXPackage: '.sty', @@ -37,46 +37,58 @@ class DTXFormatter(TexFormatter): preamble='', # TODO postamble='', # TODO guards=', '.join(self.config.docstrip_guards), - padding=False + padding=False, + comment=comment ) - def _get_drv_file(self) -> str: + def _get_drv_file(self, comment: bool) -> str: g = GenericText(DRV_FILE) return g.format( documentclass='l3doc', # TODO preamble='', # TODO infile=self.name + '.dtx', - padding=False + padding=False, + comment=comment ) def format_pre_header(self) -> None: - self._shipout_line(r'% \iffalse meta-comment') + if self.current_file_name().endswith('.dtx'): + self._shipout_line(r'% \iffalse meta-comment') def format_post_header(self) -> None: - self._shipout_line('%') - self._shipout_line( - self._get_internal_file() - ) - self._shipout_line('%<*internal>') - self._shipout_line('%') - self._shipout_line( - '%<{outtype}>{provides}'.format( - outtype=self.config.tex_out_type.value, - provides=self._get_provides_text( - self.config.tex_out_type.value.capitalize() + if self.current_file_name().endswith('.dtx'): + self._shipout_line('%') + self._shipout_line( + self._get_internal_file(comment=True) + ) + self._shipout_line('%<*internal>') + self._shipout_line('%') + self._shipout_line( + '%<{outtype}>{provides}'.format( + outtype=self.config.tex_out_type.value, + provides=self._get_provides_text( + self.config.tex_out_type.value.capitalize() + ) ) ) - ) - self._shipout_line('%') - self._shipout_line('%<*driver>') - self._shipout_line( - self._get_drv_file() - ) - self._shipout_line('%') - self._shipout_line(r'% \fi') - self._shipout_line('%') - self.mode = FormatterMode.meta - pass + self._shipout_line('%') + self._shipout_line('%<*driver>') + self._shipout_line( + self._get_drv_file(comment=True) + ) + self._shipout_line('%') + self._shipout_line(r'% \fi') + self._shipout_line('%') + self.mode = FormatterMode.meta + pass + elif self.current_file_name().endswith('.ins'): + self._shipout_line( + self._get_internal_file(comment=False) + ) + elif self.current_file_name().endswith('.drv'): + self._shipout_line( + self._get_drv_file(comment=False) + ) def _post_process_line(self, line: str) -> str: line = line.rstrip(' %\n') diff --git a/PyTeX/format/generic_text.py b/PyTeX/format/generic_text.py index 9e09c01..32bfc86 100644 --- a/PyTeX/format/generic_text.py +++ b/PyTeX/format/generic_text.py @@ -63,13 +63,19 @@ class GenericText: def format(self, **kwargs) -> str: padding = True + comment = True if 'padding' in kwargs.keys(): padding = kwargs['padding'] kwargs.pop('padding', None) + if 'comment' in kwargs.keys(): + comment = kwargs['comment'] + kwargs.pop('comment', None) lines = [] for line in self.text: try: - line = '% ' + line.rstrip().format(**kwargs) + line = line.rstrip().format(**kwargs) + if comment: + line = '% ' + line if padding: line = line.ljust(79) + '%' if len(line) > 80: diff --git a/PyTeX/format/tex_formatter.py b/PyTeX/format/tex_formatter.py index 88373ad..e1694a0 100644 --- a/PyTeX/format/tex_formatter.py +++ b/PyTeX/format/tex_formatter.py @@ -82,6 +82,7 @@ class TexFormatter(PyTeXFormatter, ABC): raise NotImplementedError else: self._output_file = out_file.open('w') + self.mode = FormatterMode.normal def close_output_stream(self) -> None: self._output_file.close()