diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 584dd30ce..6d79feb92 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -128,6 +128,7 @@ create_doc: artifacts: paths: - Documentation/doc.pdf + - Documentation/doc.html script: - apt-get update - apt-get install -y diff-pdf-wx @@ -146,6 +147,7 @@ create_doc: git commit -m "Update doc.pdf" git push --push-option="ci.skip" gitlab_origin HEAD:$CI_COMMIT_BRANCH fi + - make doc.html create_doxygen: image: git.physik.uni-wuerzburg.de:25812/z03/pdi/debian:bookworm-buildd diff --git a/Documentation/Makefile b/Documentation/Makefile new file mode 100644 index 000000000..038f18535 --- /dev/null +++ b/Documentation/Makefile @@ -0,0 +1,14 @@ +.PHONY: doc.pdf doc.html + +doc.pdf: + latexmk -pdf doc.tex + +doc.html: + pandoc doc.tex -o doc.html \ + --metadata title="ALF Documentaion" \ + --mathjax \ + -H header-mathjax.html \ + --standalone \ + --toc \ + --css=pandoc.css \ + --number-sections diff --git a/Documentation/header-mathjax.html b/Documentation/header-mathjax.html new file mode 100644 index 000000000..286bd7168 --- /dev/null +++ b/Documentation/header-mathjax.html @@ -0,0 +1,2 @@ + + diff --git a/Documentation/html-process-images.py b/Documentation/html-process-images.py new file mode 100644 index 000000000..69a0eda66 --- /dev/null +++ b/Documentation/html-process-images.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +from bs4 import BeautifulSoup +import subprocess +from glob import glob + +with open("doc.html", "r", encoding="utf-8") as f: + html = f.read() + +soup = BeautifulSoup(html, "html.parser") + +imgs = [] + +for tag in soup.find_all("embed", src=True): + if tag["src"].lower().endswith(".pdf"): + imgs.append(tag["src"]) + +for img in imgs: + files = glob(f'**/{img}', recursive=True) + if len(files) != 1: + print(f'Could not find {img}: {files}') + continue + subprocess.run(["pdftocairo", "-png", "-singlefile", f'../{files[0]}'], cwd='html') + html = html.replace(img, img.split('/')[-1].replace('.pdf', '.png')) + +subprocess.run(["pdftocairo", "-png", "-singlefile", '../Figures/U_Profile.pdf'], cwd='html') +html = html.replace('U_profile.pdf', 'U_Profile.png') + + +with open("html/doc.html", "w", encoding="utf-8") as f: + f.write(html) diff --git a/Documentation/pandoc.css b/Documentation/pandoc.css new file mode 100644 index 000000000..137b05db6 --- /dev/null +++ b/Documentation/pandoc.css @@ -0,0 +1,365 @@ +/* + * Stylesheet for pandoc-generated doc.html. + * Taken in most parts from https://gist.github.com/killercup/5917178 + */ + + #TOC { + position: fixed; + top: 0; + left: 0; + width: 250px; + height: 100%; + overflow-y: auto; + background: #f0f0f0; + padding: 1em; + border-right: 1px solid #ccc; + box-shadow: 2px 0 5px rgba(0,0,0,0.1); +} + +#TOC h1 { + font-size: 1.2em; + margin-top: 0; +} + +#TOC ul { + list-style: none; + padding-left: 0; +} + +#TOC li { + margin: 0.3em 0; +} + +#TOC a { + text-decoration: none; + color: #333; +} + +#TOC a:hover { + text-decoration: underline; +} + +html { + font-size: 100%; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + color: #444; + font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; + font-size: 12px; + line-height: 1.7; + padding: 1em; + margin: auto; + max-width: 52em; + background: #fefefe; +} + +a { + color: #0645ad; + text-decoration: none; +} + +a:visited { + color: #0b0080; +} + +a:hover { + color: #06e; +} + +a:active { + color: #faa700; +} + +a:focus { + outline: thin dotted; +} + +*::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +*::selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +a::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +a::selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +p { + margin: 1em 0; +} + +img { + max-width: 100%; +} + +h1, h2, h3, h4, h5, h6 { + color: #111; + line-height: 125%; + margin-top: 2em; + font-weight: normal; +} + +h4, h5, h6 { + font-weight: bold; +} + +h1 { + font-size: 2.5em; +} + +h2 { + font-size: 2em; +} + +h3 { + font-size: 1.5em; +} + +h4 { + font-size: 1.2em; +} + +h5 { + font-size: 1em; +} + +h6 { + font-size: 0.9em; +} + +blockquote { + color: #666666; + margin: 0; + padding-left: 3em; + border-left: 0.5em #EEE solid; +} + +hr { + display: block; + height: 2px; + border: 0; + border-top: 1px solid #aaa; + border-bottom: 1px solid #eee; + margin: 1em 0; + padding: 0; +} + +pre, code, kbd, samp { + color: #000; + font-family: monospace, monospace; + _font-family: 'courier new', monospace; + font-size: 0.98em; +} + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +b, strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +ins { + background: #ff9; + color: #000; + text-decoration: none; +} + +mark { + background: #ff0; + color: #000; + font-style: italic; + font-weight: bold; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +ul, ol { + margin: 1em 0; + padding: 0 0 0 2em; +} + +li p:last-child { + margin-bottom: 0; +} + +ul ul, ol ol { + margin: .3em 0; +} + +dl { + margin-bottom: 1em; +} + +dt { + font-weight: bold; + margin-bottom: .8em; +} + +dd { + margin: 0 0 .8em 2em; +} + +dd:last-child { + margin-bottom: 0; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; + vertical-align: middle; +} + +figure { + display: block; + text-align: center; + margin: 1em 0; +} + +figure img { + border: none; + margin: 0 auto; +} + +figcaption { + font-size: 0.8em; + font-style: italic; + margin: 0 0 .8em; +} + +table { + margin-bottom: 2em; + border-bottom: 1px solid #ddd; + border-right: 1px solid #ddd; + border-spacing: 0; + border-collapse: collapse; +} + +table th { + padding: .2em 1em; + background-color: #eee; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; +} + +table td { + padding: .2em 1em; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; + vertical-align: top; +} + +.author { + font-size: 1.2em; + text-align: center; +} + +@media only screen and (min-width: 480px) { + body { + font-size: 14px; + } +} +@media only screen and (min-width: 768px) { + body { + font-size: 16px; + } +} +@media print { + * { + background: transparent !important; + color: black !important; + filter: none !important; + -ms-filter: none !important; + } + + body { + font-size: 12pt; + max-width: 100%; + } + + a, a:visited { + text-decoration: underline; + } + + hr { + height: 1px; + border: 0; + border-bottom: 1px solid black; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { + content: ""; + } + + pre, blockquote { + border: 1px solid #999; + padding-right: 1em; + page-break-inside: avoid; + } + + tr, img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + @page :left { + margin: 15mm 20mm 15mm 10mm; +} + + @page :right { + margin: 15mm 10mm 15mm 20mm; +} + + p, h2, h3 { + orphans: 3; + widows: 3; + } + + h2, h3 { + page-break-after: avoid; + } +}