src/pyams_utils/text.py
changeset 321 247c4f2948ef
parent 303 fd0365f94a2c
child 419 05ff71a02b2d
--- a/src/pyams_utils/text.py	Fri Jan 18 10:24:20 2019 +0100
+++ b/src/pyams_utils/text.py	Fri Jan 18 13:52:11 2019 +0100
@@ -20,6 +20,7 @@
 from zope.interface import Interface
 from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
 
+from pyams_utils import _
 from pyams_utils.adapter import ContextRequestAdapter, ContextRequestViewAdapter, adapter_config
 from pyams_utils.interfaces.tales import ITALESExtension
 from pyams_utils.interfaces.text import IHTMLRenderer
@@ -90,6 +91,8 @@
     This renderer only replace newlines with HTML breaks.
     """
 
+    label = _("Simple text")
+
     def render(self, **kwargs):
         return html.escape(self.context).replace('\n', '<br />\n')
 
@@ -112,6 +115,8 @@
     This renderer is using *docutils* to convert text to HTML output.
     """
 
+    label = _("ReStructured text")
+
     def render(self, **kwargs):
         """Render reStructuredText to HTML"""
         overrides = {
@@ -135,6 +140,8 @@
     This renderer is converting *Markdown* formatted text to HTML.
     """
 
+    label = _("Markdown text")
+
     def render(self, **kwargs):
         """Render Markdown code to HTML"""
         return markdown(self.context)
@@ -190,16 +197,22 @@
             return str(context)
 
 
-@vocabulary_config(name='PyAMS HTML renderers')
+PYAMS_HTML_RENDERERS_VOCABULARY = 'PyAMS HTML renderers'
+
+
+@vocabulary_config(name=PYAMS_HTML_RENDERERS_VOCABULARY)
 class RenderersVocabulary(SimpleVocabulary):
     """Text renderers vocabulary"""
 
-    def __init__(self):
+    def __init__(self, context=None):
         request = check_request()
         registry = request.registry
-        translate = registry.localizer.translate
-        terms = [SimpleTerm(name, name, translate(adapt.title).label)
-                 for name, adapt in registry.getAdapters(('', request), IHTMLRenderer)]
+        translate = request.localizer.translate
+        terms = []
+        append = terms.append
+        for name, adapter in registry.getAdapters(('', request), IHTMLRenderer):
+            if hasattr(adapter, 'label'):
+                append(SimpleTerm(name, title=translate(adapter.label)))
         super(RenderersVocabulary, self).__init__(terms)