Browse Source

Added remove_links.py script

pull/83/head
Jure Šorn 4 years ago
parent
commit
5772548643
2 changed files with 51 additions and 1 deletions
  1. 2
      pdf/README.md
  2. 50
      pdf/remove_links.py

2
pdf/README.md

@ -25,7 +25,7 @@ Printing to PDF
* Open `index.html` in text editor and first remove element `<p><br></p>` before the `<h1>Libraries</h1>`. * Open `index.html` in text editor and first remove element `<p><br></p>` before the `<h1>Libraries</h1>`.
* Then replace the index and footer with contents of `pdf/index_for_pdf_print.html` file. * Then replace the index and footer with contents of `pdf/index_for_pdf_print.html` file.
* Disable internet connection and open the file in Chrome with 'Cache killer' extension enabled. * Disable internet connection and open the file in Chrome with 'Cache killer' extension enabled.
* Change all links in text to normal text and optionally add a page number in brackets like that: '(p. <num>)'. Links can be found with this regex: `<strong>.*a href.*</strong>`.
* Change all links in text to normal text and add a page number in brackets like that: '(p. <num>)' by running 'pdf/remove_links.py' (Links can be found with this regex: `<strong>.*a href.*</strong>`).
* Save and open `index.html` in Chrome. * Save and open `index.html` in Chrome.
* Change brightness of elements by right clicking on them and selecting inspect. Then click on the rectangle that represents color and toggle the color space to HSLA by clicking on the button with two vertical arrows. * Change brightness of elements by right clicking on them and selecting inspect. Then click on the rectangle that represents color and toggle the color space to HSLA by clicking on the button with two vertical arrows.
* Change lightness (L) percentage to: * Change lightness (L) percentage to:

50
pdf/remove_links.py

@ -0,0 +1,50 @@
#!/usr/bin/env python3
#
# Usage: ./remove_links.py
# Removes links from index.html and adds page numbers in brackets instead (p. XX).
from pathlib import Path
MATCHES = {
'<strong>Module <a href="#operator">operator</a> provides functions itemgetter() and mul() that offer the same functionality as <a href="#lambda">lambda</a> expressions above.</strong>': '<strong>Module operator (p. 31) provides functions itemgetter() and mul() that offer the same functionality as lambda expressions above.</strong>',
'<strong><code class="python hljs"><span class="hljs-string">\'!r\'</span></code> calls object\'s <a href="#class">repr()</a> method, instead of <a href="#class">str()</a>, to get a string.</strong>': '<strong><code class="python hljs"><span class="hljs-string">\'!r\'</span></code> calls object\'s repr() method, instead of str(), to get a string (p. 14).</strong>',
'<strong>Default_factory can be any <a href="#callable">callable</a>.</strong>': '<strong>Default_factory can be any callable (p. 17).</strong>',
'<strong>Iterators returned by the <a href="#iterator">iter()</a> function, such as list_iterator and set_iterator.</strong>': '<strong>Iterators returned by the iter() function, such as list_iterator and set_iterator (p. 3).</strong>',
'<strong>Objects returned by the <a href="#itertools">itertools</a> module, such as count, repeat and cycle.</strong>': '<strong>Objects returned by the itertools module, such as count, repeat and cycle (p. 3).</strong>',
'<strong>Generators returned by the <a href="#generator">generator functions</a> and <a href="#comprehensions">generator expressions</a>.</strong>': '<strong>Generators returned by the generator functions (p. 4) and generator expressions (p. 11).</strong>',
'<strong>File objects returned by the <a href="#open">open()</a> function, etc.</strong>': '<strong>File objects returned by the open() function (p. 22), etc.</strong>',
'<strong>Another solution in this particular case is to use built-in functions and_() and or_() from the module <a href="#operator">operator</a>.</strong>': '<strong>Another solution in this particular case is to use built-in functions and_() and or_() from the module operator (p. 31).</strong>',
'<strong>Functions report OS related errors by raising either OSError or one of its <a href="#exceptions-1">subclasses</a>.</strong>': '<strong>Functions report OS related errors by raising OSError or one of its subclasses (p. 23).</strong>',
'<strong>Bools will be stored and returned as ints and dates as <a href="#encode">ISO formatted strings</a>.</strong>': '<strong>Bools will be stored and returned as ints and dates as ISO formatted strings (p. 9).</strong>',
'<strong>Asyncio module also provides its own <a href="#queue">Queue</a>, <a href="#semaphoreeventbarrier">Event</a>, <a href="#lock">Lock</a> and <a href="#semaphore-event-barrier">Semaphore</a> classes.</strong>': '<strong>Asyncio module also provides its own Queue, Event, Lock and Semaphore classes (p. 30).</strong>',
}
def main():
index_path = Path('..', 'index.html')
lines = read_file(index_path)
out = ''.join(lines)
for from_, to_ in MATCHES.items():
out = out.replace(from_, to_, 1)
write_to_file(index_path, out)
###
## UTIL
#
def read_file(filename):
p = Path(__file__).resolve().parent / filename
with open(p, encoding='utf-8') as file:
return file.readlines()
def write_to_file(filename, text):
p = Path(__file__).resolve().parent / filename
with open(p, 'w', encoding='utf-8') as file:
file.write(text)
if __name__ == '__main__':
main()
Loading…
Cancel
Save