Mercurial > piecrust2
comparison piecrust/page.py @ 454:96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 06 Jul 2015 21:32:40 -0700 |
parents | 32c7c2d219d2 |
children | 612ed0526afd |
comparison
equal
deleted
inserted
replaced
453:8351a77e13f5 | 454:96d363e2da4b |
---|---|
197 | 197 |
198 | 198 |
199 class ContentSegment(object): | 199 class ContentSegment(object): |
200 debug_render_func = 'debug_render' | 200 debug_render_func = 'debug_render' |
201 | 201 |
202 def __init__(self, content=None, fmt=None): | 202 def __init__(self): |
203 self.parts = [] | 203 self.parts = [] |
204 if content is not None: | |
205 self.parts.append(ContentSegmentPart(content, fmt)) | |
206 | 204 |
207 def debug_render(self): | 205 def debug_render(self): |
208 return '\n'.join([p.content for p in self.parts]) | 206 return '\n'.join([p.content for p in self.parts]) |
209 | 207 |
210 | 208 |
211 class ContentSegmentPart(object): | 209 class ContentSegmentPart(object): |
212 def __init__(self, content, fmt=None, line=-1): | 210 def __init__(self, content, fmt=None, offset=-1, line=-1): |
213 self.content = content | 211 self.content = content |
214 self.fmt = fmt | 212 self.fmt = fmt |
213 self.offset = offset | |
215 self.line = line | 214 self.line = line |
216 | 215 |
217 def __str__(self): | 216 def __str__(self): |
218 return '%s [%s]' % (self.content, self.fmt or '<default>') | 217 return '%s [%s]' % (self.content, self.fmt or '<default>') |
219 | 218 |
221 def json_load_segments(data): | 220 def json_load_segments(data): |
222 segments = {} | 221 segments = {} |
223 for key, seg_data in data.items(): | 222 for key, seg_data in data.items(): |
224 seg = ContentSegment() | 223 seg = ContentSegment() |
225 for p_data in seg_data: | 224 for p_data in seg_data: |
226 part = ContentSegmentPart(p_data['c'], p_data['f'], p_data['l']) | 225 part = ContentSegmentPart(p_data['c'], p_data['f'], p_data['o'], |
226 p_data['l']) | |
227 seg.parts.append(part) | 227 seg.parts.append(part) |
228 segments[key] = seg | 228 segments[key] = seg |
229 return segments | 229 return segments |
230 | 230 |
231 | 231 |
232 def json_save_segments(segments): | 232 def json_save_segments(segments): |
233 data = {} | 233 data = {} |
234 for key, seg in segments.items(): | 234 for key, seg in segments.items(): |
235 seg_data = [] | 235 seg_data = [] |
236 for part in seg.parts: | 236 for part in seg.parts: |
237 p_data = {'c': part.content, 'f': part.fmt, 'l': part.line} | 237 p_data = {'c': part.content, 'f': part.fmt, 'o': part.offset, |
238 'l': part.line} | |
238 seg_data.append(p_data) | 239 seg_data.append(p_data) |
239 data[key] = seg_data | 240 data[key] = seg_data |
240 return data | 241 return data |
241 | 242 |
242 | 243 |
355 parts = [] | 356 parts = [] |
356 | 357 |
357 # First part, before the first format change. | 358 # First part, before the first format change. |
358 part_text = raw[start:matches[0].start()] | 359 part_text = raw[start:matches[0].start()] |
359 parts.append( | 360 parts.append( |
360 ContentSegmentPart(part_text, first_part_fmt, line_offset)) | 361 ContentSegmentPart(part_text, first_part_fmt, start, |
362 line_offset)) | |
361 line_offset += _count_lines(part_text) | 363 line_offset += _count_lines(part_text) |
362 | 364 |
363 for i in range(1, num_matches): | 365 for i in range(1, num_matches): |
364 m1 = matches[i - 1] | 366 m1 = matches[i - 1] |
365 m2 = matches[i] | 367 m2 = matches[i] |
366 part_text = raw[m1.end() + 1:m2.start()] | 368 part_text = raw[m1.end() + 1:m2.start()] |
367 parts.append( | 369 parts.append( |
368 ContentSegmentPart( | 370 ContentSegmentPart( |
369 part_text, m1.group('fmt'), line_offset)) | 371 part_text, m1.group('fmt'), m1.end() + 1, |
372 line_offset)) | |
370 line_offset += _count_lines(part_text) | 373 line_offset += _count_lines(part_text) |
371 | 374 |
372 lastm = matches[-1] | 375 lastm = matches[-1] |
373 part_text = raw[lastm.end() + 1:end] | 376 part_text = raw[lastm.end() + 1:end] |
374 parts.append(ContentSegmentPart( | 377 parts.append(ContentSegmentPart( |
375 part_text, lastm.group('fmt'), line_offset)) | 378 part_text, lastm.group('fmt'), lastm.end() + 1, |
379 line_offset)) | |
376 | 380 |
377 return parts, line_offset | 381 return parts, line_offset |
378 else: | 382 else: |
379 part_text = raw[start:end] | 383 part_text = raw[start:end] |
380 parts = [ContentSegmentPart(part_text, first_part_fmt, line_offset)] | 384 parts = [ContentSegmentPart(part_text, first_part_fmt, start, |
385 line_offset)] | |
381 return parts, line_offset | 386 return parts, line_offset |
382 | 387 |