Mercurial > jouvence
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\*]|$)") |