1
0
forked from GitHub/gf-core

Use Pandoc instead of txt2tags binary, much more configurable

This commit is contained in:
John J. Camilleri
2018-11-04 15:11:35 +01:00
parent f7dc9a6eaf
commit 99dad48961
7 changed files with 149 additions and 112 deletions

90
bin/_template.html Normal file
View File

@@ -0,0 +1,90 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
$for(author-meta)$
<meta name="author" content="$author-meta$" />
$endfor$
$if(date-meta)$
<meta name="dcterms.date" content="$date-meta$" />
$endif$
$if(keywords)$
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
$endif$
<title>$if(title-prefix)$$title-prefix$ $endif$$pagetitle$</title>
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
$if(quotes)$
q { quotes: "“" "”" "" ""; }
$endif$
</style>
$if(highlighting-css)$
<style type="text/css">
$highlighting-css$
</style>
$endif$
$for(css)$
<link rel="stylesheet" href="$css$" />
$endfor$
$if(math)$
$math$
$endif$
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
$for(header-includes)$
$header-includes$
$endfor$
</head>
<body>
<div class="container my-5">
$if(title)$
<header id="title-block-header">
<img src="$rel-root$/doc/Logos/gf1.svg" height="200px" class="float-md-right mb-3 mb-md-0" alt="GF Logo">
<h1 class="title">$title$</h1>
$if(subtitle)$
<p class="subtitle">$subtitle$</p>
$endif$
$for(author)$
<p class="author">$author$</p>
$endfor$
$if(date)$
<p class="date">$date$</p>
$endif$
</header>
$endif$
$if(toc)$
<nav id="$idprefix$TOC">
$table-of-contents$
</nav>
$endif$
$body$
</div><!-- .container -->
<footer class="bg-light mt-5 py-5">
<div class="container mb-5">
<div class="row">
<div class="col-6">
<a href="$rel-root$">Home</a>
</div>
<div>
<div>
</footer>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-7811807-3");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>

View File

@@ -3,38 +3,29 @@
### This script finds all .t2t (txt2tags) files and updates the corresponding
### .html file, if it is out-of-date.
config=".txt2tagsrc"
pre="_pre.html"
post="_post.html"
tmp="tmp.html"
# Path to this directory (not CWD)
# https://stackoverflow.com/a/246128/98600
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
find . -name '*.t2t' | while read t2t ; do
html="${t2t%.t2t}.html"
if [ "$t2t" -nt "$html" ] ; then
txt2tags --config-file="$config" --target=html "$t2t"
cat $pre $html $post > $tmp
mv $tmp $html
head1=$(head -n 1 "$t2t")
head2=$(tail -n+2 "$t2t" | head -n 1)
head3=$(tail -n+3 "$t2t" | head -n 1)
# Replace "headers" from t2t in final HTML
# Documentation here: https://txt2tags.org/userguide/headerarea
if [ -n "$head1" ] ; then
sed -i.bak "s/{{HEAD1}}/$head1/" "$html" && rm "$html.bak"
echo "$t2t"
relroot="$( dirname $t2t | sed -E 's/^.\///' | sed -E 's/[^/]+/../g' )"
pandoc \
--from=t2t \
--to=html5 \
--standalone \
--template="$DIR/_template.html" \
--css="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" \
--variable="rel-root:$relroot" \
"$t2t" \
--output="$html"
if [ -f "$html" ]; then
sed -i.bak "s/<table>/<table class=\"table\">/" "$html" && rm "$html.bak"
sed -i.bak -E "s/\`\`(.+)\`\`/<code>\1<\/code>/g" "$html" && rm "$html.bak"
else
sed -i.bak -E "s/<.+{{HEAD1}}.+>//" "$html" && rm "$html.bak"
continue # empty headers
fi
if [ -n "$head2" ] ; then
sed -i.bak "s/{{HEAD2}}/$head2/" "$html" && rm "$html.bak"
else
sed -i.bak -E "s/<.+{{HEAD2}}.+>//" "$html" && rm "$html.bak"
fi
if [ -n "$head3" ] ; then
sed -i.bak "s/{{HEAD3}}/$head3/" "$html" && rm "$html.bak"
else
sed -i.bak -E "s/<.+{{HEAD3}}.+>//" "$html" && rm "$html.bak"
echo "Error creating $html"
fi
fi
done