3 pygments.formatters.latex |
3 pygments.formatters.latex |
4 ~~~~~~~~~~~~~~~~~~~~~~~~~ |
4 ~~~~~~~~~~~~~~~~~~~~~~~~~ |
5 |
5 |
6 Formatter for LaTeX fancyvrb output. |
6 Formatter for LaTeX fancyvrb output. |
7 |
7 |
8 :copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS. |
8 :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS. |
9 :license: BSD, see LICENSE for details. |
9 :license: BSD, see LICENSE for details. |
10 """ |
10 """ |
11 |
11 |
12 from io import StringIO |
12 from io import StringIO |
13 |
13 |
263 if len(self.escapeinside) == 2: |
263 if len(self.escapeinside) == 2: |
264 self.left = self.escapeinside[0] |
264 self.left = self.escapeinside[0] |
265 self.right = self.escapeinside[1] |
265 self.right = self.escapeinside[1] |
266 else: |
266 else: |
267 self.escapeinside = '' |
267 self.escapeinside = '' |
268 self.envname = options.get('envname', u'Verbatim') |
268 self.envname = options.get('envname', 'Verbatim') |
269 |
269 |
270 self._create_stylesheet() |
270 self._create_stylesheet() |
271 |
271 |
272 def _create_stylesheet(self): |
272 def _create_stylesheet(self): |
273 t2n = self.ttype2name = {Token: ''} |
273 t2n = self.ttype2name = {Token: ''} |
334 |
334 |
335 if self.full: |
335 if self.full: |
336 realoutfile = outfile |
336 realoutfile = outfile |
337 outfile = StringIO() |
337 outfile = StringIO() |
338 |
338 |
339 outfile.write(u'\\begin{' + self.envname + u'}[commandchars=\\\\\\{\\}') |
339 outfile.write('\\begin{' + self.envname + '}[commandchars=\\\\\\{\\}') |
340 if self.linenos: |
340 if self.linenos: |
341 start, step = self.linenostart, self.linenostep |
341 start, step = self.linenostart, self.linenostep |
342 outfile.write(u',numbers=left' + |
342 outfile.write(',numbers=left' + |
343 (start and u',firstnumber=%d' % start or u'') + |
343 (start and ',firstnumber=%d' % start or '') + |
344 (step and u',stepnumber=%d' % step or u'')) |
344 (step and ',stepnumber=%d' % step or '')) |
345 if self.mathescape or self.texcomments or self.escapeinside: |
345 if self.mathescape or self.texcomments or self.escapeinside: |
346 outfile.write(u',codes={\\catcode`\\$=3\\catcode`\\^=7\\catcode`\\_=8}') |
346 outfile.write(',codes={\\catcode`\\$=3\\catcode`\\^=7\\catcode`\\_=8}') |
347 if self.verboptions: |
347 if self.verboptions: |
348 outfile.write(u',' + self.verboptions) |
348 outfile.write(',' + self.verboptions) |
349 outfile.write(u']\n') |
349 outfile.write(']\n') |
350 |
350 |
351 for ttype, value in tokensource: |
351 for ttype, value in tokensource: |
352 if ttype in Token.Comment: |
352 if ttype in Token.Comment: |
353 if self.texcomments: |
353 if self.texcomments: |
354 # Try to guess comment starting lexeme and escape it ... |
354 # Try to guess comment starting lexeme and escape it ... |
407 if spl[-1]: |
407 if spl[-1]: |
408 outfile.write("\\%s{%s}{%s}" % (cp, styleval, spl[-1])) |
408 outfile.write("\\%s{%s}{%s}" % (cp, styleval, spl[-1])) |
409 else: |
409 else: |
410 outfile.write(value) |
410 outfile.write(value) |
411 |
411 |
412 outfile.write(u'\\end{' + self.envname + u'}\n') |
412 outfile.write('\\end{' + self.envname + '}\n') |
413 |
413 |
414 if self.full: |
414 if self.full: |
415 encoding = self.encoding or 'utf8' |
415 encoding = self.encoding or 'utf8' |
416 # map known existings encodings from LaTeX distribution |
416 # map known existings encodings from LaTeX distribution |
417 encoding = { |
417 encoding = { |
449 buf = '' |
449 buf = '' |
450 idx = 0 |
450 idx = 0 |
451 for i, t, v in self.lang.get_tokens_unprocessed(text): |
451 for i, t, v in self.lang.get_tokens_unprocessed(text): |
452 if t in Token.Comment or t in Token.String: |
452 if t in Token.Comment or t in Token.String: |
453 if buf: |
453 if buf: |
454 for x in self.get_tokens_aux(idx, buf): |
454 yield from self.get_tokens_aux(idx, buf) |
455 yield x |
|
456 buf = '' |
455 buf = '' |
457 yield i, t, v |
456 yield i, t, v |
458 else: |
457 else: |
459 if not buf: |
458 if not buf: |
460 idx = i |
459 idx = i |
461 buf += v |
460 buf += v |
462 if buf: |
461 if buf: |
463 for x in self.get_tokens_aux(idx, buf): |
462 yield from self.get_tokens_aux(idx, buf) |
464 yield x |
|
465 |
463 |
466 def get_tokens_aux(self, index, text): |
464 def get_tokens_aux(self, index, text): |
467 while text: |
465 while text: |
468 a, sep1, text = text.partition(self.left) |
466 a, sep1, text = text.partition(self.left) |
469 if a: |
467 if a: |