def test_todo_disable(tmpdir): renderer = Renderer() def render_todo(obj): if obj.ownerDocument.todoNotesDisable: return "disabled" else: return str(obj.attributes["todo"]) renderer["todo"] = render_todo enabled = r''' \documentclass{article} \usepackage{todonotes} \begin{document} \todo{foo} \end{document} ''' disabled = r''' \documentclass{article} \usepackage[disable]{todonotes} \begin{document} \todo{foo} \end{document} ''' with tmpdir.as_cwd(): renderer.render(TeX().input(enabled).parse()) assert Path("index").read_text().strip() == "foo" renderer.render(TeX().input(disabled).parse()) assert Path("index").read_text().strip() == "disabled"
def test_imager(imager_tuple, tmpdir): imager, ext, compiler = imager_tuple if ext == ".svg": kind = "vector-imager" else: kind = "imager" tmpdir = Path(str(tmpdir)) # for old pythons tex = TeX() tex.ownerDocument.config['images'][kind] = imager if compiler is not None: tex.ownerDocument.config['images'][kind.replace("imager", "compiler")] = compiler tex.input(r''' \documentclass{article} \AtBeginDocument{You should not be seeing this in the imager output. This is injected into the document with \textbackslash AtBeginDocument. The actual image is on the second page and the imager should get the images from there.} \begin{document} $a + b = x$ \end{document} ''') renderer = Renderer() if kind == "imager": renderer['math'] = lambda node: node.image.url else: renderer['math'] = lambda node: node.vectorImage.url directory = os.getcwd() os.chdir(str(tmpdir)) renderer.render(tex.parse()) os.chdir(directory) outfile = tmpdir/'images'/('img-0001' + ext) root = Path(__file__).parent benchfile = root/'benchmarks'/"{}-{}{}".format(imager, compiler, ext) if not benchfile.exists(): (root/'new').mkdir(parents=True, exist_ok=True) shutil.copyfile(str(outfile), str(root/'new'/benchfile.name)) raise OSError('No benchmark file: %s' % benchfile) diff = cmp_img(str(benchfile.absolute()), str(outfile.absolute())) if (ext == '.svg' and diff > 0.0001) or diff > 0.01: (root/'new').mkdir(parents=True, exist_ok=True) shutil.copyfile(str(outfile), str(root/'new'/benchfile.name)) if ext == '.svg': bench = benchfile.read_text().split('\n') output = outfile.read_text() print('SVG differences:\n','\n'.join(difflib.unified_diff( bench, output.split('\n'), fromfile='benchmark', tofile='output')).strip()) print('Full svg:\n\n', output) assert False, 'Differences were found:\n' + str(diff)
def test_imager(enable_bitmap, tmpdir): with tmpdir.as_cwd(): tex = TeX() tex.ownerDocument.config['images']["imager"] = "none" tex.ownerDocument.config['images']["vector-imager"] = "pdf2svg" tex.input(r''' \documentclass{article} \begin{document} $a + b = x$ \end{document} ''') doc = tex.parse() renderer = Renderer() renderer.imager = NullImager(doc) renderer.vectorBitmap = enable_bitmap renderer['math'] = lambda node: node.vectorImage.url if enable_bitmap: with pytest.raises(ValueError): renderer.render(doc) else: renderer.render(doc)
def test_tikz(tmpdir): try: tmpdir = Path(tmpdir) except TypeError: # Fallback for older python tmpdir = Path(str(tmpdir)) root = Path(__file__).parent test_id = "tikz-pdf2svg-gspdfpng" benchdir = root / "benchmarks" / test_id newdir = root / "new" / test_id images = ["images/img-0001.svg", "images/img-0002.svg", "images/img-0001.png", "images/img-0002.png"] config = base_config.copy() config['images']['vector-imager'] = 'pdf2svg' config['images']['imager'] = 'gspdfpng' doc = TeXDocument(config=config) tex = TeX(doc) tex.input(r''' \documentclass{article} \usepackage{tikz} \usepackage{tikz-cd} \begin{document} \begin{tikzpicture} \draw (0, 0) -- (0, 2) -- (2, 0) -- (0, 0); \end{tikzpicture} \begin{tikzcd} A \ar[r, "i"] & B \ar[d, "p"] \\ & C \end{tikzcd} \end{document} ''') renderer = Renderer() def render_image(obj): return "{}\n{}\n".format(obj.vectorImage.url, obj.image.url) renderer["tikzpicture"] = render_image renderer["tikzcd"] = render_image cwd = os.getcwd() os.chdir(str(tmpdir)) renderer.render(tex.parse()) os.chdir(cwd) def new_file(base: str): newfile = newdir / base newfile.parent.mkdir(parents=True, exist_ok=True) shutil.copy(str(tmpdir / base), str(newfile)) # Compare image output error = False try: if not filecmp.cmp(str(tmpdir / "index"), str(benchdir / "index"), shallow=False): print('Differences were found: index', file=sys.stderr) error = True new_file("index") except FileNotFoundError as e: error = True if e.filename == str(tmpdir / "index"): print("Missing output file: index", file=sys.stderr) else: print("Missing benchmark file: index", file=sys.stderr) new_file("index") for f in images: if not (tmpdir / f).exists(): error = True print('Missing output file: %s' % f, file=sys.stderr) elif not (benchdir / f).exists(): error = True print('Missing benchmark file: %s' % f, file=sys.stderr) new_file(f) diff = cmp_img(str(tmpdir / f), str(benchdir / f)) if diff > 0.0001: error = True print('Differences were found: {} ({})'.format(f, diff), file=sys.stderr) new_file(f) if error: assert False
latexcontent = r'''\documentclass{book} \usepackage{latex2cnxmlmod} \usepackage{longtable} \begin{document} %s \end{document}''' % latexcontent tex = TeX.TeX() tex.ownerDocument.config['files']['split-level'] = -100 tex.ownerDocument.config['files']['filename'] = '%s.xml' % inputfile tex.input(latexcontent) document = tex.parse() # Render the document renderer = Renderer() renderer['chapter'] = renderer.section renderer['section'] = renderer.section renderer['subsection'] = renderer.section renderer['subsubsection'] = renderer.section renderer['par'] = renderer.par renderer['itemize'] = renderer.itemize renderer['keyconcepts'] = renderer.keyconcepts renderer['newwords'] = renderer.newwords renderer['bgroup'] = renderer.bgroup renderer['textbf'] = renderer.textbf renderer['textit'] = renderer.textit renderer['displaymath'] = renderer.displaymath renderer['textrm'] = renderer.textrm renderer['active::_'] = renderer.sub renderer['center'] = renderer.center