diff --git a/preflight_parser/preflight_parser/__init__.py b/preflight_parser/preflight_parser/__init__.py index 6aa2b20..5ca1c6c 100644 --- a/preflight_parser/preflight_parser/__init__.py +++ b/preflight_parser/preflight_parser/__init__.py @@ -16,6 +16,9 @@ MODULE_PATH = os.path.dirname(__file__) +PDF_SUBMISSION_STRING = "pdf_submission" +HTML_SUBMISSION_STRING = "html_submission" + # # CLASSES AND TYPES # @@ -62,6 +65,8 @@ class LanguageType(str, Enum): TEX does not allow compiling as latex, e.g., because it contains \bye LATEX does not allow compiling as plain tex, e.g., because it contains \documentclass + PDF is for PDF only submissions. + HTML is for HTML only submissions. UNKNOWN allows compilation as either TEX or LATEX. """ @@ -69,6 +74,7 @@ class LanguageType(str, Enum): tex = "tex" latex = "latex" pdf = "pdf" + html = "html" class EngineType(str, Enum): @@ -211,7 +217,9 @@ def compiler_string(self) -> str | None: """Convert Language/Output/Engine/PostProcess to compiler string.""" # first deal with PDF only submissions: if self.lang.value == "pdf": - return "pdf_submission" + return PDF_SUBMISSION_STRING + if self.lang.value == "html": + return HTML_SUBMISSION_STRING if self.lang in self._COMPILER_SELECTION: if self.output in self._COMPILER_SELECTION[self.lang]: if self.engine in self._COMPILER_SELECTION[self.lang][self.output]: @@ -229,7 +237,9 @@ def tex_compiler(self) -> str | None: """Return the TeX compiler to be used.""" # first deal with PDF only submissions: if self.lang.value == "pdf": - return "pdf_submission" + return PDF_SUBMISSION_STRING + if self.lang.value == "html": + return HTML_SUBMISSION_STRING if self.lang in self._COMPILER_SELECTION: if self.output in self._COMPILER_SELECTION[self.lang]: if self.engine in self._COMPILER_SELECTION[self.lang][self.output]: @@ -238,12 +248,18 @@ def tex_compiler(self) -> str | None: def from_compiler_string(self, compiler: str): """Convert compiler string to Language/Output/Engine/PostProcess types.""" - if compiler == "pdf_submission": + if compiler == PDF_SUBMISSION_STRING: self.lang = LanguageType.pdf self.engine = EngineType.unknown self.output = OutputType.unknown self.postp = PostProcessType.none return + if compiler == HTML_SUBMISSION_STRING: + self.lang = LanguageType.html + self.engine = EngineType.unknown + self.output = OutputType.unknown + self.postp = PostProcessType.none + return parts = compiler.split("+", 1) comp: str = "" if len(parts) == 2: @@ -953,8 +969,15 @@ def parse_dir(rundir) -> dict[str, ParsedTeXFile] | ToplevelFile: if len(files) == 1 and files[0].lower().endswith(".pdf"): # PDF only submission, only one PDF file, nothing else return ToplevelFile( - filename=files[0], process=MainProcessSpec(compiler=CompilerSpec(compiler="pdf_submission")) + filename=files[0], process=MainProcessSpec(compiler=CompilerSpec(compiler=PDF_SUBMISSION_STRING)) ) + else: + # check for HTML submissions + for f in sorted(files): + if f.lower().endswith(".html"): + return ToplevelFile( + filename=f, process=MainProcessSpec(compiler=CompilerSpec(compiler=HTML_SUBMISSION_STRING)) + ) nodes = {f: parse_file(rundir, f) for f in tex_files} # print(nodes) return nodes diff --git a/preflight_parser/tests/fixture/html_1/figure1.eps b/preflight_parser/tests/fixture/html_1/figure1.eps new file mode 100644 index 0000000..e69de29 diff --git a/preflight_parser/tests/fixture/html_1/figure2.png b/preflight_parser/tests/fixture/html_1/figure2.png new file mode 100644 index 0000000..e69de29 diff --git a/preflight_parser/tests/fixture/html_1/figure3.jpg b/preflight_parser/tests/fixture/html_1/figure3.jpg new file mode 100644 index 0000000..e69de29 diff --git a/preflight_parser/tests/fixture/html_1/paper.html b/preflight_parser/tests/fixture/html_1/paper.html new file mode 100644 index 0000000..d8e787d --- /dev/null +++ b/preflight_parser/tests/fixture/html_1/paper.html @@ -0,0 +1,13 @@ + +
+ +