comparison piecrust/formatting/markdownformatter.py @ 410:d1a472464e57

markdown: Cache the formatter once.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 30 May 2015 15:41:52 -0700
parents cd049786c008
children e7b865f8f335
comparison
equal deleted inserted replaced
409:2bb5327c4c1f 410:d1a472464e57
1 from markdown import markdown 1 from markdown import Markdown
2 from piecrust.formatting.base import Formatter 2 from piecrust.formatting.base import Formatter
3 3
4 4
5 class MarkdownFormatter(Formatter): 5 class MarkdownFormatter(Formatter):
6 FORMAT_NAMES = ['markdown', 'mdown', 'md'] 6 FORMAT_NAMES = ['markdown', 'mdown', 'md']
7 OUTPUT_FORMAT = 'html' 7 OUTPUT_FORMAT = 'html'
8 8
9 def __init__(self): 9 def __init__(self):
10 super(MarkdownFormatter, self).__init__() 10 super(MarkdownFormatter, self).__init__()
11 self._extensions = None 11 self._formatter = None
12 12
13 def render(self, format_name, txt): 13 def render(self, format_name, txt):
14 assert format_name in self.FORMAT_NAMES 14 assert format_name in self.FORMAT_NAMES
15 self._ensureInitialized() 15 self._ensureInitialized()
16 return markdown(txt, extensions=self._extensions) 16 return self._formatter.convert(txt)
17 17
18 def _ensureInitialized(self): 18 def _ensureInitialized(self):
19 if self._extensions is not None: 19 if self._formatter is not None:
20 return 20 return
21 21
22 config = self.app.config.get('markdown') 22 config = self.app.config.get('markdown')
23 if config is None: 23 if config is None:
24 config = {} 24 config = {}
32 if isinstance(extensions, str): 32 if isinstance(extensions, str):
33 extensions = [e.strip() for e in extensions.split(',')] 33 extensions = [e.strip() for e in extensions.split(',')]
34 # Compatibility with PieCrust 1.x 34 # Compatibility with PieCrust 1.x
35 if config.get('use_markdown_extra'): 35 if config.get('use_markdown_extra'):
36 extensions.append('extra') 36 extensions.append('extra')
37 self._extensions = extensions
38 37
38 self._formatter = Markdown(extensions=extensions)
39