예제 #1
0
    def testReadGlue2(self):
        s = TeX()
        s.input(r'6pt plus 2pt minus 2pt')
        i = s.readGlue()
        assert i.pt == 6, i.pt
        assert i.stretch.pt == 2, i.stretch.pt
        assert i.shrink.pt == 2, i.shrink.pt

        t = TeX()
        t.input(r'6pt plus 2pt minus 2pt 1.2pt plus -1.fil-1.234pt\foo')
        i = t.readGlue()
        j = t.readGlue()
        k = t.readGlue()

        #       print i.source
        assert i.pt == 6, i.pt
        assert i.stretch.pt == 2, i.stretch.pt
        assert i.shrink.pt == 2, i.shrink.pt

        #       print j.source
        assert j.pt == 1.2, i.pt
        assert j.stretch.fil == -1, j.stretch.fil
        assert j.shrink is None

        #       print k.source
        assert k.pt == -1.234, k.pt
        assert k.stretch is None
        assert k.shrink is None

        tokens = [x for x in t.itertokens()]
        assert tokens == [EscapeSequence('foo')], tokens
예제 #2
0
    def testReadGlue2(self):
        s = TeX()
        s.input(r'6pt plus 2pt minus 2pt')
        i = s.readGlue()
        assert i.pt == 6, i.pt
        assert i.stretch.pt == 2, i.stretch.pt
        assert i.shrink.pt == 2, i.shrink.pt
        
        t = TeX()
        t.input(r'6pt plus 2pt minus 2pt 1.2pt plus -1.fil-1.234pt\foo')
        i = t.readGlue()
        j = t.readGlue()
        k = t.readGlue()

#       print i.source
        assert i.pt == 6, i.pt
        assert i.stretch.pt == 2, i.stretch.pt
        assert i.shrink.pt == 2, i.shrink.pt

#       print j.source
        assert j.pt == 1.2, i.pt
        assert j.stretch.fil == -1, j.stretch.fil
        assert j.shrink is None
        
#       print k.source
        assert k.pt == -1.234, k.pt
        assert k.stretch is None
        assert k.shrink is None

        tokens = [x for x in t.itertokens()]
        assert tokens == [EscapeSequence('foo')], tokens
예제 #3
0
 def testActive2(self):
     t = TeX()
     t.input(
         r'\catcode`|=\active\catcode`/=\active \def|#1{\textbf{#1}/} \def/{\textit{the end}} |{bold text}'
     )
     output = t.parse()
     assert output[-2].nodeName == 'textbf', output[-2].nodeName
     assert output[-1].nodeName == 'textit', output[-1].nodeName
예제 #4
0
    def testNumberSection(self):
        t = TeX()
        t.input(r'''
\documentclass{article}
\begin{document}
\section{}
\section{}
\number\thesection
\end{document}
''')
        assert t.parse().textContent.strip() == '2'
예제 #5
0
    def testRomanNumeralSection(self):
        t = TeX()
        t.input(r'''
\documentclass{article}
\begin{document}
\section{}
\section{}
\romannumeral\thesection
\end{document}
''')
        assert t.parse().textContent.strip() == 'ii'
예제 #6
0
    def testReadDimen2(self):
        # This is illegal
#       s = TeX()
#       s.input(r"'.77pt")
#       i = s.readDimen()
#       s = TeX()
#       s.input(r'"Ccc')
#       i = s.readDimen()
        s = TeX()
        s.input(r'-,sp')
        i = s.readDimen()
        assert i.sp == 0, i.sp
예제 #7
0
 def testReadDimen2(self):
     # This is illegal
     #       s = TeX()
     #       s.input(r"'.77pt")
     #       i = s.readDimen()
     #       s = TeX()
     #       s.input(r'"Ccc')
     #       i = s.readDimen()
     s = TeX()
     s.input(r'-,sp')
     i = s.readDimen()
     assert i.sp == 0, i.sp
예제 #8
0
def squash_latex(inp, out, blobs_dir, options, helper=None):
    " transforms LaTeX file"
    if helper is None:
        helper = squash_helper_base()
    if not os.path.isabs(inp): inp = osjoin(blobs_dir, inp)
    thetex = TeX()
    thetex.input(open(inp), Tokenizer=TokenizerPassThru.TokenizerPassThru)
    if isinstance(out, str):
        if not os.path.isabs(out): out = osjoin(blobs_dir, out)
        out = open(out, 'w')
    itertokens = thetex.itertokens()
    squash_recurse(out, thetex, itertokens, options, helper)
    return helper
예제 #9
0
    def testReadGlue(self):
        s = TeX()
        s.input(r'0pt plus 1fil')
        i = s.readGlue()
        assert i.pt == 0, i.pt
        assert i.stretch.fil == 1, i.stretch.fil 
        assert i.shrink is None, i.shrink

        s = TeX()
        s.input(r'0pt plus 1fill')
        i = s.readGlue()
        assert i.pt == 0, i.pt
        assert i.stretch.fil == 1, i.stretch.fil 
        assert i.shrink is None, i.shrink

        s = TeX()
        s.input(r'0pt plus 1fil minus 1 fil')
        i = s.readGlue()
        assert i.pt == 0, i.pt
        assert i.stretch.fil == 1, i.stretch.fil 
        assert i.shrink.fil == 1, i.shrink.fil 

        s = TeX()
        s.input(r'0pt plus -1fil')
        i = s.readGlue()
        assert i.pt == 0, i.pt
        assert i.stretch.fil == -1, i.stretch.fil 
        assert i.shrink is None, i.shrink
예제 #10
0
    def testReadGlue(self):
        s = TeX()
        s.input(r'0pt plus 1fil')
        i = s.readGlue()
        assert i.pt == 0, i.pt
        assert i.stretch.fil == 1, i.stretch.fil
        assert i.shrink is None, i.shrink

        s = TeX()
        s.input(r'0pt plus 1fill')
        i = s.readGlue()
        assert i.pt == 0, i.pt
        assert i.stretch.fil == 1, i.stretch.fil
        assert i.shrink is None, i.shrink

        s = TeX()
        s.input(r'0pt plus 1fil minus 1 fil')
        i = s.readGlue()
        assert i.pt == 0, i.pt
        assert i.stretch.fil == 1, i.stretch.fil
        assert i.shrink.fil == 1, i.shrink.fil

        s = TeX()
        s.input(r'0pt plus -1fil')
        i = s.readGlue()
        assert i.pt == 0, i.pt
        assert i.stretch.fil == -1, i.stretch.fil
        assert i.shrink is None, i.shrink
예제 #11
0
def reparse_metadata(inp, metadata, blobs_dir, options):
    " reparse metadata of LaTeX file"
    #
    from .transform import squash_helper_reparse_metadata
    helper = squash_helper_reparse_metadata(blobs_dir, metadata, options)
    from ColDoc.latex import environments_we_wont_latex
    if metadata.environ not in environments_we_wont_latex:
        helper.input_macros_with_parameters += options['split_graphic']
    #
    if not os.path.isabs(inp): inp = osjoin(blobs_dir, inp)
    thetex = TeX()
    mydocument = thetex.ownerDocument
    mycontext = mydocument.context
    #
    # give it some context
    mycontext.loadPackage(thetex, 'article.cls', {})
    #if args.split_sections:
    #    mycontext.newcommand('section',1,r'\section{#1}')
    #    mycontext.newcommand('subsection',1,r'\subsection{#1}')
    for name in options['metadata_command']:
        d = '\\' + name + '{#1}'
        #mycontext.newcommand(name, n, d)
        n = 1
        newclass = type(name, (plasTeX.NewCommand, ), {
            'nargs': n,
            'opt': None,
            'definition': d
        })
        assert newclass.nargs == n
        mycontext.addGlobal(name, newclass)
    #
    thetex.input(open(inp), Tokenizer=TokenizerPassThru.TokenizerPassThru)
    out = io.StringIO()
    itertokens = thetex.itertokens()
    squash_recurse(out, thetex, itertokens, options, helper)
    #
    a = osjoin(os.path.dirname(inp), '.back_map.pickle')
    pickle.dump(
        helper.back_map,
        open(a, 'wb'),
    )
    #
    return helper.back_map, helper.metadata
예제 #12
0
 def testReadDecimal(self):
     s = TeX()
     s.input(r'-1.0')
     i = s.readDecimal()
     assert i == -1, 'expected -1, but got %s' % i
     s = TeX()
     s.input(r'-11234.0')
     i = s.readDecimal()
     assert i == -11234, 'expected -11234, but got %s' % i
     s = TeX()
     s.input(r'0.0')
     i = s.readDecimal()
     assert i == 0, 'expected 0, but got %s' % i
예제 #13
0
 def testReadDecimal(self):
     s = TeX()
     s.input(r'-1.0')
     i = s.readDecimal()
     assert i == -1, 'expected -1, but got %s' % i
     s = TeX()
     s.input(r'-11234.0')
     i = s.readDecimal()
     assert i == -11234, 'expected -11234, but got %s' % i
     s = TeX()
     s.input(r'0.0')
     i = s.readDecimal()
     assert i == 0, 'expected 0, but got %s' % i
예제 #14
0
 def testGlueParameters(self):
     t = TeX()
     t.input(r'\newskip\foo\foo=\baselineskip')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     baselineskip = t.ownerDocument.context['baselineskip'].value
     assert foo == baselineskip, '"%s" != "%s"' % (foo, baselineskip)
     
     t = TeX()
     t.input(r'\newskip\foo\foo=7.6\baselineskip')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     baselineskip = t.ownerDocument.context['baselineskip'].value
     assert foo == (7.6*baselineskip), '"%s" != "%s"' % (foo, 7.6*baselineskip)
     
     t = TeX()
     t.input(r'\newskip\foo\foo=-4\baselineskip')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     baselineskip = t.ownerDocument.context['baselineskip'].value
     assert foo == (-4*baselineskip), '"%s" != "%s"' % (foo, (-4*baselineskip))
예제 #15
0
    def testDimenParameters(self):
        t = TeX()
        t.input(r'\newdimen\foo\foo=\hsize')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        hsize = t.ownerDocument.context['hsize'].value
        assert foo == hsize, '"%s" != "%s"' % (foo, hsize)

        t = TeX()
        t.input(r'\newdimen\foo\foo=7.6\hsize')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        hsize = t.ownerDocument.context['hsize'].value
        assert foo == (7.6 * hsize), '"%s" != "%s"' % (foo, 7.6 * hsize)

        t = TeX()
        t.input(r'\newdimen\foo\foo=-4\hsize')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        hsize = t.ownerDocument.context['hsize'].value
        assert foo == (-4 * hsize), '"%s" != "%s"' % (foo, (-4 * hsize))
예제 #16
0
파일: Numbers.py 프로젝트: we-taper/plastex
 def testGlueParameters(self):
     t = TeX()
     t.input(r'\newskip\foo\foo=\baselineskip')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     baselineskip = t.ownerDocument.context['baselineskip'].value
     assert foo == baselineskip, '"%s" != "%s"' % (foo, baselineskip)
     
     t = TeX()
     t.input(r'\newskip\foo\foo=7.6\baselineskip')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     baselineskip = t.ownerDocument.context['baselineskip'].value
     assert foo == (7.6*baselineskip), '"%s" != "%s"' % (foo, 7.6*baselineskip)
     
     t = TeX()
     t.input(r'\newskip\foo\foo=-4\baselineskip')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     baselineskip = t.ownerDocument.context['baselineskip'].value
     assert foo == (-4*baselineskip), '"%s" != "%s"' % (foo, (-4*baselineskip))
예제 #17
0
    def testParameters(self):
        t = TeX()
        t.input(r'\newcount\foo\foo=\tolerance')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        tolerance = t.ownerDocument.context['tolerance'].value
        assert foo == tolerance, '"%s" != "%s"' % (foo, tolerance)

        t = TeX()
        t.input(r'\newcount\foo\foo=7\tolerance')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        tolerance = t.ownerDocument.context['tolerance'].value
        assert foo == (7 * tolerance), '"%s" != "%s"' % (foo, 7 * tolerance)

        t = TeX()
        t.input(r'\newcount\foo\foo=-3\tolerance')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        tolerance = t.ownerDocument.context['tolerance'].value
        assert foo == (-3 * tolerance), '"%s" != "%s"' % (foo, -3 * tolerance)
예제 #18
0
    def testParameters(self):
        t = TeX()
        t.input(r'\newcount\foo\foo=\tolerance')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        tolerance = t.ownerDocument.context['tolerance'].value
        assert foo == tolerance, '"%s" != "%s"' % (foo, tolerance)

        t = TeX()
        t.input(r'\newcount\foo\foo=7\tolerance')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        tolerance = t.ownerDocument.context['tolerance'].value
        assert foo == (7*tolerance), '"%s" != "%s"' % (foo, 7*tolerance)

        t = TeX()
        t.input(r'\newcount\foo\foo=-3\tolerance')
        t.parse()
        foo = t.ownerDocument.context['foo'].value
        tolerance = t.ownerDocument.context['tolerance'].value
        assert foo == (-3*tolerance), '"%s" != "%s"' % (foo, -3*tolerance)
예제 #19
0
 def testDimenParameters(self):
     t = TeX()
     t.input(r'\newdimen\foo\foo=\hsize')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     hsize = t.ownerDocument.context['hsize'].value
     assert foo == hsize, '"%s" != "%s"' % (foo, hsize)
     
     t = TeX()
     t.input(r'\newdimen\foo\foo=7.6\hsize')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     hsize = t.ownerDocument.context['hsize'].value
     assert foo == (7.6*hsize), '"%s" != "%s"' % (foo, 7.6*hsize)
     
     t = TeX()
     t.input(r'\newdimen\foo\foo=-4\hsize')
     t.parse()
     foo = t.ownerDocument.context['foo'].value
     hsize = t.ownerDocument.context['hsize'].value
     assert foo == (-4*hsize), '"%s" != "%s"' % (foo, (-4*hsize))
예제 #20
0
 def testUnitConversion(self):
     fuzz = 1e-3
     s = TeX()
     s.input(r'1 pc')
     i = s.readDimen()
     assert i.pt - 12 < fuzz, i.pt
     s = TeX()
     s.input(r'1 in')
     i = s.readDimen()
     assert i.pt - 72.27 < fuzz, i.pt
     s = TeX()
     s.input(r'72 bp')
     i = s.readDimen()
     assert i.inch - 1 < fuzz, i.inch
     s = TeX()
     s.input(r'2.54 cm')
     i = s.readDimen()
     assert i.inch - 1 < fuzz, i.inch
     s = TeX()
     s.input(r'10 mm')
     i = s.readDimen()
     assert i.cm - 1 < fuzz, i.cm
     s = TeX()
     s.input(r'1157 dd')
     i = s.readDimen()
     assert i.pt - 1238 < fuzz, i.pt
     s = TeX()
     s.input(r'1 cc')
     i = s.readDimen()
     assert i.dd - 12 < fuzz, i.dd
     s = TeX()
     s.input(r'65536 sp')
     i = s.readDimen()
     assert i.pt - 1 < fuzz, i.pt
예제 #21
0
 def testReadDimen(self):
     fuzz = 1e-3
     s = TeX()
     s.input(r'3 in')
     i = s.readDimen()
     assert i.inch - 3 < fuzz, i.inch
     s = TeX()
     s.input(r'29 pc')
     i = s.readDimen()
     assert i.pc - 29 < fuzz, i.pc 
     s = TeX()
     s.input(r'-.013837in')
     i = s.readDimen()
     assert i.inch - -0.013837 < fuzz, i.inch
     s = TeX()
     s.input(r'+ 42,1 dd')
     i = s.readDimen()
     assert i.dd - 42.1 < fuzz, i.dd
     s = TeX()
     s.input(r'0.mm')
     i = s.readDimen()
     assert i.mm - 0 < fuzz, i.mm
     s = TeX()
     s.input(r'123456789sp')
     i = s.readDimen()
     assert i.sp - 123456789 < fuzz, i.sp
예제 #22
0
 def testUnitConversion(self):
     fuzz = 1e-3
     s = TeX()
     s.input(r'1 pc')
     i = s.readDimen()
     assert i.pt - 12 < fuzz, i.pt
     s = TeX()
     s.input(r'1 in')
     i = s.readDimen()
     assert i.pt - 72.27 < fuzz, i.pt
     s = TeX()
     s.input(r'72 bp')
     i = s.readDimen()
     assert i.inch - 1 < fuzz, i.inch
     s = TeX()
     s.input(r'2.54 cm')
     i = s.readDimen()
     assert i.inch - 1 < fuzz, i.inch
     s = TeX()
     s.input(r'10 mm')
     i = s.readDimen()
     assert i.cm - 1 < fuzz, i.cm
     s = TeX()
     s.input(r'1157 dd')
     i = s.readDimen()
     assert i.pt - 1238 < fuzz, i.pt
     s = TeX()
     s.input(r'1 cc')
     i = s.readDimen()
     assert i.dd - 12 < fuzz, i.dd
     s = TeX()
     s.input(r'65536 sp')
     i = s.readDimen()
     assert i.pt - 1 < fuzz, i.pt
예제 #23
0
 def testActive(self):
     t = TeX()
     t.input(r'\catcode`|=\active \def|#1{\bf#1} |{bold text}')
     output = t.parse()
     assert output[-1].nodeName == 'bf', output[-1].nodeName
예제 #24
0
 def testReadDimen(self):
     fuzz = 1e-3
     s = TeX()
     s.input(r'3 in')
     i = s.readDimen()
     assert i.inch - 3 < fuzz, i.inch
     s = TeX()
     s.input(r'29 pc')
     i = s.readDimen()
     assert i.pc - 29 < fuzz, i.pc
     s = TeX()
     s.input(r'-.013837in')
     i = s.readDimen()
     assert i.inch - -0.013837 < fuzz, i.inch
     s = TeX()
     s.input(r'+ 42,1 dd')
     i = s.readDimen()
     assert i.dd - 42.1 < fuzz, i.dd
     s = TeX()
     s.input(r'0.mm')
     i = s.readDimen()
     assert i.mm - 0 < fuzz, i.mm
     s = TeX()
     s.input(r'123456789sp')
     i = s.readDimen()
     assert i.sp - 123456789 < fuzz, i.sp
예제 #25
0
 def testActive(self):
     t = TeX()
     t.input(r'\catcode`|=\active \def|#1{\bf#1} |{bold text}')
     output = t.parse()
     assert output[-1].nodeName == 'bf', output[-1].nodeName
예제 #26
0
 def testActive2(self):
     t = TeX()
     t.input(r'\catcode`|=\active\catcode`/=\active \def|#1{\textbf{#1}/} \def/{\textit{the end}} |{bold text}')
     output = t.parse()
     assert output[-2].nodeName == 'textbf', output[-2].nodeName
     assert output[-1].nodeName == 'textit', output[-1].nodeName
예제 #27
0
 def testRomanNumeral(self):
     t = TeX()
     t.input(r'\romannumeral5')
     p = t.parse()
     assert ''.join(p) == 'v'
예제 #28
0
 def testActiveSource(self):
     t = TeX()
     t.input(r'~')
     t = t.parse()
     assert t.source.strip() == '~', t.source.strip()
예제 #29
0
 def testActiveSource(self):
     t = TeX()
     t.input(r'~')
     t = t.parse()
     assert t.source.strip() == '~', t.source.strip()