diff options
author | Jens Diemer <git@jensdiemer.de> | 2022-08-21 00:49:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-21 00:49:35 +0200 |
commit | 97de7930b7ebbeac615231c6eed1ac6783de5821 (patch) | |
tree | 4d03cac9c53992d389e85294b2ba7287699aabb7 | |
parent | 66340e67f7fee7be0fcd8249d60c676476b31be9 (diff) | |
parent | 89d6ad7ac88868932911e8926866445bc3b89cb4 (diff) | |
download | creole-97de7930b7ebbeac615231c6eed1ac6783de5821.tar.gz |
Merge pull request #69 from jedie/dev
fix markdown newlines
-rw-r--r-- | README.md | 28 | ||||
-rw-r--r-- | creole/emitter/html2markdown_emitter.py | 23 | ||||
-rw-r--r-- | creole/tests/test_creole2markdown.py | 56 | ||||
-rw-r--r-- | creole/tests/test_cross_compare_markdown.py | 18 | ||||
-rw-r--r-- | creole/tests/test_html2markdown.py | 21 |
5 files changed, 120 insertions, 26 deletions
@@ -28,10 +28,10 @@ The creole2html part based on the creole markup parser and emitter from the Moin # install Python packages available on: [http://pypi.python.org/pypi/python-creole/](http://pypi.python.org/pypi/python-creole/) - ``` ~$ pip install python-creole ``` + To setup a virtualenv via Poetry, see `unittests` section below. # example @@ -39,91 +39,91 @@ To setup a virtualenv via Poetry, see `unittests` section below. ## creole2html Convert creole markup to html code: - ``` >>> from creole import creole2html >>> creole2html("This is **creole //markup//**") '<p>This is <strong>creole <i>markup</i></strong></p>\n' ``` + ## html2creole Convert html code back into creole markup: - ``` >>> from creole import html2creole >>> html2creole('<p>This is <strong>creole <i>markup</i></strong></p>\n') 'This is **creole //markup//**' ``` + ## rest2html Convert ReStructuredText into clean html code (needs [docutils](http://pypi.python.org/pypi/docutils/)): - ``` >>> from creole.rest2html.clean_writer import rest2html >>> rest2html(u"A ReSt link to `PyLucid CMS <http://www.pylucid.org>`_ :)") '<p>A ReSt link to <a href="http://www.pylucid.org">PyLucid CMS</a> :)</p>\\n' ``` + (more information: [rest2html wiki page](https://github.com/jedie/python-creole/wiki/rest2html)) ## html2rest Convert html code into ReStructuredText markup: - ``` >>> from creole import html2rest >>> html2rest('<p>This is <strong>ReStructuredText</strong> <em>markup</em>!</p>') 'This is **ReStructuredText** *markup*!' ``` + ## html2textile Convert html code into textile markup - ``` >>> from creole import html2textile >>> html2textile('<p>This is <strong>textile <i>markup</i></strong>!</p>') 'This is *textile __markup__*!' ``` + See also: [http://github.com/jedie/python-creole/blob/master/demo.py](http://github.com/jedie/python-creole/blob/master/demo.py) ## html2markdown Convert html code into textile markup - ``` >>> from creole import html2markdown >>> html2markdown('<p>This is <strong>markdown <i>markup</i></strong>!</p>') 'This is **markdown _markup_**!' ``` + See also: [http://github.com/jedie/python-creole/blob/main/demo.py](http://github.com/jedie/python-creole/blob/main/demo.py) # Image size additional You can pass image width/height in image tags, e.g.: - ``` >>> from creole import creole2html >>> creole_markup="""{{foobar.jpg|image title|90x160}}""" >>> creole2html(creole_markup) '<p><img src="foobar.jpg" title="image title" alt="image title" width="90" height="160" /></p>' ``` -The third part (`90x160`) is not in creole standard, you can force a _strict_ mode, e.g.: +The third part (`90x160`) is not in creole standard, you can force a _strict_ mode, e.g.: ``` >>> creole2html(creole_markup, strict=True) '<p><img src="foobar.jpg" title="image title|90x160" alt="image title|90x160" /></p>' ``` + # Source code highlighting support You can find a example macro which highlight source code thanks to the pygments library. It is located here: [/creole/shared/example_macros.py](https://github.com/jedie/python-creole/blob/main/creole/shared/example_macros.py). Here is how to use it: - ``` >>> from creole import creole2html >>> from creole.shared.example_macros import code >>> creole_markup="""<<code ext=".py">>#some code\nprint('coucou')\n<</code>>""" >>> creole2html(creole_markup, macros={'code': code}) ``` + # commandline interface If you have python-creole installed, you will get these simple CLI scripts: @@ -136,7 +136,6 @@ If you have python-creole installed, you will get these simple CLI scripts: * html2markdown Here the `--help` output from `html2creole`: - ``` $ html2creole --help usage: html2creole [-h] [-v] [--encoding ENCODING] sourcefile destination @@ -153,11 +152,12 @@ optional arguments: -v, --version show program's version number and exit --encoding ENCODING Codec for read/write file (default encoding: utf-8) ``` -Example to convert a html file into a creole file: +Example to convert a html file into a creole file: ``` $ html2creole foobar.html foobar.creole ``` + # documentation We store documentation/examples into the project wiki: @@ -180,7 +180,6 @@ Creole Markup Cheat Sheet can be found here: [http://www.wikicreole.org/wiki/Che ![Creole Markup Cheat Sheet](http://www.wikicreole.org/imageServlet?page=CheatSheet%2Fcreole_cheat_sheet.png&width=340 "Creole Markup Cheat Sheet") ## unittests - ``` # clone repository (or use your fork): ~$ git clone https://github.com/jedie/python-creole.git @@ -198,10 +197,10 @@ Creole Markup Cheat Sheet can be found here: [http://www.wikicreole.org/wiki/Che # Run pytest via tox with all environments: ~/python-creole$ make tox ``` + ## make targets To see all make targets, just call `make`: - ``` ~/python-creole$ make help List all commands @@ -216,6 +215,7 @@ pytest Run pytest update-readmes update README.rst and README.md from README.creole publish Release new version to PyPi ``` + ## Use creole in README With python-creole you can convert a README on-the-fly from creole into ReStructuredText in setup.py diff --git a/creole/emitter/html2markdown_emitter.py b/creole/emitter/html2markdown_emitter.py index 866e090..848add0 100644 --- a/creole/emitter/html2markdown_emitter.py +++ b/creole/emitter/html2markdown_emitter.py @@ -35,7 +35,7 @@ class MarkdownEmitter(BaseEmitter): self._table = MarkupTable(head_prefix='', debug_msg=self.debug_msg) self.emit_children(node) content = self._table.get_markdown_table() - return f'{content}\n\n' + return f'\n{content}\n' def tr_emit(self, node): self._table.add_tr() @@ -70,29 +70,28 @@ class MarkdownEmitter(BaseEmitter): if class_value: if class_value.startswith('language-'): language = class_value.partition('-')[2] - return f'```{language}{code}```\n\n' + return f'\n```{language}{code}```\n' - return f'```{code}```\n\n' + return f'\n```{code}```\n' - return f'```{self.deentity.replace_all(pre_content)}```\n' + return f'\n```{self.deentity.replace_all(pre_content)}```\n' def blockdata_pass_emit(self, node: DocNode): - return f'{node.content}\n\n' + return f'\n{node.content}\n' # -------------------------------------------------------------------------- def p_emit(self, node: DocNode): - result = self.emit_children(node) - if self._inner_list == '': - result += '\n\n' - return result + return f'\n{self.emit_children(node)}\n' def br_emit(self, node: DocNode): return '\n' def headline_emit(self, node: DocNode): prefix = '#' * node.level - return f'{prefix} {self.emit_children(node)}\n\n' + if node.parent not in ('document', 'headline', 'p'): + prefix = f'\n{prefix}' + return f'{prefix} {self.emit_children(node)}\n' # -------------------------------------------------------------------------- @@ -130,7 +129,7 @@ class MarkdownEmitter(BaseEmitter): # -------------------------------------------------------------------------- def hr_emit(self, node: DocNode): - return '----\n\n' + return '\n----\n' def a_emit(self, node: DocNode): link_text = self.emit_children(node) @@ -156,7 +155,7 @@ class MarkdownEmitter(BaseEmitter): def list_emit(self, node: DocNode): content = self.emit_children(node) if node.level == 1: - content += '\n\n' + return f'\n{content}\n' return content ul_emit = list_emit diff --git a/creole/tests/test_creole2markdown.py b/creole/tests/test_creole2markdown.py new file mode 100644 index 0000000..6c6fa89 --- /dev/null +++ b/creole/tests/test_creole2markdown.py @@ -0,0 +1,56 @@ +from inspect import cleandoc + +from creole.tests.utils.base_unittest import BaseCreoleTest + + +class Creole2MarkdownTests(BaseCreoleTest): + def creole2markdown(self, creole_string, html_string, markdown_string, debug=False): + self.assert_creole2html(raw_creole=creole_string, raw_html=html_string, debug=debug) + self.assert_html2markdown( + markdown_string=markdown_string, + html_string=html_string, + ) + + def test_basic(self): + self.creole2markdown( + creole_string='= Headline =', + html_string='<h1>Headline</h1>', + markdown_string='# Headline', + debug=True, + ) + + def test_newline(self): + self.creole2markdown( + creole_string=cleandoc( + ''' + A Test line + e.g.: + {{{ + print('foobar') + }}} + Text below. + ''' + ), + html_string=cleandoc( + ''' + <p>A Test line<br /> + e.g.:</p> + <pre> + print('foobar') + </pre> + <p>Text below.</p> + ''' + ), + markdown_string=cleandoc( + ''' + A Test line + e.g.: + ``` + print('foobar') + ``` + + Text below. + ''' + ), + debug=True, + ) diff --git a/creole/tests/test_cross_compare_markdown.py b/creole/tests/test_cross_compare_markdown.py index 181e36d..730b94f 100644 --- a/creole/tests/test_cross_compare_markdown.py +++ b/creole/tests/test_cross_compare_markdown.py @@ -81,7 +81,25 @@ class CrossCompareMarkdownTests(BaseCreoleTest): markdown_string='----', html_string='<hr />', ) + self.cross_compare_markdown( + markdown_string=cleandoc( + ''' + before + ---- + + after + ''' + ), + html_string=cleandoc( + ''' + <p>before</p> + <hr /> + <p>after</p> + ''' + ), + # debug=True, + ) def test_typeface_basic(self): self.cross_compare_markdown( markdown_string='_emphasis_', diff --git a/creole/tests/test_html2markdown.py b/creole/tests/test_html2markdown.py index c587928..2651339 100644 --- a/creole/tests/test_html2markdown.py +++ b/creole/tests/test_html2markdown.py @@ -140,5 +140,26 @@ class MarkdownTests(BaseCreoleTest): <p>Text after the table.</p> ''' ), + debug=True, + ) + self.assert_html2markdown( + markdown_string=cleandoc( + ''' + A table: + + | A1 | B1 | + + Text after. + ''' + ), + html_string=cleandoc( + ''' + <p>A table:</p> + <table> + <tr><td>A1</td><td>B1</td></tr> + </table> + <p>Text after.</p> + ''' + ), # debug=True, ) |