Sat, 12 Jan 2019 12:11:42 +0100
jasy: updated jasy to 1.5-beta6 (latest release available).
6650
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | # Jasy - Web Tooling Framework |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # Copyright 2010-2012 Zynga Inc. |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # Copyright 2013-2014 Sebastian Werner |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | # |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | from __future__ import unicode_literals |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | import re |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | # |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | # MARKDOWN TO HTML |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | # |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | try: |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | # import hoedown |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | # |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | # hoedownExt = hoedown.EXT_AUTOLINK | hoedown.EXT_NO_INTRA_EMPHASIS | hoedown.EXT_FENCED_CODE | hoedown.EXT_TABLES | hoedown.EXT_FOOTNOTES | hoedown.EXT_QUOTE | hoedown.EXT_STRIKETHROUGH | hoedown.EXT_UNDERLINE | hoedown.EXT_HIGHLIGHT |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | # hoedownExt = hoedown.EXT_AUTOLINK |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | # hoedownRender = hoedown.HTML_SKIP_STYLE | hoedown.HTML_SMARTYPANTS |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | import misaka |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | hoedownExt = misaka.EXT_AUTOLINK | misaka.EXT_NO_INTRA_EMPHASIS | misaka.EXT_FENCED_CODE |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | hoedownRender = misaka.HTML_SKIP_STYLE | misaka.HTML_SMARTYPANTS |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | hoedown = misaka |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | supportsMarkdown = True |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | except: |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | supportsMarkdown = False |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | def markdownToHtml(markdownStr): |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | """ |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | Converts Markdown to HTML. Supports GitHub's fenced code blocks, |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | auto linking and typographic features by SmartyPants. |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | """ |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | return hoedown.html(markdownStr, hoedownExt, hoedownRender) |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | # |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | # HIGHLIGHT CODE BLOCKS |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | # |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | try: |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | from pygments import highlight |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | from pygments.formatters import HtmlFormatter |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | from pygments.lexers import get_lexer_by_name |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | # By http://misaka.61924.nl/#toc_3 |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | codeblock = re.compile(r'<pre(?: lang="([a-z0-9]+)")?><code(?: class="([a-z0-9]+).*?")?>(.*?)</code></pre>', re.IGNORECASE | re.DOTALL) |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | supportsHighlighting = True |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | except ImportError: |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | supportsHighlighting = False |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | def highlightCodeBlocks(html, tabsize=2, defaultlang="javascript"): |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | """ |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | Patches 'code' elements in HTML to apply HTML based syntax highlighting. Automatically |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | chooses the matching language detected via a CSS class of the 'code' element. |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | """ |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | def unescape(html): |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | html = html.replace('<', '<') |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | html = html.replace('>', '>') |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | html = html.replace('&', '&') |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | html = html.replace('"', '"') |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | return html.replace(''', "'") |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | def replace(match): |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | language, classname, code = match.groups() |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | if language is None: |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | language = classname if classname else defaultlang |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | lexer = get_lexer_by_name(language, tabsize=tabsize) |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | formatter = HtmlFormatter(linenos="table") |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | code = unescape(code) |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | # for some reason pygments escapes our code once again so we need to reverse it twice |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | return unescape(highlight(code, lexer, formatter)) |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | |
1dd52aa8897c
jasy: updated jasy to 1.5-beta6 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | return codeblock.sub(replace, html) |