Mercurial > jouvence
view fontaine/renderer.py @ 1:74b83e3d921e
Add more states, add more tests.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 02 Jan 2017 21:54:59 -0800 |
parents | |
children | 6019eee799bf |
line wrap: on
line source
import re RE_ITALICS = re.compile( r"(?P<before>^|\s)(?P<esc>\\)?\*(?P<text>.*[^\s\*])\*(?=[^a-zA-Z0-9\*]|$)") RE_BOLD = re.compile( r"(?P<before>^|\s)(?P<esc>\\)?\*\*(?P<text>.*[^\s])\*\*(?=[^a-zA-Z0-9]|$)") RE_UNDERLINE = re.compile( r"(?P<before>^|\s)(?P<esc>\\)?_(?P<text>.*[^\s])_(?=[^a-zA-Z0-9]|$)") class BaseRenderer: def render_text(self, text): # Replace bold stuff to catch double asterisks. text = RE_BOLD.sub(self._do_write_bold, text) text = RE_ITALICS.sub(self._do_write_italics, text) text = RE_UNDERLINE.sub(self._do_write_underline, text) return text def _do_write_italics(self, m): if m.group('esc'): return m.group('before') + '*' + m.group('text') + '*' return ( m.group('before') + self.write_italics(m.group('text'))) def _do_write_bold(self, m): if m.group('esc'): return m.group('before') + '**' + m.group('text') + '**' return ( m.group('before') + self.write_bold(m.group('text'))) def _do_write_underline(self, m): if m.group('esc'): return m.group('before') + '_' + m.group('text') + '_' return ( m.group('before') + self.write_underline(m.group('text'))) def write_italics(self, text): raise NotImplementedError() def write_bold(self, text): raise NotImplementedError() def write_underline(self, text): raise NotImplementedError()