You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
import json
 | 
						|
from pathlib import Path
 | 
						|
import shutil
 | 
						|
 | 
						|
import matplotlib.dviread as dr
 | 
						|
import pytest
 | 
						|
 | 
						|
 | 
						|
def test_PsfontsMap(monkeypatch):
 | 
						|
    monkeypatch.setattr(dr, 'find_tex_file', lambda x: x.decode())
 | 
						|
 | 
						|
    filename = str(Path(__file__).parent / 'baseline_images/dviread/test.map')
 | 
						|
    fontmap = dr.PsfontsMap(filename)
 | 
						|
    # Check all properties of a few fonts
 | 
						|
    for n in [1, 2, 3, 4, 5]:
 | 
						|
        key = b'TeXfont%d' % n
 | 
						|
        entry = fontmap[key]
 | 
						|
        assert entry.texname == key
 | 
						|
        assert entry.psname == b'PSfont%d' % n
 | 
						|
        if n not in [3, 5]:
 | 
						|
            assert entry.encoding == 'font%d.enc' % n
 | 
						|
        elif n == 3:
 | 
						|
            assert entry.encoding == 'enc3.foo'
 | 
						|
        # We don't care about the encoding of TeXfont5, which specifies
 | 
						|
        # multiple encodings.
 | 
						|
        if n not in [1, 5]:
 | 
						|
            assert entry.filename == 'font%d.pfa' % n
 | 
						|
        else:
 | 
						|
            assert entry.filename == 'font%d.pfb' % n
 | 
						|
        if n == 4:
 | 
						|
            assert entry.effects == {'slant': -0.1, 'extend': 1.2}
 | 
						|
        else:
 | 
						|
            assert entry.effects == {}
 | 
						|
    # Some special cases
 | 
						|
    entry = fontmap[b'TeXfont6']
 | 
						|
    assert entry.filename is None
 | 
						|
    assert entry.encoding is None
 | 
						|
    entry = fontmap[b'TeXfont7']
 | 
						|
    assert entry.filename is None
 | 
						|
    assert entry.encoding == 'font7.enc'
 | 
						|
    entry = fontmap[b'TeXfont8']
 | 
						|
    assert entry.filename == 'font8.pfb'
 | 
						|
    assert entry.encoding is None
 | 
						|
    entry = fontmap[b'TeXfont9']
 | 
						|
    assert entry.psname == b'TeXfont9'
 | 
						|
    assert entry.filename == '/absolute/font9.pfb'
 | 
						|
    # First of duplicates only.
 | 
						|
    entry = fontmap[b'TeXfontA']
 | 
						|
    assert entry.psname == b'PSfontA1'
 | 
						|
    # Slant/Extend only works for T1 fonts.
 | 
						|
    entry = fontmap[b'TeXfontB']
 | 
						|
    assert entry.psname == b'PSfontB6'
 | 
						|
    # Subsetted TrueType must have encoding.
 | 
						|
    entry = fontmap[b'TeXfontC']
 | 
						|
    assert entry.psname == b'PSfontC3'
 | 
						|
    # Missing font
 | 
						|
    with pytest.raises(LookupError, match='no-such-font'):
 | 
						|
        fontmap[b'no-such-font']
 | 
						|
    with pytest.raises(LookupError, match='%'):
 | 
						|
        fontmap[b'%']
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.skipif(shutil.which("kpsewhich") is None,
 | 
						|
                    reason="kpsewhich is not available")
 | 
						|
def test_dviread():
 | 
						|
    dirpath = Path(__file__).parent / 'baseline_images/dviread'
 | 
						|
    with (dirpath / 'test.json').open() as f:
 | 
						|
        correct = json.load(f)
 | 
						|
    with dr.Dvi(str(dirpath / 'test.dvi'), None) as dvi:
 | 
						|
        data = [{'text': [[t.x, t.y,
 | 
						|
                           chr(t.glyph),
 | 
						|
                           t.font.texname.decode('ascii'),
 | 
						|
                           round(t.font.size, 2)]
 | 
						|
                          for t in page.text],
 | 
						|
                 'boxes': [[b.x, b.y, b.height, b.width] for b in page.boxes]}
 | 
						|
                for page in dvi]
 | 
						|
    assert data == correct
 |