annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import re
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 RE_ITALICS = re.compile(
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 r"(?P<before>^|\s)(?P<esc>\\)?\*(?P<text>.*[^\s\*])\*(?=[^a-zA-Z0-9\*]|$)")
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 RE_BOLD = re.compile(
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 r"(?P<before>^|\s)(?P<esc>\\)?\*\*(?P<text>.*[^\s])\*\*(?=[^a-zA-Z0-9]|$)")
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 RE_UNDERLINE = re.compile(
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 r"(?P<before>^|\s)(?P<esc>\\)?_(?P<text>.*[^\s])_(?=[^a-zA-Z0-9]|$)")
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 class BaseRenderer:
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 def render_text(self, text):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 # Replace bold stuff to catch double asterisks.
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 text = RE_BOLD.sub(self._do_write_bold, text)
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 text = RE_ITALICS.sub(self._do_write_italics, text)
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 text = RE_UNDERLINE.sub(self._do_write_underline, text)
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 return text
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 def _do_write_italics(self, m):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 if m.group('esc'):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 return m.group('before') + '*' + m.group('text') + '*'
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 return (
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 m.group('before') +
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26 self.write_italics(m.group('text')))
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 def _do_write_bold(self, m):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 if m.group('esc'):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 return m.group('before') + '**' + m.group('text') + '**'
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 return (
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 m.group('before') +
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 self.write_bold(m.group('text')))
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 def _do_write_underline(self, m):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36 if m.group('esc'):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 return m.group('before') + '_' + m.group('text') + '_'
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 return (
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 m.group('before') +
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 self.write_underline(m.group('text')))
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 def write_italics(self, text):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 raise NotImplementedError()
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 def write_bold(self, text):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 raise NotImplementedError()
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 def write_underline(self, text):
74b83e3d921e Add more states, add more tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 raise NotImplementedError()