| Viewing file:  bbcode.py (3.24 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
"""pygments.formatters.bbcode
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 BBcode formatter.
 
 :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
 :license: BSD, see LICENSE for details.
 """
 
 
 from pip._vendor.pygments.formatter import Formatter
 from pip._vendor.pygments.util import get_bool_opt
 
 __all__ = ['BBCodeFormatter']
 
 
 class BBCodeFormatter(Formatter):
 """
 Format tokens with BBcodes. These formatting codes are used by many
 bulletin boards, so you can highlight your sourcecode with pygments before
 posting it there.
 
 This formatter has no support for background colors and borders, as there
 are no common BBcode tags for that.
 
 Some board systems (e.g. phpBB) don't support colors in their [code] tag,
 so you can't use the highlighting together with that tag.
 Text in a [code] tag usually is shown with a monospace font (which this
 formatter can do with the ``monofont`` option) and no spaces (which you
 need for indentation) are removed.
 
 Additional options accepted:
 
 `style`
 The style to use, can be a string or a Style subclass (default:
 ``'default'``).
 
 `codetag`
 If set to true, put the output into ``[code]`` tags (default:
 ``false``)
 
 `monofont`
 If set to true, add a tag to show the code with a monospace font
 (default: ``false``).
 """
 name = 'BBCode'
 aliases = ['bbcode', 'bb']
 filenames = []
 
 def __init__(self, **options):
 Formatter.__init__(self, **options)
 self._code = get_bool_opt(options, 'codetag', False)
 self._mono = get_bool_opt(options, 'monofont', False)
 
 self.styles = {}
 self._make_styles()
 
 def _make_styles(self):
 for ttype, ndef in self.style:
 start = end = ''
 if ndef['color']:
 start += '[color=#{}]'.format(ndef['color'])
 end = '[/color]' + end
 if ndef['bold']:
 start += '[b]'
 end = '[/b]' + end
 if ndef['italic']:
 start += '[i]'
 end = '[/i]' + end
 if ndef['underline']:
 start += '[u]'
 end = '[/u]' + end
 # there are no common BBcodes for background-color and border
 
 self.styles[ttype] = start, end
 
 def format_unencoded(self, tokensource, outfile):
 if self._code:
 outfile.write('[code]')
 if self._mono:
 outfile.write('[font=monospace]')
 
 lastval = ''
 lasttype = None
 
 for ttype, value in tokensource:
 while ttype not in self.styles:
 ttype = ttype.parent
 if ttype == lasttype:
 lastval += value
 else:
 if lastval:
 start, end = self.styles[lasttype]
 outfile.write(''.join((start, lastval, end)))
 lastval = value
 lasttype = ttype
 
 if lastval:
 start, end = self.styles[lasttype]
 outfile.write(''.join((start, lastval, end)))
 
 if self._mono:
 outfile.write('[/font]')
 if self._code:
 outfile.write('[/code]')
 if self._code or self._mono:
 outfile.write('\n')
 
 |