Show More
@@ -12,6 +12,8 b' before_install:' | |||
|
12 | 12 | - sudo rm -rf /dev/shm && sudo ln -s /run/shm /dev/shm |
|
13 | 13 | # Pierre Carrier's PPA for PhantomJS and CasperJS |
|
14 | 14 | - time sudo add-apt-repository -y ppa:pcarrier/ppa |
|
15 | # Needed to get recent version of pandoc in ubntu 12.04 | |
|
16 | - time sudo add-apt-repository -y ppa:marutter/c2d4u | |
|
15 | 17 | - time sudo apt-get update |
|
16 | 18 | - time sudo apt-get install pandoc casperjs libzmq3-dev |
|
17 | 19 | # pin tornado < 4 for js tests while phantom is on super old webkit |
@@ -62,6 +62,7 b' default_filters = {' | |||
|
62 | 62 | 'path2url': filters.path2url, |
|
63 | 63 | 'add_prompts': filters.add_prompts, |
|
64 | 64 | 'ascii_only': filters.ascii_only, |
|
65 | 'prevent_list_blocks': filters.prevent_list_blocks, | |
|
65 | 66 | } |
|
66 | 67 | |
|
67 | 68 | #----------------------------------------------------------------------------- |
@@ -45,7 +45,7 b' class NodeJSMissing(ConversionException):' | |||
|
45 | 45 | """Exception raised when node.js is missing.""" |
|
46 | 46 | pass |
|
47 | 47 | |
|
48 | def markdown2latex(source, extra_args=None): | |
|
48 | def markdown2latex(source, markup='markdown', extra_args=None): | |
|
49 | 49 | """Convert a markdown string to LaTeX via pandoc. |
|
50 | 50 | |
|
51 | 51 | This function will raise an error if pandoc is not installed. |
@@ -55,13 +55,17 b' def markdown2latex(source, extra_args=None):' | |||
|
55 | 55 | ---------- |
|
56 | 56 | source : string |
|
57 | 57 | Input string, assumed to be valid markdown. |
|
58 | markup : string | |
|
59 | Markup used by pandoc's reader | |
|
60 | default : pandoc extended markdown | |
|
61 | (see http://johnmacfarlane.net/pandoc/README.html#pandocs-markdown) | |
|
58 | 62 | |
|
59 | 63 | Returns |
|
60 | 64 | ------- |
|
61 | 65 | out : string |
|
62 | 66 | Output as returned by pandoc. |
|
63 | 67 | """ |
|
64 |
return pandoc(source, |
|
|
68 | return pandoc(source, markup, 'latex', extra_args=extra_args) | |
|
65 | 69 | |
|
66 | 70 | |
|
67 | 71 | @undoc |
@@ -45,6 +45,7 b' __all__ = [' | |||
|
45 | 45 | 'path2url', |
|
46 | 46 | 'add_prompts', |
|
47 | 47 | 'ascii_only', |
|
48 | 'prevent_list_blocks', | |
|
48 | 49 | ] |
|
49 | 50 | |
|
50 | 51 | |
@@ -218,4 +219,14 b' def path2url(path):' | |||
|
218 | 219 | def ascii_only(s): |
|
219 | 220 | """ensure a string is ascii""" |
|
220 | 221 | s = py3compat.cast_unicode(s) |
|
221 | return s.encode('ascii', 'replace').decode('ascii') No newline at end of file | |
|
222 | return s.encode('ascii', 'replace').decode('ascii') | |
|
223 | ||
|
224 | def prevent_list_blocks(s): | |
|
225 | """ | |
|
226 | Prevent presence of enumerate or itemize blocks in latex headings cells | |
|
227 | """ | |
|
228 | out = re.sub('(^\s*\d*)\.', '\\1\.', s) | |
|
229 | out = re.sub('(^\s*)\-', '\\1\-', out) | |
|
230 | out = re.sub('(^\s*)\+', '\\1\+', out) | |
|
231 | out = re.sub('(^\s*)\*', '\\1\*', out) | |
|
232 | return out |
@@ -49,10 +49,24 b' class TestMarkdown(TestsBase):' | |||
|
49 | 49 | self._try_markdown(markdown2latex, test, self.tokens[index]) |
|
50 | 50 | |
|
51 | 51 | @dec.onlyif_cmds_exist('pandoc') |
|
52 | def test_markdown2latex_markup(self): | |
|
53 | """markdown2latex with markup kwarg test""" | |
|
54 | # This string should be passed through unaltered with pandoc's | |
|
55 | # markdown_strict reader | |
|
56 | s = '1) arabic number with parenthesis' | |
|
57 | self.assertEqual(markdown2latex(s, markup='markdown_strict'), s) | |
|
58 | # This string should be passed through unaltered with pandoc's | |
|
59 | # markdown_strict+tex_math_dollars reader | |
|
60 | s = '$\\alpha$ latex math' | |
|
61 | self.assertEqual( | |
|
62 | markdown2latex(s, markup='markdown_strict+tex_math_dollars'), | |
|
63 | s) | |
|
64 | ||
|
65 | @dec.onlyif_cmds_exist('pandoc') | |
|
52 | 66 | def test_pandoc_extra_args(self): |
|
53 | 67 | # pass --no-wrap |
|
54 | 68 | s = '\n'.join([ |
|
55 | "#latex {{long_line | md2l(['--no-wrap'])}}", | |
|
69 | "#latex {{long_line | md2l('markdown', ['--no-wrap'])}}", | |
|
56 | 70 | "#rst {{long_line | md2r(['--columns', '5'])}}", |
|
57 | 71 | ]) |
|
58 | 72 | long_line = ' '.join(['long'] * 30) |
@@ -64,7 +78,7 b' class TestMarkdown(TestsBase):' | |||
|
64 | 78 | tpl = env.from_string(s) |
|
65 | 79 | rendered = tpl.render(long_line=long_line) |
|
66 | 80 | _, latex, rst = rendered.split('#') |
|
67 | ||
|
81 | ||
|
68 | 82 | self.assertEqual(latex.strip(), 'latex %s' % long_line) |
|
69 | 83 | self.assertEqual(rst.strip(), 'rst %s' % long_line.replace(' ', '\n')) |
|
70 | 84 |
@@ -18,7 +18,7 b' import os' | |||
|
18 | 18 | from ...tests.base import TestsBase |
|
19 | 19 | from ..strings import (wrap_text, html2text, add_anchor, strip_dollars, |
|
20 | 20 | strip_files_prefix, get_lines, comment_lines, ipython2python, posix_path, |
|
21 | add_prompts | |
|
21 | add_prompts, prevent_list_blocks | |
|
22 | 22 | ) |
|
23 | 23 | |
|
24 | 24 | |
@@ -151,3 +151,15 b' class TestStrings(TestsBase):' | |||
|
151 | 151 | text1 = """for i in range(10):\n i += 1\n print i""" |
|
152 | 152 | text2 = """>>> for i in range(10):\n... i += 1\n... print i""" |
|
153 | 153 | self.assertEqual(text2, add_prompts(text1)) |
|
154 | ||
|
155 | def test_prevent_list_blocks(self): | |
|
156 | """prevent_list_blocks test""" | |
|
157 | tests = [ | |
|
158 | ('1. arabic point', '1\\. arabic point'), | |
|
159 | ('* bullet asterisk', '\\* bullet asterisk'), | |
|
160 | ('+ bullet Plus Sign', '\\+ bullet Plus Sign'), | |
|
161 | ('- bullet Hyphen-Minus', '\\- bullet Hyphen-Minus'), | |
|
162 | (' 1. spaces + arabic point', ' 1\\. spaces + arabic point'), | |
|
163 | ] | |
|
164 | for test in tests: | |
|
165 | self.assertEqual(prevent_list_blocks(test[0]), test[1]) |
@@ -201,7 +201,8 b' This template does not define a docclass, the inheriting class must define this.' | |||
|
201 | 201 | ((* elif cell.level == 6 -*)) |
|
202 | 202 | ((* block h6 -*))\\*\textit((* endblock h6 -*)) |
|
203 | 203 | ((*- endif -*)) |
|
204 | {((( cell.source | replace('\n', ' ') | citation2latex | strip_files_prefix | markdown2latex )))} | |
|
204 | {((( cell.source | replace('\n', ' ') | citation2latex | strip_files_prefix | prevent_list_blocks | markdown2latex(markup='markdown_strict+tex_math_dollars') )))} | |
|
205 | ||
|
205 | 206 | |
|
206 | 207 | ((* endblock headingcell *)) |
|
207 | 208 |
General Comments 0
You need to be logged in to leave comments.
Login now