comparison fontaine/renderer.py @ 7:e3d52edde00b

Make renderers write to a provided output stream.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 04 Jan 2017 01:21:55 -0800
parents 6019eee799bf
children 02d2e4d8b0c1
comparison
equal deleted inserted replaced
6:486c2349598e 7:e3d52edde00b
22 } 22 }
23 23
24 def _tr(self, text): 24 def _tr(self, text):
25 return self.text_renderer.render_text(text) 25 return self.text_renderer.render_text(text)
26 26
27 def render_doc(self, doc): 27 def render_doc(self, doc, out):
28 self.write_header(doc) 28 self.write_header(doc, out)
29 self.render_title_page(doc.title_values) 29 self.render_title_page(doc.title_values, out)
30 for s in doc.scenes: 30 for s in doc.scenes:
31 self.render_scene(s) 31 self.render_scene(s, out)
32 self.write_footer(doc) 32 self.write_footer(doc, out)
33 33
34 def render_title_page(self, values): 34 def render_title_page(self, values, out):
35 # Render known metadata. 35 # Render known metadata.
36 title = values.get('title') 36 title = values.get('title')
37 credit = values.get('credit') 37 credit = values.get('credit')
38 author = values.get('author') or values.get('authors') 38 author = values.get('author') or values.get('authors')
39 source = values.get('source') 39 source = values.get('source')
40 center_text = '\n\n'.join([ 40 center_text = '\n\n'.join([
41 i for i in [title, credit, author, source] 41 i for i in [title, credit, author, source]
42 if i is not None]) 42 if i is not None])
43 self.write_title_heading(self._tr(center_text)) 43 self.write_title_heading(self._tr(center_text), out)
44 44
45 ddate = values.get('date') or values.get('draft date') 45 ddate = values.get('date') or values.get('draft date')
46 contact = values.get('contact') 46 contact = values.get('contact')
47 bottom_text = '\n\n'.join([ 47 bottom_text = '\n\n'.join([
48 i for i in [ddate, contact] 48 i for i in [ddate, contact]
49 if i is not None]) 49 if i is not None])
50 self.write_title_footer(self._tr(bottom_text)) 50 self.write_title_footer(self._tr(bottom_text), out)
51 51
52 def render_scene(self, scene): 52 def render_scene(self, scene, out):
53 if scene.header is not None: 53 if scene.header is not None:
54 self.write_scene_heading(scene.header) 54 self.write_scene_heading(scene.header, out)
55 for p in scene.paragraphs: 55 for p in scene.paragraphs:
56 rdr_func = self._para_rdrs[p.type] 56 rdr_func = self._para_rdrs[p.type]
57 if p.type != TYPE_PAGEBREAK: 57 if p.type != TYPE_PAGEBREAK:
58 rdr_func(self._tr(p.text)) 58 rdr_func(self._tr(p.text), out)
59 else: 59 else:
60 rdr_func() 60 rdr_func(out)
61 61
62 def write_header(self, doc): 62 def write_header(self, doc, out):
63 pass 63 pass
64 64
65 def write_footer(self, doc): 65 def write_footer(self, doc, out):
66 pass 66 pass
67 67
68 def write_title_heading(self, text): 68 def write_title_heading(self, text, out):
69 raise NotImplementedError() 69 raise NotImplementedError()
70 70
71 def write_title_footer(self, text): 71 def write_title_footer(self, text, out):
72 raise NotImplementedError() 72 raise NotImplementedError()
73 73
74 def write_scene_heading(self, text): 74 def write_scene_heading(self, text, out):
75 raise NotImplementedError() 75 raise NotImplementedError()
76 76
77 def write_action(self, text): 77 def write_action(self, text, out):
78 raise NotImplementedError() 78 raise NotImplementedError()
79 79
80 def write_centeredaction(self, text): 80 def write_centeredaction(self, text, out):
81 raise NotImplementedError() 81 raise NotImplementedError()
82 82
83 def write_character(self, text): 83 def write_character(self, text, out):
84 raise NotImplementedError() 84 raise NotImplementedError()
85 85
86 def write_dialog(self, text): 86 def write_dialog(self, text, out):
87 raise NotImplementedError() 87 raise NotImplementedError()
88 88
89 def write_parenthetical(self, text): 89 def write_parenthetical(self, text, out):
90 raise NotImplementedError() 90 raise NotImplementedError()
91 91
92 def write_transition(self, text): 92 def write_transition(self, text, out):
93 raise NotImplementedError() 93 raise NotImplementedError()
94 94
95 def write_lyrics(self, text): 95 def write_lyrics(self, text, out):
96 raise NotImplementedError() 96 raise NotImplementedError()
97 97
98 def write_pagebreak(self): 98 def write_pagebreak(self, out):
99 raise NotImplementedError() 99 raise NotImplementedError()
100 100
101 101
102 RE_ITALICS = re.compile( 102 RE_ITALICS = re.compile(
103 r"(?P<before>^|\s)(?P<esc>\\)?\*(?P<text>.*[^\s\*])\*(?=[^a-zA-Z0-9\*]|$)") 103 r"(?P<before>^|\s)(?P<esc>\\)?\*(?P<text>.*[^\s\*])\*(?=[^a-zA-Z0-9\*]|$)")