comparison piecrust/rendering.py @ 924:1bb704434ee2

formatting: Remove segment parts, you can use template tags instead. Segment parts were used to switch formatters insides a given content segment, but that's also achievable with template tags like `pcformat` in Jinja to some degree. It's not totally the same but removing it simplifies the code and improves performance.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 01 Oct 2017 20:36:04 -0700
parents f2b75e4be981
children 45ad976712ec
comparison
equal deleted inserted replaced
923:5713b6a2850d 924:1bb704434ee2
299 299
300 engine = get_template_engine(app, engine_name) 300 engine = get_template_engine(app, engine_name)
301 301
302 formatted_segments = {} 302 formatted_segments = {}
303 for seg_name, seg in page.segments.items(): 303 for seg_name, seg in page.segments.items():
304 seg_text = '' 304 try:
305 for seg_part in seg.parts: 305 with app.env.stats.timerScope(
306 part_format = seg_part.fmt or format_name 306 engine.__class__.__name__ + '_segment'):
307 try: 307 seg_text = engine.renderSegment(
308 with app.env.stats.timerScope( 308 page.content_spec, seg, page_data)
309 engine.__class__.__name__ + '_segment'): 309 except TemplatingError as err:
310 part_text = engine.renderSegmentPart( 310 err.lineno += seg.line
311 page.content_spec, seg_part, page_data) 311 raise err
312 except TemplatingError as err: 312
313 err.lineno += seg_part.line 313 seg_format = seg.fmt or format_name
314 raise err 314 seg_text = format_text(app, seg_format, seg_text)
315
316 part_text = format_text(app, part_format, part_text)
317 seg_text += part_text
318 formatted_segments[seg_name] = seg_text 315 formatted_segments[seg_name] = seg_text
319 316
320 if seg_name == 'content': 317 if seg_name == 'content':
321 m = content_abstract_re.search(seg_text) 318 m = content_abstract_re.search(seg_text)
322 if m: 319 if m: