this is a log website
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

80 lines
2.7 KiB

"""Utility functions to render Markdown text to HTML."""
import markdown
import six
from markdown.extensions import codehilite
from .imports import PygmentsHtmlFormatter
def force_unicode(value, encoding='utf-8', errors='strict'):
"""Convert bytes or any other Python instance to string."""
if isinstance(value, six.text_type):
return value
return value.decode(encoding, errors)
def pygmented_markdown(text, flatpages=None):
"""Render Markdown text to HTML.
Uses the `CodeHilite`_ extension only if `Pygments`_ is available. If
`Pygments`_ is not available, "codehilite" is removed from list of
extensions.
If you need other extensions, set them up using the
``FLATPAGES_MARKDOWN_EXTENSIONS`` setting, which should be a sequence
of strings or Markdown Extension objects.
Extensions specified with entrypoint strings should be configured using
``FLATPAGES_EXTENSION_CONFIGS``.
.. _CodeHilite:
http://www.freewisdom.org/projects/python-markdown/CodeHilite
.. _Pygments: http://pygments.org/
"""
if flatpages:
extensions = flatpages.config('markdown_extensions')
extension_configs = flatpages.config('extension_configs')
else:
extensions = []
extension_configs = {}
if PygmentsHtmlFormatter is None:
original_extensions = extensions
original_config = extension_configs
extensions = []
extension_configs = {}
for extension in original_extensions:
if (
isinstance(extension, six.string_types) and
'codehilite' in extension
):
continue
elif isinstance(
extension,
codehilite.CodeHiliteExtension
):
continue
extensions.append(extension)
if isinstance(extension, six.string_types):
if extension in original_config:
extension_configs[extension] = original_config[extension]
elif not extensions:
extensions = ['codehilite']
return markdown.markdown(text, extensions=extensions,
extension_configs=extension_configs)
def pygments_style_defs(style='default'):
""":return: the CSS definitions for the `CodeHilite`_ Markdown plugin.
:param style: The Pygments `style`_ to use.
Only available if `Pygments`_ is.
.. _CodeHilite:
http://www.freewisdom.org/projects/python-markdown/CodeHilite
.. _Pygments: http://pygments.org/
.. _style: http://pygments.org/docs/styles/
"""
formatter = PygmentsHtmlFormatter(style=style)
return formatter.get_style_defs('.codehilite')