about summary refs log tree commit diff homepage
path: root/_libs/minify
diff options
context:
space:
mode:
Diffstat (limited to '_libs/minify')
-rwxr-xr-x_libs/minify39
1 files changed, 39 insertions, 0 deletions
diff --git a/_libs/minify b/_libs/minify
new file mode 100755
index 0000000..67634a3
--- /dev/null
+++ b/_libs/minify
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+# Minify HTML and CSS, patch HTML and remove JS
+# Copyright (C) 2021  Nguyễn Gia Phong
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+import re
+from contextlib import suppress
+from pathlib import Path
+from shutil import rmtree
+
+from css_html_js_minify import html_minify, process_single_css_file
+
+FOOTNOTES_START = re.compile('(<p>)?\s*<table')
+FOOTNOTES_END = re.compile('</table>\s*(</p>)?')
+
+
+def fix_footnotes(html):
+    """Work around https://github.com/tlienart/Franklin.jl/issues/936"""
+    return FOOTNOTES_START.sub('<table', FOOTNOTES_END.sub('</table>', html))
+
+
+site = Path(__file__).parent.parent / '__site'
+process_single_css_file(site/'css'/'style.css', overwrite=True)
+for html in site.rglob('*.html'):
+    print('Minifying and fixing up', html)
+    html.write_text(fix_footnotes(html_minify(html.read_text())))
+with suppress(FileNotFoundError): rmtree(site/'libs')