Markups-0.4/ 0000755 0001750 0001750 00000000000 12246327450 013646 5 ustar dmitry dmitry 0000000 0000000 Markups-0.4/markups/ 0000755 0001750 0001750 00000000000 12246327450 015330 5 ustar dmitry dmitry 0000000 0000000 Markups-0.4/markups/textile.py 0000644 0001750 0001750 00000001642 12246326672 017370 0 ustar dmitry dmitry 0000000 0000000 # This file is part of python-markups module # License: BSD # Copyright: (C) Dmitry Shachnev, 2013 from __future__ import absolute_import import markups.common as common from markups.abstract import AbstractMarkup class TextileMarkup(AbstractMarkup): """Textile language""" name = 'Textile' attributes = { common.LANGUAGE_HOME_PAGE: 'http://textile.sitemonks.com/', common.MODULE_HOME_PAGE: 'https://github.com/sebix/python-textile', common.SYNTAX_DOCUMENTATION: 'http://movabletype.org/documentation/author/textile-2-syntax.html' } file_extensions = ('.textile',) default_extension = '.textile' @staticmethod def available(): try: import textile except ImportError: return False return True def __init__(self, filename=None): AbstractMarkup.__init__(self, filename) from textile import Textile self.parser = Textile() def get_document_body(self, text): return self.parser.textile(text) Markups-0.4/markups/markdown.py 0000644 0001750 0001750 00000011725 12244065403 017525 0 ustar dmitry dmitry 0000000 0000000 # This file is part of python-markups module # License: BSD # Copyright: (C) Dmitry Shachnev, 2012 from __future__ import absolute_import import os import sys import markups.common as common from markups.abstract import AbstractMarkup MATHJAX_CONFIG = \ ''' ''' class MarkdownMarkup(AbstractMarkup): """Markdown language""" name = 'Markdown' attributes = { common.LANGUAGE_HOME_PAGE: 'http://daringfireball.net/projects/markdown/', common.MODULE_HOME_PAGE: 'https://github.com/Waylan/Python-Markdown/', common.SYNTAX_DOCUMENTATION: 'http://daringfireball.net/projects/markdown/syntax' } file_extensions = ('.md', '.mkd', '.mkdn', '.mdwn', '.mdown', '.markdown') default_extension = '.mkd' @staticmethod def available(): try: import markdown except ImportError: return False return True def _load_extensions_list_from_file(self, filename): try: extensions_file = open(filename) except IOError: return [] else: extensions = [line.rstrip() for line in extensions_file] extensions_file.close() return extensions def _check_extension_exists(self, extension_name): try: __import__('markdown.extensions.'+extension_name, {}, {}, ['markdown.extensions']) except ImportError: try: __import__('mdx_'+extension_name) except ImportError: return False return True def _get_mathjax_patterns(self, markdown): def handle_match_inline(m): node = markdown.util.etree.Element('script') node.set('type', 'math/tex') node.text = markdown.util.AtomicString(m.group(3)) return node def handle_match(m): node = markdown.util.etree.Element('script') node.set('type', 'math/tex; mode=display') node.text = markdown.util.AtomicString(m.group(3)) if '\\begin' in m.group(2): node.text = markdown.util.AtomicString(m.group(2) + m.group(3) + m.group(4)) return node inlinemathpatterns = ( markdown.inlinepatterns.Pattern(r'(?') def get_document_body(self, text): self.md.reset() converted_text = self.md.convert(text) + '\n' if self.enable_cache: self.cache['body'] = converted_text return converted_text Markups-0.4/markups/restructuredtext.py 0000644 0001750 0001750 00000004221 12244065403 021334 0 ustar dmitry dmitry 0000000 0000000 # This file is part of python-markups module # License: BSD # Copyright: (C) Dmitry Shachnev, 2012 import markups.common as common from markups.abstract import AbstractMarkup class ReStructuredTextMarkup(AbstractMarkup): """reStructuredText language""" name = 'reStructuredText' attributes = { common.LANGUAGE_HOME_PAGE: 'http://docutils.sourceforge.net/rst.html', common.MODULE_HOME_PAGE: 'http://docutils.sourceforge.net/', common.SYNTAX_DOCUMENTATION: 'http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html' } file_extensions = ('.rst', '.rest') default_extension = '.rst' @staticmethod def available(): try: import docutils.core except ImportError: return False return True def __init__(self, filename=None, settings_overrides=None): self.overrides = settings_overrides or {} self.overrides.update({'math_output': 'MathJax'}) AbstractMarkup.__init__(self, filename) from docutils.core import publish_parts self._publish_parts = publish_parts def publish_parts(self, text): if 'rest_parts' in self.cache: return self.cache['rest_parts'] parts = self._publish_parts(text, source_path=self.filename, writer_name='html', settings_overrides=self.overrides) if self.enable_cache: self.cache['rest_parts'] = parts return parts def get_document_title(self, text): return self.publish_parts(text)['title'] def get_document_body(self, text): return self.publish_parts(text)['body'] def get_stylesheet(self, text=''): origstyle = self.publish_parts(text)['stylesheet'] # Cut off tags stylestart = '')] return stylesheet + common.get_pygments_stylesheet('.code') def get_javascript(self, text='', webenv=False): head = self.publish_parts(text)['head'] start_position = head.find(' some text \$escaped\$
\(escaped)
text
text
text
text
\$$escaped\$$ \[escaped]
''' mathjax_multiline_source = \ r''' $$ \TeX \LaTeX $$ ''' mathjax_multiline_output = \ '''''' @unittest.skipUnless(MarkdownMarkup.available(), 'Markdown not available') class MarkdownTest(unittest.TestCase): maxDiff = None def test_extensions_loading(self): markup = MarkdownMarkup() self.assertFalse(markup._check_extension_exists('nonexistent')) self.assertTrue(markup._check_extension_exists('meta')) def test_extra(self): markup = MarkdownMarkup() html = markup.get_document_body(tables_source) self.assertEqual(tables_output, html) html = markup.get_document_body(deflists_source) self.assertEqual(deflists_output, html) def test_remove_extra(self): markup = MarkdownMarkup(extensions=['remove_extra']) html = markup.get_document_body(tables_source) self.assertNotEqual(html, tables_output) def test_meta(self): markup = MarkdownMarkup(extensions=['meta']) title = markup.get_document_title('Title: Hello, world!\n\nSome text here.') self.assertEqual('Hello, world!', title) def test_mathjax(self): markup = MarkdownMarkup(extensions=['mathjax']) # Escaping should work self.assertEqual('', markup.get_javascript('Hello, \\$2+2$!')) js = markup.get_javascript(mathjax_source) self.assertIn('