10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
13 __docformat__ = 'restructuredtext' |
14 |
14 |
|
15 from fanstatic import ConfigurationError |
|
16 |
15 from pyams_content.component.illustration import IIllustration |
17 from pyams_content.component.illustration import IIllustration |
16 from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph, IRawParagraph |
18 from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph, IRawParagraph |
17 from pyams_content.features.renderer.interfaces import IContentRenderer |
19 from pyams_content.features.renderer.interfaces import IContentRenderer |
|
20 from pyams_default_theme import library |
18 from pyams_default_theme.features.renderer import BaseContentRenderer |
21 from pyams_default_theme.features.renderer import BaseContentRenderer |
19 from pyams_skin.layer import IPyAMSLayer |
22 from pyams_skin.layer import IPyAMSLayer |
20 from pyams_template.template import template_config |
23 from pyams_template.template import template_config |
21 from pyams_utils.adapter import adapter_config |
24 from pyams_utils.adapter import adapter_config, get_annotation_adapter |
|
25 from pyams_utils.fanstatic import ExternalResource |
|
26 from pyams_utils.pygments import IPygmentsCodeConfiguration, PygmentsCodeRendererSettings, render_source |
22 |
27 |
23 from pyams_default_theme import _ |
28 from pyams_default_theme import _ |
24 |
29 |
25 |
30 |
26 # |
31 # |
31 @template_config(template='templates/raw-default.pt', layer=IPyAMSLayer) |
36 @template_config(template='templates/raw-default.pt', layer=IPyAMSLayer) |
32 class RawParagraphDefaultRenderer(BaseContentRenderer): |
37 class RawParagraphDefaultRenderer(BaseContentRenderer): |
33 """Raw paragraph default renderer""" |
38 """Raw paragraph default renderer""" |
34 |
39 |
35 label = _("Default raw HTML renderer") |
40 label = _("Default raw HTML renderer") |
|
41 weight = 1 |
36 |
42 |
37 i18n_context_attrs = ('title', 'body',) |
43 i18n_context_attrs = ('title', 'body') |
|
44 |
|
45 |
|
46 # |
|
47 # Raw paragraph source code renderer |
|
48 # |
|
49 |
|
50 RAW_PARAGRAPH_SOURCE_CODE_RENDERER_SETTINGS_KEY = 'pyams_content.raw.renderer:source-code' |
|
51 |
|
52 |
|
53 @adapter_config(context=IRawParagraph, provides=IPygmentsCodeConfiguration) |
|
54 def raw_paragraph_source_code_renderer_settings_factory(context): |
|
55 """Raw paragraph source code renderer settings factory""" |
|
56 return get_annotation_adapter(context, RAW_PARAGRAPH_SOURCE_CODE_RENDERER_SETTINGS_KEY, |
|
57 PygmentsCodeRendererSettings) |
|
58 |
|
59 |
|
60 @adapter_config(name='source-code', context=(IRawParagraph, IPyAMSLayer), provides=IContentRenderer) |
|
61 @template_config(template='templates/raw-source-code.pt', layer=IPyAMSLayer) |
|
62 class RawParagraphSourceCodeRenderer(BaseContentRenderer): |
|
63 """Raw paragraph source code renderer""" |
|
64 |
|
65 label = _("Formatted source code renderer") |
|
66 weight = 10 |
|
67 |
|
68 settings_interface = IPygmentsCodeConfiguration |
|
69 |
|
70 i18n_context_attrs = ('title', 'body') |
|
71 |
|
72 @property |
|
73 def resources(self): |
|
74 path = 'get-pygments-style.css?style={}'.format(self.settings.style) |
|
75 try: |
|
76 yield ExternalResource(library, path, resource_type='css') |
|
77 except ConfigurationError: |
|
78 yield library.known_resources[path] |
|
79 |
|
80 @property |
|
81 def source(self): |
|
82 code = self.body |
|
83 if code: |
|
84 return render_source(code, self.settings) |
|
85 return '' |
38 |
86 |
39 |
87 |
40 # |
88 # |
41 # HTML paragraph default renderer |
89 # HTML paragraph default renderer |
42 # |
90 # |