comparison jouvence/renderer.py @ 22:142a53d6e558

Add support for notes.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 04 Jan 2017 23:03:33 -0800
parents ee741bbe96a8
children 2ef526c301cc
comparison
equal deleted inserted replaced
21:94d094a0bdb7 22:142a53d6e558
92 RE_BOLD = re.compile( 92 RE_BOLD = re.compile(
93 r"(?P<before>^|\s)(?P<esc>\\)?\*\*(?P<text>.*[^\s])\*\*(?=[^a-zA-Z0-9]|$)") 93 r"(?P<before>^|\s)(?P<esc>\\)?\*\*(?P<text>.*[^\s])\*\*(?=[^a-zA-Z0-9]|$)")
94 RE_UNDERLINE = re.compile( 94 RE_UNDERLINE = re.compile(
95 r"(?P<before>^|\s)(?P<esc>\\)?_(?P<text>.*[^\s])_(?=[^a-zA-Z0-9]|$)") 95 r"(?P<before>^|\s)(?P<esc>\\)?_(?P<text>.*[^\s])_(?=[^a-zA-Z0-9]|$)")
96 96
97 RE_NOTE = re.compile(r"\[\[(?P<text>.+?)\]\]", re.DOTALL)
98
97 99
98 class BaseTextRenderer: 100 class BaseTextRenderer:
99 def render_text(self, text): 101 def render_text(self, text):
100 # Replace bold stuff to catch double asterisks. 102 # Replace bold stuff to catch double asterisks.
101 text = RE_BOLD.sub(self._do_make_bold, text) 103 text = RE_BOLD.sub(self._do_make_bold, text)
102 text = RE_ITALICS.sub(self._do_make_italics, text) 104 text = RE_ITALICS.sub(self._do_make_italics, text)
103 text = RE_UNDERLINE.sub(self._do_make_underline, text) 105 text = RE_UNDERLINE.sub(self._do_make_underline, text)
106 text = RE_NOTE.sub(self._do_make_note, text)
104 107
105 return text 108 return text
106 109
107 def _do_make_italics(self, m): 110 def _do_make_italics(self, m):
108 if m.group('esc'): 111 if m.group('esc'):
123 return m.group('before') + '_' + m.group('text') + '_' 126 return m.group('before') + '_' + m.group('text') + '_'
124 return ( 127 return (
125 m.group('before') + 128 m.group('before') +
126 self.make_underline(m.group('text'))) 129 self.make_underline(m.group('text')))
127 130
131 def _do_make_note(self, m):
132 return self.make_note(m.group('text'))
133
128 def make_italics(self, text): 134 def make_italics(self, text):
129 raise NotImplementedError() 135 raise NotImplementedError()
130 136
131 def make_bold(self, text): 137 def make_bold(self, text):
132 raise NotImplementedError() 138 raise NotImplementedError()
133 139
134 def make_underline(self, text): 140 def make_underline(self, text):
141 raise NotImplementedError()
142
143 def make_note(self, text):
135 raise NotImplementedError() 144 raise NotImplementedError()
136 145
137 146
138 class NullTextRenderer(BaseTextRenderer): 147 class NullTextRenderer(BaseTextRenderer):
139 def make_bold(self, text): 148 def make_bold(self, text):
142 def make_italics(self, text): 151 def make_italics(self, text):
143 return text 152 return text
144 153
145 def make_underline(self, text): 154 def make_underline(self, text):
146 return text 155 return text
156
157 def make_note(self, text):
158 return text