예제 #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 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
예제 #4
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