##// END OF EJS Templates
Merge pull request #6588 from benjaminabel/master...
Min RK -
r18564:3ccc8dfd merge
parent child Browse files
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, 'markdown', 'latex', extra_args=extra_args)
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