annotate piecrust/formatting/markdownformatter.py @ 1150:97b1b46cc156

config: Allow tweaking the configuration of default routes.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 29 Jul 2018 22:52:11 -0700
parents 8178671f9a04
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 from piecrust.formatting.base import Formatter
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 class MarkdownFormatter(Formatter):
1061
8178671f9a04 formatters: Remove Hoedown formatter, split it off to a pluging.
Ludovic Chabant <ludovic@chabant.com>
parents: 989
diff changeset
5 FORMAT_NAMES = ['markdown', 'mdown', 'md']
3
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 OUTPUT_FORMAT = 'html'
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
20
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
8 def __init__(self):
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
9 super(MarkdownFormatter, self).__init__()
410
d1a472464e57 markdown: Cache the formatter once.
Ludovic Chabant <ludovic@chabant.com>
parents: 202
diff changeset
10 self._formatter = None
20
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
11
3
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 def render(self, format_name, txt):
76
fdb08d986384 Add SmartyPants formatting.
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
13 assert format_name in self.FORMAT_NAMES
20
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
14 self._ensureInitialized()
411
e7b865f8f335 bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents: 410
diff changeset
15 return self._formatter.reset().convert(txt)
20
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
16
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
17 def _ensureInitialized(self):
410
d1a472464e57 markdown: Cache the formatter once.
Ludovic Chabant <ludovic@chabant.com>
parents: 202
diff changeset
18 if self._formatter is not None:
20
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
19 return
3
f485ba500df3 Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20
58
95590732e4c9 More robust Markdown configuration handling.
Ludovic Chabant <ludovic@chabant.com>
parents: 20
diff changeset
21 config = self.app.config.get('markdown')
95590732e4c9 More robust Markdown configuration handling.
Ludovic Chabant <ludovic@chabant.com>
parents: 20
diff changeset
22 if config is None:
95590732e4c9 More robust Markdown configuration handling.
Ludovic Chabant <ludovic@chabant.com>
parents: 20
diff changeset
23 config = {}
95590732e4c9 More robust Markdown configuration handling.
Ludovic Chabant <ludovic@chabant.com>
parents: 20
diff changeset
24 elif not isinstance(config, dict):
95590732e4c9 More robust Markdown configuration handling.
Ludovic Chabant <ludovic@chabant.com>
parents: 20
diff changeset
25 raise Exception("The `markdown` configuration setting must be "
95590732e4c9 More robust Markdown configuration handling.
Ludovic Chabant <ludovic@chabant.com>
parents: 20
diff changeset
26 "a dictionary.")
95590732e4c9 More robust Markdown configuration handling.
Ludovic Chabant <ludovic@chabant.com>
parents: 20
diff changeset
27
508
79f03b5c1b8f formatting: Add support for Markdown extension configs.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
28 extensions = config.get('extensions', [])
202
cd049786c008 markdown: Let the user specify extensions in one line.
Ludovic Chabant <ludovic@chabant.com>
parents: 76
diff changeset
29 if isinstance(extensions, str):
cd049786c008 markdown: Let the user specify extensions in one line.
Ludovic Chabant <ludovic@chabant.com>
parents: 76
diff changeset
30 extensions = [e.strip() for e in extensions.split(',')]
20
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
31 # Compatibility with PieCrust 1.x
58
95590732e4c9 More robust Markdown configuration handling.
Ludovic Chabant <ludovic@chabant.com>
parents: 20
diff changeset
32 if config.get('use_markdown_extra'):
20
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
33 extensions.append('extra')
c95c90c82263 Add support for Markdown extensions.
Ludovic Chabant <ludovic@chabant.com>
parents: 3
diff changeset
34
508
79f03b5c1b8f formatting: Add support for Markdown extension configs.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
35 extension_configs = config.get('extension_configs', {})
410
d1a472464e57 markdown: Cache the formatter once.
Ludovic Chabant <ludovic@chabant.com>
parents: 202
diff changeset
36
850
370e74941d32 optimize: Only load some 3rd party packages when needed.
Ludovic Chabant <ludovic@chabant.com>
parents: 508
diff changeset
37 from markdown import Markdown
508
79f03b5c1b8f formatting: Add support for Markdown extension configs.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
38 self._formatter = Markdown(extensions=extensions,
79f03b5c1b8f formatting: Add support for Markdown extension configs.
Ludovic Chabant <ludovic@chabant.com>
parents: 411
diff changeset
39 extension_configs=extension_configs)