aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'clarkzjw.cc/config/bia/ansible/roles/cgit/templates/filters/md2html.py')
-rw-r--r--clarkzjw.cc/config/bia/ansible/roles/cgit/templates/filters/md2html.py309
1 files changed, 309 insertions, 0 deletions
diff --git a/clarkzjw.cc/config/bia/ansible/roles/cgit/templates/filters/md2html.py b/clarkzjw.cc/config/bia/ansible/roles/cgit/templates/filters/md2html.py
new file mode 100644
index 0000000..4421bdd
--- /dev/null
+++ b/clarkzjw.cc/config/bia/ansible/roles/cgit/templates/filters/md2html.py
@@ -0,0 +1,309 @@
1#!/opt/cgit/bin/python3.9
2
3import markdown
4import sys
5import io
6from pygments.formatters import HtmlFormatter
7from markdown.extensions.toc import TocExtension
8
9sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
10sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
11sys.stdout.write('''
12<style>
13.markdown-body {
14 font-size: 14px;
15 line-height: 1.6;
16 overflow: hidden;
17}
18.markdown-body>*:first-child {
19 margin-top: 0 !important;
20}
21.markdown-body>*:last-child {
22 margin-bottom: 0 !important;
23}
24.markdown-body a.absent {
25 color: #c00;
26}
27.markdown-body a.anchor {
28 display: block;
29 padding-left: 30px;
30 margin-left: -30px;
31 cursor: pointer;
32 position: absolute;
33 top: 0;
34 left: 0;
35 bottom: 0;
36}
37.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 {
38 margin: 20px 0 10px;
39 padding: 0;
40 font-weight: bold;
41 -webkit-font-smoothing: antialiased;
42 cursor: text;
43 position: relative;
44}
45.markdown-body h1 .mini-icon-link, .markdown-body h2 .mini-icon-link, .markdown-body h3 .mini-icon-link, .markdown-body h4 .mini-icon-link, .markdown-body h5 .mini-icon-link, .markdown-body h6 .mini-icon-link {
46 display: none;
47 color: #000;
48}
49.markdown-body h1:hover a.anchor, .markdown-body h2:hover a.anchor, .markdown-body h3:hover a.anchor, .markdown-body h4:hover a.anchor, .markdown-body h5:hover a.anchor, .markdown-body h6:hover a.anchor {
50 text-decoration: none;
51 line-height: 1;
52 padding-left: 0;
53 margin-left: -22px;
54 top: 15%;
55}
56.markdown-body h1:hover a.anchor .mini-icon-link, .markdown-body h2:hover a.anchor .mini-icon-link, .markdown-body h3:hover a.anchor .mini-icon-link, .markdown-body h4:hover a.anchor .mini-icon-link, .markdown-body h5:hover a.anchor .mini-icon-link, .markdown-body h6:hover a.anchor .mini-icon-link {
57 display: inline-block;
58}
59div#cgit .markdown-body h1 a.toclink, div#cgit .markdown-body h2 a.toclink, div#cgit .markdown-body h3 a.toclink, div#cgit .markdown-body h4 a.toclink, div#cgit .markdown-body h5 a.toclink, div#cgit .markdown-body h6 a.toclink {
60 color: black;
61}
62.markdown-body h1 tt, .markdown-body h1 code, .markdown-body h2 tt, .markdown-body h2 code, .markdown-body h3 tt, .markdown-body h3 code, .markdown-body h4 tt, .markdown-body h4 code, .markdown-body h5 tt, .markdown-body h5 code, .markdown-body h6 tt, .markdown-body h6 code {
63 font-size: inherit;
64}
65.markdown-body h1 {
66 font-size: 28px;
67 color: #000;
68}
69.markdown-body h2 {
70 font-size: 24px;
71 border-bottom: 1px solid #ccc;
72 color: #000;
73}
74.markdown-body h3 {
75 font-size: 18px;
76}
77.markdown-body h4 {
78 font-size: 16px;
79}
80.markdown-body h5 {
81 font-size: 14px;
82}
83.markdown-body h6 {
84 color: #777;
85 font-size: 14px;
86}
87.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre {
88 margin: 15px 0;
89}
90.markdown-body hr {
91 background: transparent url("/dirty-shade.png") repeat-x 0 0;
92 border: 0 none;
93 color: #ccc;
94 height: 4px;
95 padding: 0;
96}
97.markdown-body>h2:first-child, .markdown-body>h1:first-child, .markdown-body>h1:first-child+h2, .markdown-body>h3:first-child, .markdown-body>h4:first-child, .markdown-body>h5:first-child, .markdown-body>h6:first-child {
98 margin-top: 0;
99 padding-top: 0;
100}
101.markdown-body a:first-child h1, .markdown-body a:first-child h2, .markdown-body a:first-child h3, .markdown-body a:first-child h4, .markdown-body a:first-child h5, .markdown-body a:first-child h6 {
102 margin-top: 0;
103 padding-top: 0;
104}
105.markdown-body h1+p, .markdown-body h2+p, .markdown-body h3+p, .markdown-body h4+p, .markdown-body h5+p, .markdown-body h6+p {
106 margin-top: 0;
107}
108.markdown-body li p.first {
109 display: inline-block;
110}
111.markdown-body ul, .markdown-body ol {
112 padding-left: 30px;
113}
114.markdown-body ul.no-list, .markdown-body ol.no-list {
115 list-style-type: none;
116 padding: 0;
117}
118.markdown-body ul li>:first-child, .markdown-body ul li ul:first-of-type, .markdown-body ul li ol:first-of-type, .markdown-body ol li>:first-child, .markdown-body ol li ul:first-of-type, .markdown-body ol li ol:first-of-type {
119 margin-top: 0px;
120}
121.markdown-body ul li p:last-of-type, .markdown-body ol li p:last-of-type {
122 margin-bottom: 0;
123}
124.markdown-body ul ul, .markdown-body ul ol, .markdown-body ol ol, .markdown-body ol ul {
125 margin-bottom: 0;
126}
127.markdown-body dl {
128 padding: 0;
129}
130.markdown-body dl dt {
131 font-size: 14px;
132 font-weight: bold;
133 font-style: italic;
134 padding: 0;
135 margin: 15px 0 5px;
136}
137.markdown-body dl dt:first-child {
138 padding: 0;
139}
140.markdown-body dl dt>:first-child {
141 margin-top: 0px;
142}
143.markdown-body dl dt>:last-child {
144 margin-bottom: 0px;
145}
146.markdown-body dl dd {
147 margin: 0 0 15px;
148 padding: 0 15px;
149}
150.markdown-body dl dd>:first-child {
151 margin-top: 0px;
152}
153.markdown-body dl dd>:last-child {
154 margin-bottom: 0px;
155}
156.markdown-body blockquote {
157 border-left: 4px solid #DDD;
158 padding: 0 15px;
159 color: #777;
160}
161.markdown-body blockquote>:first-child {
162 margin-top: 0px;
163}
164.markdown-body blockquote>:last-child {
165 margin-bottom: 0px;
166}
167.markdown-body table th {
168 font-weight: bold;
169}
170.markdown-body table th, .markdown-body table td {
171 border: 1px solid #ccc;
172 padding: 6px 13px;
173}
174.markdown-body table tr {
175 border-top: 1px solid #ccc;
176 background-color: #fff;
177}
178.markdown-body table tr:nth-child(2n) {
179 background-color: #f8f8f8;
180}
181.markdown-body img {
182 max-width: 100%;
183 -moz-box-sizing: border-box;
184 box-sizing: border-box;
185}
186.markdown-body span.frame {
187 display: block;
188 overflow: hidden;
189}
190.markdown-body span.frame>span {
191 border: 1px solid #ddd;
192 display: block;
193 float: left;
194 overflow: hidden;
195 margin: 13px 0 0;
196 padding: 7px;
197 width: auto;
198}
199.markdown-body span.frame span img {
200 display: block;
201 float: left;
202}
203.markdown-body span.frame span span {
204 clear: both;
205 color: #333;
206 display: block;
207 padding: 5px 0 0;
208}
209.markdown-body span.align-center {
210 display: block;
211 overflow: hidden;
212 clear: both;
213}
214.markdown-body span.align-center>span {
215 display: block;
216 overflow: hidden;
217 margin: 13px auto 0;
218 text-align: center;
219}
220.markdown-body span.align-center span img {
221 margin: 0 auto;
222 text-align: center;
223}
224.markdown-body span.align-right {
225 display: block;
226 overflow: hidden;
227 clear: both;
228}
229.markdown-body span.align-right>span {
230 display: block;
231 overflow: hidden;
232 margin: 13px 0 0;
233 text-align: right;
234}
235.markdown-body span.align-right span img {
236 margin: 0;
237 text-align: right;
238}
239.markdown-body span.float-left {
240 display: block;
241 margin-right: 13px;
242 overflow: hidden;
243 float: left;
244}
245.markdown-body span.float-left span {
246 margin: 13px 0 0;
247}
248.markdown-body span.float-right {
249 display: block;
250 margin-left: 13px;
251 overflow: hidden;
252 float: right;
253}
254.markdown-body span.float-right>span {
255 display: block;
256 overflow: hidden;
257 margin: 13px auto 0;
258 text-align: right;
259}
260.markdown-body code, .markdown-body tt {
261 margin: 0 2px;
262 padding: 0px 5px;
263 border: 1px solid #eaeaea;
264 background-color: #f8f8f8;
265 border-radius: 3px;
266}
267.markdown-body code {
268 white-space: nowrap;
269}
270.markdown-body pre>code {
271 margin: 0;
272 padding: 0;
273 white-space: pre;
274 border: none;
275 background: transparent;
276}
277.markdown-body .highlight pre, .markdown-body pre {
278 background-color: #f8f8f8;
279 border: 1px solid #ccc;
280 font-size: 13px;
281 line-height: 19px;
282 overflow: auto;
283 padding: 6px 10px;
284 border-radius: 3px;
285}
286.markdown-body pre code, .markdown-body pre tt {
287 margin: 0;
288 padding: 0;
289 background-color: transparent;
290 border: none;
291}
292''')
293sys.stdout.write(HtmlFormatter(style='solarized-light').get_style_defs('.highlight'))
294sys.stdout.write('''
295</style>
296''')
297sys.stdout.write("<div class='markdown-body'>")
298sys.stdout.flush()
299# Note: you may want to run this through bleach for sanitization
300markdown.markdownFromFile(
301 output_format="html5",
302 extensions=[
303 "markdown.extensions.fenced_code",
304 "markdown.extensions.codehilite",
305 "markdown.extensions.tables",
306 TocExtension(anchorlink=True)],
307 extension_configs={
308 "markdown.extensions.codehilite":{"css_class":"highlight"}})
309sys.stdout.write("</div>")
Powered by cgit v1.2.3 (git 2.41.0)