Ejemplo n.º 1
0
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"
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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