Mercurial > piecrust2
annotate piecrust/formatting/markdownformatter.py @ 1129:957f7c972715
chef: Support special tokens in the `chef/env` setting.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 28 Feb 2018 20:43:52 -0800 |
parents | 8178671f9a04 |
children |
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) |