Rework PDF script (#3654)
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -14,3 +14,7 @@ npm-debug.log
|
|||||||
# hosted at https://tldr-pages.github.io/assets/index.json
|
# hosted at https://tldr-pages.github.io/assets/index.json
|
||||||
pages/index.json
|
pages/index.json
|
||||||
index.json
|
index.json
|
||||||
|
|
||||||
|
# Generated PDF pages
|
||||||
|
scripts/pdf/*.html
|
||||||
|
scripts/pdf/tldr.pdf
|
||||||
|
@@ -11,21 +11,13 @@ This directory contains the script and related resources to generate a PDF copy
|
|||||||
## Highlights
|
## Highlights
|
||||||
|
|
||||||
- No LaTeX dependencies for generating the PDF.
|
- No LaTeX dependencies for generating the PDF.
|
||||||
|
- 3 available color-schemes: *Basic*, *Solarized Light* and *Solarized Dark*. More can be added easily through CSS.
|
||||||
- 3 available color-schemes- *Basic*, *Solarized Light* and *Solarized Dark*. More can be added easily through CSS.
|
|
||||||
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
The PDF is generated by first converting the markdown files to HTML, and then rendering those HTML files as PDF. It depends on the following libraries:
|
The PDF is generated by first converting the markdown files to HTML, and then rendering those HTML files as PDF. It depends on `markdown` and `weasyprint` libraries. To install the dependencies, run:
|
||||||
|
|
||||||
#### Python-Markdown
|
pip3 install -r requirements.txt
|
||||||
|
|
||||||
pip3 install markdown
|
|
||||||
|
|
||||||
#### WeasyPrint
|
|
||||||
|
|
||||||
pip3 install WeasyPrint
|
|
||||||
|
|
||||||
Make sure OS specific dependencies for WeasyPrint are installed by following the instructions [here](http://weasyprint.readthedocs.io/en/latest/install.html).
|
Make sure OS specific dependencies for WeasyPrint are installed by following the instructions [here](http://weasyprint.readthedocs.io/en/latest/install.html).
|
||||||
|
|
||||||
@@ -43,6 +35,3 @@ The color-schemes that can be specified are
|
|||||||
|
|
||||||
* `solarized-light`
|
* `solarized-light`
|
||||||
* `solarized-dark`
|
* `solarized-dark`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'PT_Serif-Web-Regular';
|
font-family: "PT Serif";
|
||||||
src: url('PT_Serif-Web-Regular.ttf') format('truetype');
|
src: url("pt-serif-web-regular.ttf") format("truetype");
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
@@ -11,23 +11,23 @@ code {
|
|||||||
color: darkslategrey;
|
color: darkslategrey;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h4, h2, ul {
|
h1, h2, h4, ul {
|
||||||
font-family: "PT_Serif-Web-Regular";
|
font-family: "PT Serif";
|
||||||
}
|
}
|
||||||
|
|
||||||
h1.titlemain {
|
.title-main {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 6em;
|
margin-top: 6em;
|
||||||
font-size: 350%;
|
font-size: 350%;
|
||||||
}
|
}
|
||||||
|
|
||||||
h4.titlesub {
|
.title-sub {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 120%;
|
font-size: 120%;
|
||||||
color: darkslategrey;
|
color: darkslategrey;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2.titledir {
|
.title-dir {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 8.2em;
|
margin-top: 8.2em;
|
||||||
font-size: 300%;
|
font-size: 300%;
|
||||||
|
@@ -32,37 +32,40 @@ def main(loc, colorscheme):
|
|||||||
oslist.sort()
|
oslist.sort()
|
||||||
|
|
||||||
# Required strings to create intermediate HTML files
|
# Required strings to create intermediate HTML files
|
||||||
header = "<html><head><link rel=stylesheet type=text/css href=" + colorscheme + ".css></head><body>\n"
|
header = '<!doctype html><html><head><meta charset="utf-8"><link rel="stylesheet" href="basic.css">'
|
||||||
|
if colorscheme != "basic":
|
||||||
|
header += '<link rel="stylesheet" href="' + colorscheme + '.css"></head><body>\n'
|
||||||
|
header += "</head><body>\n"
|
||||||
footer = "</body></html>"
|
footer = "</body></html>"
|
||||||
title_content = "<h1 class=titlemain>tldr pages</h1><h4 class=titlesub>Simplified and community driven man pages</h4></body></html>"
|
title_content = "<h1 class=title-main>tldr pages</h1><h4 class=title-sub>Simplified and community-driven man pages</h4></body></html>"
|
||||||
|
|
||||||
# Creating title page
|
# Creating title page
|
||||||
with open("title.html", 'w') as f:
|
with open("title.html", "w") as f:
|
||||||
f.write(header + title_content)
|
f.write(header + title_content)
|
||||||
|
|
||||||
group.append(HTML('title.html').render())
|
group.append(HTML("title.html").render())
|
||||||
|
|
||||||
for operating_sys in oslist:
|
for operating_sys in oslist:
|
||||||
|
|
||||||
i = 1
|
i = 1
|
||||||
|
|
||||||
# Required string to create directory title pages
|
# Required string to create directory title pages
|
||||||
dir_title = "<h2 class=titledir>" + operating_sys.capitalize() + "</h2></body></html>"
|
dir_title = "<h2 class=title-dir>" + operating_sys.capitalize() + "</h2></body></html>"
|
||||||
|
|
||||||
# Creating directory title page for current directory
|
# Creating directory title page for current directory
|
||||||
with open("dir_title.html", 'w') as os_html:
|
with open("dir_title.html", "w") as os_html:
|
||||||
os_html.write(header + dir_title)
|
os_html.write(header + dir_title)
|
||||||
|
|
||||||
group.append(HTML('dir_title.html').render())
|
group.append(HTML("dir_title.html").render())
|
||||||
|
|
||||||
# Creating a list of all md files in the current directory
|
# Creating a list of all md files in the current directory
|
||||||
for temp in glob.glob(os.path.join(loc, operating_sys, '*.md')):
|
for temp in glob.glob(os.path.join(loc, operating_sys, "*.md")):
|
||||||
allmd.append(temp)
|
allmd.append(temp)
|
||||||
|
|
||||||
# Sorting all filenames in the directory, to maintain the order of the PDF
|
# Sorting all filenames in the directory, to maintain the order of the PDF
|
||||||
allmd.sort()
|
allmd.sort()
|
||||||
|
|
||||||
#Conversion of md to HTML
|
# Conversion of Markdown to HTML
|
||||||
for md in allmd:
|
for md in allmd:
|
||||||
|
|
||||||
with open(md, "r") as inp:
|
with open(md, "r") as inp:
|
||||||
@@ -78,7 +81,7 @@ def main(loc, colorscheme):
|
|||||||
out.write(html)
|
out.write(html)
|
||||||
out.write(footer)
|
out.write(footer)
|
||||||
|
|
||||||
group.append(HTML('htmlout.html').render())
|
group.append(HTML("htmlout.html").render())
|
||||||
print("Rendered page {} of the directory {}".format(str(i), operating_sys))
|
print("Rendered page {} of the directory {}".format(str(i), operating_sys))
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
@@ -104,7 +107,7 @@ def main(loc, colorscheme):
|
|||||||
print("Error removing temporary file(s)")
|
print("Error removing temporary file(s)")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == "__main__":
|
||||||
|
|
||||||
# Unless specified otherwise by the user, this is the default colorscheme
|
# Unless specified otherwise by the user, this is the default colorscheme
|
||||||
colorscheme = "basic"
|
colorscheme = "basic"
|
||||||
|
2
scripts/pdf/requirements.txt
Normal file
2
scripts/pdf/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
markdown
|
||||||
|
weasyprint
|
@@ -1,18 +1,8 @@
|
|||||||
@font-face {
|
|
||||||
font-family: 'PT_Serif-Web-Regular';
|
|
||||||
src: url('PT_Serif-Web-Regular.ttf') format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-left: 2.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
code {
|
||||||
color: #b58900;
|
color: #b58900;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h4, ul {
|
h1, h2, h4, ul {
|
||||||
font-family: "PT_Serif-Web-Regular";
|
|
||||||
color: #93a1a1;
|
color: #93a1a1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,21 +10,6 @@ body {
|
|||||||
background-color: #002b36;
|
background-color: #002b36;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.title-sub {
|
||||||
h1.titlemain {
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 6em;
|
|
||||||
font-size: 350%;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4.titlesub {
|
|
||||||
text-align: center;
|
|
||||||
font-size: 120%;
|
|
||||||
color: #b58900;
|
color: #b58900;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2.titledir {
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 8.2em;
|
|
||||||
font-size: 300%;
|
|
||||||
}
|
|
@@ -1,18 +1,8 @@
|
|||||||
@font-face {
|
|
||||||
font-family: 'PT_Serif-Web-Regular';
|
|
||||||
src: url('PT_Serif-Web-Regular.ttf') format('truetype');
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin-left: 2.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
code {
|
||||||
color: #dc322f
|
color: #dc322f
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h4, ul {
|
h1, h2, h4, ul {
|
||||||
font-family: "PT_Serif-Web-Regular";
|
|
||||||
color: #586e75;
|
color: #586e75;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,20 +10,6 @@ body {
|
|||||||
background-color: #fdf6e3;
|
background-color: #fdf6e3;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1.titlemain {
|
.title-sub {
|
||||||
text-align: center;
|
|
||||||
margin-top: 6em;
|
|
||||||
font-size: 350%;
|
|
||||||
}
|
|
||||||
|
|
||||||
h4.titlesub {
|
|
||||||
text-align: center;
|
|
||||||
font-size: 120%;
|
|
||||||
color: #dc322f
|
color: #dc322f
|
||||||
}
|
}
|
||||||
|
|
||||||
h2.titledir {
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 8.2em;
|
|
||||||
font-size: 300%;
|
|
||||||
}
|
|
Reference in New Issue
Block a user