markdown_convert 1.2.17__tar.gz → 1.2.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/PKG-INFO +1 -1
- markdown_convert-1.2.18/markdown_convert/default.css +223 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/markdown_convert/modules/constants.py +2 -2
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/markdown_convert/modules/convert.py +46 -22
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/pyproject.toml +1 -1
- markdown_convert-1.2.17/markdown_convert/default.css +0 -379
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/.gitignore +0 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/LICENSE +0 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/README.md +0 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/markdown_convert/__main__.py +0 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/markdown_convert/code.css +0 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/markdown_convert/modules/__init__.py +0 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/markdown_convert/modules/resources.py +0 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/markdown_convert/modules/utils.py +0 -0
- {markdown_convert-1.2.17 → markdown_convert-1.2.18}/markdown_convert/modules/validate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: markdown_convert
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.18
|
|
4
4
|
Summary: Convert Markdown files to PDF from your command line.
|
|
5
5
|
Project-URL: homepage, https://github.com/Julynx/markdown_convert
|
|
6
6
|
Author-email: Julio Cabria <juliocabria@tutanota.com>
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
/* -- Standard margins */
|
|
3
|
+
--top-margin: 0.5em;
|
|
4
|
+
--bottom-margin: 0.5em;
|
|
5
|
+
--left-margin: 1.5em;
|
|
6
|
+
|
|
7
|
+
/* -- Small margins */
|
|
8
|
+
--left-margin-small: 1em;
|
|
9
|
+
|
|
10
|
+
/* -- Big margins */
|
|
11
|
+
--left-margin-big: 2em;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Document */
|
|
15
|
+
html {
|
|
16
|
+
font-size: 12px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
body {
|
|
20
|
+
margin: 0;
|
|
21
|
+
padding: 0;
|
|
22
|
+
font-family: "Segoe UI", "Ubuntu", "DejaVu Sans", "Liberation Sans", "Arial",
|
|
23
|
+
"sans-serif";
|
|
24
|
+
color: #333;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Headers and paragraphs */
|
|
28
|
+
h1,
|
|
29
|
+
h2,
|
|
30
|
+
h3,
|
|
31
|
+
h4,
|
|
32
|
+
h5 {
|
|
33
|
+
color: #333;
|
|
34
|
+
font-weight: 600;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
h1 {
|
|
38
|
+
margin-top: 0;
|
|
39
|
+
margin-bottom: var(--bottom-margin);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
h2,
|
|
43
|
+
h3,
|
|
44
|
+
h4,
|
|
45
|
+
h5,
|
|
46
|
+
p {
|
|
47
|
+
margin-top: var(--top-margin);
|
|
48
|
+
margin-bottom: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
h1 {
|
|
52
|
+
font-size: 2.4rem;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
h2 {
|
|
56
|
+
font-size: 2rem;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
h3 {
|
|
60
|
+
font-size: 1.6rem;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
h4 {
|
|
64
|
+
font-size: 1.4rem;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
h5 {
|
|
68
|
+
font-size: 1.2rem;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
p {
|
|
72
|
+
font-size: 1rem;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Links */
|
|
76
|
+
a {
|
|
77
|
+
color: #09f;
|
|
78
|
+
margin: 0;
|
|
79
|
+
vertical-align: baseline;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* Lists */
|
|
83
|
+
ul,
|
|
84
|
+
ol {
|
|
85
|
+
font-size: 1rem;
|
|
86
|
+
padding: 0;
|
|
87
|
+
margin-top: var(--top-margin);
|
|
88
|
+
margin-right: 0;
|
|
89
|
+
margin-bottom: var(--bottom-margin);
|
|
90
|
+
margin-left: var(--left-margin-big);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
ul ol,
|
|
94
|
+
ol ul,
|
|
95
|
+
ol ol,
|
|
96
|
+
ul ul {
|
|
97
|
+
margin-top: 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
li {
|
|
101
|
+
margin-top: var(--top-margin);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Code blocks */
|
|
105
|
+
pre {
|
|
106
|
+
padding: 0;
|
|
107
|
+
white-space: pre-wrap;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
code {
|
|
111
|
+
font-family: "JetBrains Mono", "Consolas", "Ubuntu Mono", "DejaVu Sans Mono",
|
|
112
|
+
"Liberation Mono", "Courier New", monospace;
|
|
113
|
+
font-size: 1rem;
|
|
114
|
+
background-color: #eee;
|
|
115
|
+
padding-left: 0.4em;
|
|
116
|
+
padding-right: 0.4em;
|
|
117
|
+
display: inline-block;
|
|
118
|
+
border-radius: 0.3em;
|
|
119
|
+
line-height: 1.5;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
h1 code,
|
|
123
|
+
h2 code,
|
|
124
|
+
h3 code,
|
|
125
|
+
h4 code,
|
|
126
|
+
h5 code {
|
|
127
|
+
font-size: 0.8em;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Quotes */
|
|
131
|
+
blockquote {
|
|
132
|
+
margin-top: var(--top-margin);
|
|
133
|
+
margin-left: var(--left-margin);
|
|
134
|
+
border-left: 4px solid #ccc;
|
|
135
|
+
padding-left: 0.5em;
|
|
136
|
+
color: #666;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
blockquote > blockquote {
|
|
140
|
+
margin-left: var(--left-margin-small);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/* Figures */
|
|
144
|
+
img {
|
|
145
|
+
display: block;
|
|
146
|
+
margin: 2em auto 1em auto;
|
|
147
|
+
max-width: 80%;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* -- Figure footer */
|
|
151
|
+
p > img + em {
|
|
152
|
+
text-align: center;
|
|
153
|
+
font-size: 1rem;
|
|
154
|
+
font-style: italic;
|
|
155
|
+
color: #666;
|
|
156
|
+
display: block;
|
|
157
|
+
margin: 1em auto 2em;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* Tables */
|
|
161
|
+
table {
|
|
162
|
+
font-size: 1rem;
|
|
163
|
+
font-family: inherit;
|
|
164
|
+
border-collapse: collapse;
|
|
165
|
+
margin-top: var(--top-margin);
|
|
166
|
+
text-align: left;
|
|
167
|
+
table-layout: auto;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
thead {
|
|
171
|
+
background-color: #eee;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
tbody {
|
|
175
|
+
color: #666;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
th,
|
|
179
|
+
td {
|
|
180
|
+
padding: 0.5em 0.75em;
|
|
181
|
+
border: 1px solid #ccc;
|
|
182
|
+
white-space: nowrap;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
col {
|
|
186
|
+
width: auto;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* Page breaks */
|
|
190
|
+
.pagebreak {
|
|
191
|
+
clear: both;
|
|
192
|
+
page-break-after: always;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.pagebreak + * {
|
|
196
|
+
margin-top: 0;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
section,
|
|
200
|
+
ol,
|
|
201
|
+
ul,
|
|
202
|
+
table,
|
|
203
|
+
blockquote,
|
|
204
|
+
code,
|
|
205
|
+
p,
|
|
206
|
+
h1,
|
|
207
|
+
h2,
|
|
208
|
+
h3,
|
|
209
|
+
h4,
|
|
210
|
+
h5 {
|
|
211
|
+
page-break-inside: avoid;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* Increase vertical padding for math elements with display=block */
|
|
215
|
+
math[display="block"] {
|
|
216
|
+
margin-top: 1em;
|
|
217
|
+
margin-bottom: 1em;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
math {
|
|
221
|
+
text-rendering: optimizeLegibility;
|
|
222
|
+
font-family: "Latin Modern Math", "Cambria Math", serif;
|
|
223
|
+
}
|
|
@@ -4,6 +4,7 @@ Author: @julynx
|
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
import os
|
|
7
|
+
import re
|
|
7
8
|
import time
|
|
8
9
|
from datetime import datetime
|
|
9
10
|
from pathlib import Path
|
|
@@ -11,12 +12,12 @@ from pathlib import Path
|
|
|
11
12
|
import markdown2
|
|
12
13
|
from playwright.sync_api import sync_playwright
|
|
13
14
|
|
|
14
|
-
from .resources import get_css_path, get_code_css_path, get_output_path
|
|
15
|
-
from .utils import drop_duplicates
|
|
16
15
|
from .constants import MD_EXTENSIONS
|
|
16
|
+
from .resources import get_code_css_path, get_css_path, get_output_path
|
|
17
|
+
from .utils import drop_duplicates
|
|
17
18
|
|
|
18
19
|
|
|
19
|
-
def _generate_pdf_with_playwright(html_content, output_path):
|
|
20
|
+
def _generate_pdf_with_playwright(html_content, output_path, *, css_content=None):
|
|
20
21
|
"""
|
|
21
22
|
Generate a PDF from HTML content using Playwright.
|
|
22
23
|
"""
|
|
@@ -24,6 +25,8 @@ def _generate_pdf_with_playwright(html_content, output_path):
|
|
|
24
25
|
browser = p.chromium.launch(headless=True)
|
|
25
26
|
page = browser.new_page()
|
|
26
27
|
page.set_content(html_content)
|
|
28
|
+
if css_content:
|
|
29
|
+
page.add_style_tag(content=css_content)
|
|
27
30
|
# Wait for any potential resources to load
|
|
28
31
|
page.wait_for_load_state("networkidle")
|
|
29
32
|
|
|
@@ -48,23 +51,37 @@ def _generate_pdf_with_playwright(html_content, output_path):
|
|
|
48
51
|
return pdf_bytes
|
|
49
52
|
|
|
50
53
|
|
|
51
|
-
def
|
|
54
|
+
def _get_css_content(css_sources):
|
|
52
55
|
"""
|
|
53
|
-
|
|
56
|
+
Get the CSS content from a list of CSS file paths.
|
|
54
57
|
|
|
55
58
|
Args:
|
|
56
|
-
html (str): HTML content.
|
|
57
59
|
css_sources (list): List of CSS file paths.
|
|
58
|
-
|
|
59
60
|
Returns:
|
|
60
|
-
|
|
61
|
+
str: Combined CSS content.
|
|
61
62
|
"""
|
|
62
63
|
css_buffer = ""
|
|
63
64
|
for css_file in css_sources:
|
|
64
65
|
css_buffer += Path(css_file).read_text(encoding="utf-8") + "\n"
|
|
66
|
+
return css_buffer
|
|
65
67
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
|
|
69
|
+
def _create_sections(html):
|
|
70
|
+
"""
|
|
71
|
+
Creates h2 sections, from the first h2 to the next h2, wrapping them in <section> tags
|
|
72
|
+
using regular expressions.
|
|
73
|
+
Args:
|
|
74
|
+
html (str): HTML content.
|
|
75
|
+
Returns:
|
|
76
|
+
HTML content with sections wrapped in <section> tags.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
pattern = re.compile(r"(<h2.*?>.*?</h2>)(.*?)(?=(<h2.*?>|$))", re.DOTALL)
|
|
80
|
+
|
|
81
|
+
def wrap_section(match):
|
|
82
|
+
return f"<section>\n{match.group(1)}\n{match.group(2)}\n</section>\n"
|
|
83
|
+
|
|
84
|
+
return pattern.sub(wrap_section, html)
|
|
68
85
|
|
|
69
86
|
|
|
70
87
|
def convert(
|
|
@@ -100,13 +117,17 @@ def convert(
|
|
|
100
117
|
|
|
101
118
|
try:
|
|
102
119
|
html = markdown2.markdown_path(md_path, extras=MD_EXTENSIONS)
|
|
103
|
-
html =
|
|
120
|
+
html = _create_sections(html)
|
|
104
121
|
|
|
105
122
|
if dump_html:
|
|
106
123
|
html_dump_path = Path(output_path).with_suffix(".html")
|
|
107
124
|
html_dump_path.write_text(html, encoding="utf-8")
|
|
108
125
|
|
|
109
|
-
_generate_pdf_with_playwright(
|
|
126
|
+
_generate_pdf_with_playwright(
|
|
127
|
+
html,
|
|
128
|
+
output_path,
|
|
129
|
+
css_content=_get_css_content(css_sources),
|
|
130
|
+
)
|
|
110
131
|
|
|
111
132
|
except Exception as exc:
|
|
112
133
|
raise RuntimeError(exc) from exc
|
|
@@ -129,7 +150,11 @@ def live_convert(md_path, css_path=None, output_path=None, *, extend_default_css
|
|
|
129
150
|
output_path = get_output_path(md_path, None)
|
|
130
151
|
|
|
131
152
|
live_converter = LiveConverter(
|
|
132
|
-
md_path,
|
|
153
|
+
md_path,
|
|
154
|
+
css_path,
|
|
155
|
+
output_path,
|
|
156
|
+
extend_default_css=extend_default_css,
|
|
157
|
+
loud=True,
|
|
133
158
|
)
|
|
134
159
|
live_converter.observe()
|
|
135
160
|
|
|
@@ -159,9 +184,13 @@ def convert_text(md_text, css_text=None, *, extend_default_css=True):
|
|
|
159
184
|
|
|
160
185
|
try:
|
|
161
186
|
html = markdown2.markdown(md_text, extras=MD_EXTENSIONS)
|
|
162
|
-
html =
|
|
187
|
+
html = _create_sections(html)
|
|
163
188
|
|
|
164
|
-
return _generate_pdf_with_playwright(
|
|
189
|
+
return _generate_pdf_with_playwright(
|
|
190
|
+
html,
|
|
191
|
+
None,
|
|
192
|
+
css_content=_get_css_content(css_sources),
|
|
193
|
+
)
|
|
165
194
|
|
|
166
195
|
except Exception as exc:
|
|
167
196
|
raise RuntimeError(exc) from exc
|
|
@@ -172,9 +201,7 @@ class LiveConverter:
|
|
|
172
201
|
Class to convert a markdown file to a pdf file and watch for changes.
|
|
173
202
|
"""
|
|
174
203
|
|
|
175
|
-
def __init__(
|
|
176
|
-
self, md_path, css_path, output_path, *, extend_default_css=True, loud=False
|
|
177
|
-
):
|
|
204
|
+
def __init__(self, md_path, css_path, output_path, *, extend_default_css=True, loud=False):
|
|
178
205
|
"""
|
|
179
206
|
Initialize the LiveConverter class.
|
|
180
207
|
|
|
@@ -234,10 +261,7 @@ class LiveConverter:
|
|
|
234
261
|
md_modified = self.get_last_modified_date(self.md_path)
|
|
235
262
|
css_modified = self.get_last_modified_date(self.css_path)
|
|
236
263
|
|
|
237
|
-
if
|
|
238
|
-
md_modified != self.md_last_modified
|
|
239
|
-
or css_modified != self.css_last_modified
|
|
240
|
-
):
|
|
264
|
+
if md_modified != self.md_last_modified or css_modified != self.css_last_modified:
|
|
241
265
|
|
|
242
266
|
self.write_pdf()
|
|
243
267
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "markdown_convert"
|
|
7
|
-
version = "1.2.
|
|
7
|
+
version = "1.2.18"
|
|
8
8
|
description = "Convert Markdown files to PDF from your command line."
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Julio Cabria", email = "juliocabria@tutanota.com" },
|
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
/* Font imports */
|
|
2
|
-
/* -- Cantarell Web */
|
|
3
|
-
@font-face {
|
|
4
|
-
font-family: "Cantarell Web";
|
|
5
|
-
font-style: italic;
|
|
6
|
-
font-weight: 400;
|
|
7
|
-
font-display: swap;
|
|
8
|
-
src: url(https://fonts.gstatic.com/s/cantarell/v17/B50LF7ZDq37KMUvlO015iZJnNKuiLA.woff2) format("woff2");
|
|
9
|
-
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF,
|
|
10
|
-
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
@font-face {
|
|
14
|
-
font-family: "Cantarell Web";
|
|
15
|
-
font-style: italic;
|
|
16
|
-
font-weight: 400;
|
|
17
|
-
font-display: swap;
|
|
18
|
-
src: url(https://fonts.gstatic.com/s/cantarell/v17/B50LF7ZDq37KMUvlO015iZJpNKs.woff2) format("woff2");
|
|
19
|
-
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
20
|
-
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
21
|
-
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
@font-face {
|
|
25
|
-
font-family: "Cantarell Web";
|
|
26
|
-
font-style: italic;
|
|
27
|
-
font-weight: 700;
|
|
28
|
-
font-display: swap;
|
|
29
|
-
src: url(https://fonts.gstatic.com/s/cantarell/v17/B50WF7ZDq37KMUvlO015iZrSEb6TDYsmgQ.woff2) format("woff2");
|
|
30
|
-
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF,
|
|
31
|
-
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
@font-face {
|
|
35
|
-
font-family: "Cantarell Web";
|
|
36
|
-
font-style: italic;
|
|
37
|
-
font-weight: 700;
|
|
38
|
-
font-display: swap;
|
|
39
|
-
src: url(https://fonts.gstatic.com/s/cantarell/v17/B50WF7ZDq37KMUvlO015iZrSEb6dDYs.woff2) format("woff2");
|
|
40
|
-
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
41
|
-
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
42
|
-
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
@font-face {
|
|
46
|
-
font-family: "Cantarell Web";
|
|
47
|
-
font-style: normal;
|
|
48
|
-
font-weight: 400;
|
|
49
|
-
font-display: swap;
|
|
50
|
-
src: url(https://fonts.gstatic.com/s/cantarell/v17/B50NF7ZDq37KMUvlO015gqJrLK8.woff2) format("woff2");
|
|
51
|
-
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF,
|
|
52
|
-
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
@font-face {
|
|
56
|
-
font-family: "Cantarell Web";
|
|
57
|
-
font-style: normal;
|
|
58
|
-
font-weight: 400;
|
|
59
|
-
font-display: swap;
|
|
60
|
-
src: url(https://fonts.gstatic.com/s/cantarell/v17/B50NF7ZDq37KMUvlO015jKJr.woff2) format("woff2");
|
|
61
|
-
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
62
|
-
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
63
|
-
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
@font-face {
|
|
67
|
-
font-family: "Cantarell Web";
|
|
68
|
-
font-style: normal;
|
|
69
|
-
font-weight: 700;
|
|
70
|
-
font-display: swap;
|
|
71
|
-
src: url(https://fonts.gstatic.com/s/cantarell/v17/B50IF7ZDq37KMUvlO01xN4d-HY6fFY8.woff2) format("woff2");
|
|
72
|
-
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF,
|
|
73
|
-
U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
@font-face {
|
|
77
|
-
font-family: "Cantarell Web";
|
|
78
|
-
font-style: normal;
|
|
79
|
-
font-weight: 700;
|
|
80
|
-
font-display: swap;
|
|
81
|
-
src: url(https://fonts.gstatic.com/s/cantarell/v17/B50IF7ZDq37KMUvlO01xN4d-E46f.woff2) format("woff2");
|
|
82
|
-
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
|
|
83
|
-
U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191,
|
|
84
|
-
U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/* -- JetBrains Mono */
|
|
88
|
-
@font-face {
|
|
89
|
-
font-family: "JetBrains Mono";
|
|
90
|
-
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-Bold-Italic.woff2") format("woff2"),
|
|
91
|
-
url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-Bold-Italic.woff") format("woff");
|
|
92
|
-
font-weight: 700;
|
|
93
|
-
font-style: italic;
|
|
94
|
-
font-display: swap;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
@font-face {
|
|
98
|
-
font-family: "JetBrains Mono";
|
|
99
|
-
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-Bold.woff2") format("woff2"),
|
|
100
|
-
url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-Bold.woff") format("woff");
|
|
101
|
-
font-weight: 700;
|
|
102
|
-
font-style: normal;
|
|
103
|
-
font-display: swap;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
@font-face {
|
|
107
|
-
font-family: "JetBrains Mono";
|
|
108
|
-
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-ExtraBold-Italic.woff2") format("woff2"),
|
|
109
|
-
url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-ExtraBold-Italic.woff") format("woff");
|
|
110
|
-
font-weight: 800;
|
|
111
|
-
font-style: italic;
|
|
112
|
-
font-display: swap;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
@font-face {
|
|
116
|
-
font-family: "JetBrains Mono";
|
|
117
|
-
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-ExtraBold.woff2") format("woff2"),
|
|
118
|
-
url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-ExtraBold.woff") format("woff");
|
|
119
|
-
font-weight: 800;
|
|
120
|
-
font-style: normal;
|
|
121
|
-
font-display: swap;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
@font-face {
|
|
125
|
-
font-family: "JetBrains Mono";
|
|
126
|
-
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-Italic.woff2") format("woff2"),
|
|
127
|
-
url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-Italic.woff") format("woff");
|
|
128
|
-
font-weight: 400;
|
|
129
|
-
font-style: italic;
|
|
130
|
-
font-display: swap;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
@font-face {
|
|
134
|
-
font-family: "JetBrains Mono";
|
|
135
|
-
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-Medium-Italic.woff2") format("woff2"),
|
|
136
|
-
url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-Medium-Italic.woff") format("woff");
|
|
137
|
-
font-weight: 500;
|
|
138
|
-
font-style: italic;
|
|
139
|
-
font-display: swap;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
@font-face {
|
|
143
|
-
font-family: "JetBrains Mono";
|
|
144
|
-
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-Medium.woff2") format("woff2"),
|
|
145
|
-
url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-Medium.woff") format("woff");
|
|
146
|
-
font-weight: 500;
|
|
147
|
-
font-style: normal;
|
|
148
|
-
font-display: swap;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
@font-face {
|
|
152
|
-
font-family: "JetBrains Mono";
|
|
153
|
-
src: url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff2/JetBrainsMono-Regular.woff2") format("woff2"),
|
|
154
|
-
url("https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono/web/woff/JetBrainsMono-Regular.woff") format("woff");
|
|
155
|
-
font-weight: 400;
|
|
156
|
-
font-style: normal;
|
|
157
|
-
font-display: swap;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/* Print media css */
|
|
161
|
-
@page {
|
|
162
|
-
size: A4;
|
|
163
|
-
margin: 2.54cm;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
:root {
|
|
167
|
-
/* -- Standard margins */
|
|
168
|
-
--top-margin: 1em;
|
|
169
|
-
--left-margin: 1.5em;
|
|
170
|
-
|
|
171
|
-
/* -- Small margins */
|
|
172
|
-
--left-margin-small: 1em;
|
|
173
|
-
|
|
174
|
-
/* -- Big margins */
|
|
175
|
-
--left-margin-big: 2em;
|
|
176
|
-
--bottom-margin-big: 0.5em;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/* Document */
|
|
180
|
-
html {
|
|
181
|
-
font-size: 10px;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
body {
|
|
185
|
-
margin: 0;
|
|
186
|
-
padding: 0;
|
|
187
|
-
font-family: "Cantarell Web", "Cantarell", sans-serif;
|
|
188
|
-
color: #333;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/* Headers and paragraphs */
|
|
192
|
-
h1,
|
|
193
|
-
h2,
|
|
194
|
-
h3,
|
|
195
|
-
h4,
|
|
196
|
-
h5 {
|
|
197
|
-
color: #333;
|
|
198
|
-
font-weight: 400;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
h1 {
|
|
202
|
-
margin-top: 0;
|
|
203
|
-
margin-bottom: var(--bottom-margin-big);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
h2,
|
|
207
|
-
h3,
|
|
208
|
-
h4,
|
|
209
|
-
h5,
|
|
210
|
-
p {
|
|
211
|
-
margin-top: var(--top-margin);
|
|
212
|
-
margin-bottom: 0;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
h1 {
|
|
216
|
-
font-size: 4.8rem;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
h2 {
|
|
220
|
-
font-size: 3.6rem;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
h3 {
|
|
224
|
-
font-size: 2.4rem;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
h4 {
|
|
228
|
-
font-size: 1.8rem;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
h5 {
|
|
232
|
-
font-size: 1.4rem;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
p {
|
|
236
|
-
font-size: 1.2rem;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/* Links */
|
|
240
|
-
a {
|
|
241
|
-
color: #09f;
|
|
242
|
-
margin: 0;
|
|
243
|
-
vertical-align: baseline;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/* Lists */
|
|
247
|
-
ul,
|
|
248
|
-
ol {
|
|
249
|
-
font-size: 1.2rem;
|
|
250
|
-
padding: 0;
|
|
251
|
-
margin-top: var(--top-margin);
|
|
252
|
-
margin-right: 0;
|
|
253
|
-
margin-bottom: var(--bottom-margin);
|
|
254
|
-
margin-left: var(--left-margin-big);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
ul ol,
|
|
258
|
-
ol ul,
|
|
259
|
-
ol ol,
|
|
260
|
-
ul ul {
|
|
261
|
-
margin-top: 0;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
li {
|
|
265
|
-
margin-top: 0.5rem;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/* Code blocks */
|
|
269
|
-
pre {
|
|
270
|
-
padding: 0;
|
|
271
|
-
white-space: pre-wrap;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
code {
|
|
275
|
-
font-family: "JetBrains Mono", "Courier New", Courier, monospace;
|
|
276
|
-
font-size: 1rem;
|
|
277
|
-
background-color: #eee;
|
|
278
|
-
padding-left: 0.4em;
|
|
279
|
-
padding-right: 0.4em;
|
|
280
|
-
display: inline-block;
|
|
281
|
-
border-radius: 0.3em;
|
|
282
|
-
line-height: 1.5;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
h1 code,
|
|
286
|
-
h2 code,
|
|
287
|
-
h3 code,
|
|
288
|
-
h4 code,
|
|
289
|
-
h5 code {
|
|
290
|
-
font-size: 0.8em;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
/* Quotes */
|
|
294
|
-
blockquote {
|
|
295
|
-
margin-top: var(--top-margin);
|
|
296
|
-
margin-left: var(--left-margin);
|
|
297
|
-
max-width: 30em;
|
|
298
|
-
border-left: 4px solid #ccc;
|
|
299
|
-
padding-left: 0.5em;
|
|
300
|
-
color: #666;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
blockquote>blockquote {
|
|
304
|
-
margin-left: var(--left-margin-small);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
/* Figures */
|
|
308
|
-
img {
|
|
309
|
-
display: block;
|
|
310
|
-
margin: 2em auto 1em auto;
|
|
311
|
-
max-width: 80%;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/* -- Figure footer */
|
|
315
|
-
p>img+em {
|
|
316
|
-
text-align: center;
|
|
317
|
-
font-size: 1rem;
|
|
318
|
-
font-style: italic;
|
|
319
|
-
color: #666;
|
|
320
|
-
display: block;
|
|
321
|
-
margin: 1em auto 2em;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
/* Tables */
|
|
325
|
-
table {
|
|
326
|
-
font-size: 1rem;
|
|
327
|
-
border-collapse: collapse;
|
|
328
|
-
margin-top: var(--top-margin);
|
|
329
|
-
text-align: left;
|
|
330
|
-
table-layout: auto;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
thead {
|
|
334
|
-
background-color: #eee;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
tbody {
|
|
338
|
-
color: #666;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
th,
|
|
342
|
-
td {
|
|
343
|
-
padding: 0.5em 0.75em;
|
|
344
|
-
border: 1px solid #ccc;
|
|
345
|
-
white-space: nowrap;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
col {
|
|
349
|
-
width: auto;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
/* Page breaks */
|
|
353
|
-
.pagebreak {
|
|
354
|
-
clear: both;
|
|
355
|
-
page-break-after: always;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
.pagebreak+* {
|
|
359
|
-
margin-top: 0;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
li,
|
|
363
|
-
table,
|
|
364
|
-
blockquote,
|
|
365
|
-
code,
|
|
366
|
-
p,
|
|
367
|
-
h1,
|
|
368
|
-
h2,
|
|
369
|
-
h3,
|
|
370
|
-
h4,
|
|
371
|
-
h5 {
|
|
372
|
-
page-break-inside: avoid;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/* Increase vertical padding for math elements with display=block */
|
|
376
|
-
math[display="block"] {
|
|
377
|
-
margin-top: 1em;
|
|
378
|
-
margin-bottom: 1em;
|
|
379
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|