61 lines
2 KiB
Python
61 lines
2 KiB
Python
import tempfile
|
|
import os
|
|
from .enums import TeXType
|
|
from .formatting_config import FormattingConfig
|
|
from .pytex_formatter import PyTeXFormatter
|
|
from pathlib import Path
|
|
import subprocess
|
|
import shutil
|
|
|
|
from typing import List, Tuple
|
|
|
|
|
|
class DocStripFormatter(PyTeXFormatter):
|
|
|
|
@property
|
|
def output_files(self) -> List[str]:
|
|
if self.config.tex_out_type == TeXType.TeXClass:
|
|
return [self.raw_name + '.cls']
|
|
elif self.config.tex_out_type == TeXType.TeXPackage:
|
|
return [self.raw_name + '.sty']
|
|
else:
|
|
raise NotImplementedError
|
|
|
|
def format(self, build_dir: Path, overwrite: bool = False) -> List[Tuple[str, FormattingConfig]]:
|
|
tmp_dir: Path = Path(tempfile.mkdtemp())
|
|
shutil.copy(
|
|
self.input_file,
|
|
tmp_dir
|
|
)
|
|
if self.input_file.with_suffix('.ins').exists():
|
|
shutil.copy(
|
|
self.input_file.with_suffix('.ins'),
|
|
tmp_dir
|
|
)
|
|
result = subprocess.run(
|
|
["tex", self.input_file.with_suffix('.ins').name],
|
|
cwd=tmp_dir,
|
|
stderr=subprocess.DEVNULL, # TODO
|
|
stdout=subprocess.DEVNULL # TODO
|
|
)
|
|
if not result.returncode == 0:
|
|
raise NotImplementedError('no correct returncode')
|
|
else:
|
|
result = subprocess.run(
|
|
['pdflatex', self.input_file.name],
|
|
cwd=tmp_dir,
|
|
stderr=subprocess.STDOUT
|
|
)
|
|
if not result.returncode == 0:
|
|
raise NotImplementedError
|
|
for file in self.output_files:
|
|
outfile = tmp_dir / file
|
|
if not outfile.exists():
|
|
raise NotImplementedError(f'output file {outfile} does not exist')
|
|
shutil.copy(outfile, build_dir)
|
|
shutil.rmtree(tmp_dir)
|
|
return [] # No future config
|
|
|
|
@property
|
|
def dependencies(self) -> List[str]:
|
|
return [] # TODO
|