diff options
| author | John J. Camilleri <john@johnjcamilleri.com> | 2018-11-28 22:22:41 +0100 |
|---|---|---|
| committer | John J. Camilleri <john@johnjcamilleri.com> | 2018-11-28 22:22:41 +0100 |
| commit | a7e43d872f5e612f93131f2d8caf811fbee9aa83 (patch) | |
| tree | 1c7de5e7e7c886d6c12e0259c5385a393e4082d1 /bin | |
| parent | c6ec8cf302fef3d279a2d9e0a305f8b554978c7f (diff) | |
| parent | d6fc50b40b3b7d16ad9a7d147aedc81e73fe4581 (diff) | |
Merge branch 'new-website'
Diffstat (limited to 'bin')
| -rw-r--r-- | bin/_template.html | 132 | ||||
| -rwxr-xr-x | bin/clean_html | 8 | ||||
| -rwxr-xr-x | bin/update_html | 117 |
3 files changed, 250 insertions, 7 deletions
diff --git a/bin/_template.html b/bin/_template.html new file mode 100644 index 000000000..9e966857a --- /dev/null +++ b/bin/_template.html @@ -0,0 +1,132 @@ +<!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="viewport" content="width=device-width, initial-scale=1.0" /> +$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> +$for(css)$ + <link rel="stylesheet" href="$css$" /> +$endfor$ + <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> + <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.2/css/all.css" integrity="sha384-/rXc/GQVaYpyDdyxK+ecHPVYJSN9bmVFBvjA/9eOB+pb3F2w2N6fc5qB9Ew5yIns" crossorigin="anonymous"> +$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-fluid my-5" style="max-width:1200px"> + +$if(title)$ +<header id="title-block-header"> +<a href="$rel-root$" title="Home"> + <img src="$rel-root$/doc/Logos/gf1.svg" height="200px" class="float-md-right mb-3 bg-white" alt="GF Logo"> +</a> +<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"> + <div class="row"> + + <div class="col-6 col-sm-3"> + <a href="$rel-root$"> + <i class="fas fa-home"></i> + Home + </a> + <h6 class="text-muted mt-3">Get started</h6> + <ul class="list-unstyled"> + <li><a href="https://www.youtube.com/watch?v=x1LFbDQhbso">Google Tech Talk</a></li> + <li><a href="http://cloud.grammaticalframework.org/">GF Cloud</a></li> + <li><a href="$rel-root$/doc/tutorial/gf-tutorial.html">Tutorial</a></li> + <li><a href="$rel-root$/download">Download GF</a></li> + </ul> + </div> + + <div class="col-6 col-sm-3"> + <h6 class="text-muted">Learn more</h6> + <ul class="list-unstyled"> + <li><a href="$rel-root$/gf-book">The GF Book</a></li> + <li><a href="$rel-root$/doc/gf-refman.html">Reference Manual</a></li> + <li><a href="$rel-root$/doc/gf-shell-reference.html">GF Shell Reference</a></li> + <li><a href="http://www.molto-project.eu/sites/default/files/MOLTO_D2.3.pdf">Best Practices</a></li> + <li><a href="$rel-root$/lib/doc/synopsis/index.html">RGL Library Synopsis</a></li> + </ul> + </div> + + <div class="col-6 col-sm-3"> + <h6 class="text-muted">Develop</h6> + <ul class="list-unstyled"> + <li><a href="$rel-root$/doc/gf-developers.html">Developers Guide</a></li> + <li><a href="http://hackage.haskell.org/package/gf/docs/PGF.html">PGF library API (Haskell runtime)</a></li> + <li><a href="$rel-root$/doc/runtime-api.html">PGF library API (C runtime)</a></li> + <li><a href="http://hackage.haskell.org/package/gf/docs/GF.html">GF compiler API</a></li> + <li><a href="$rel-root$/doc/gf-editor-modes.html">Text Editor Support</a></li> + </ul> + </div> + + <div class="col-6 col-sm-3"> + <h6 class="text-muted">Contribute</i> + </h6> + <ul class="list-unstyled"> + <li><a href="http://groups.google.com/group/gf-dev">Mailing List</a></li> + <li><a href="https://github.com/GrammaticalFramework/gf-core/issues">Issue Tracker</a></li> + <li><a href="$rel-root$/doc/gf-people.html">Authors</a></li> + <li><a href="http://school.grammaticalframework.org/2018/">Summer School</a></li> + </ul> + <h6 class="text-muted"> + Repositories + <i class="fab fa-github ml-1"></i> + </h6> + <ul class="list-unstyled"> + <li><a href="https://github.com/GrammaticalFramework/gf-core">GF Core</a></li> + <li><a href="https://github.com/GrammaticalFramework/gf-rgl">RGL</a></li> + <li><a href="https://github.com/GrammaticalFramework/gf-contrib">Contrib</a></li> + </ul> + </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> diff --git a/bin/clean_html b/bin/clean_html new file mode 100755 index 000000000..e2bf0e799 --- /dev/null +++ b/bin/clean_html @@ -0,0 +1,8 @@ +#!/bin/bash + +### This script finds all .t2t (txt2tags) files and deletes the corresponding html file + +find . -name '*.t2t' | while read t2t ; do + html="${t2t%.t2t}.html" + rm -f "$html" +done diff --git a/bin/update_html b/bin/update_html index 75f54b13e..ec82ec491 100755 --- a/bin/update_html +++ b/bin/update_html @@ -1,11 +1,114 @@ #!/bin/bash -### This script finds all .t2t (txt2tags) files and updates the corresponding -### .html file, if it is out-of-date. +# Path to directory where this script is +# 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 -thtml "$t2t" +# Render txt2tags into html file +# Arguments: +# 1. txt2tags source file, e.g. download/index.t2t +# 2. html target file, e.g. download/index.html +function render_t2t_html { + t2t="$1" + html="$2" + tmp="$2.tmp" + relroot="$( dirname $t2t | sed -E 's/^.\///' | sed -E 's/[^/]+/../g' )" + + # First render with txt2tags to handle pre/post processing + txt2tags \ + --target=html \ + --no-headers \ + --quiet \ + --outfile="$tmp" \ + --infile="$t2t" + + # Capture first 3 lines of t2t file: title, author, date + # Documentation here: https://txt2tags.org/userguide/headerarea + l1=$(head -n 1 "$t2t") + l2=$(tail -n+2 "$t2t" | head -n 1) + l3=$(tail -n+3 "$t2t" | head -n 1) + title= + author= + date= + if [ -n "$l1" ] ; then + title="$l1" + if [ -n "$l2" ] ; then author="$l2" ; fi + if [ -n "$l3" ] ; then date="$l3" ; fi + fi + + # Run txt2tag's HTML through Pandoc for cleanup + pandoc \ + --from=html \ + --to=html5 \ + --standalone \ + --template="$DIR/_template.html" \ + --variable="rel-root:$relroot" \ + --metadata="title:$title" \ + --metadata="author:$author" \ + --metadata="date:$date" \ + "$tmp" \ + --output="$html" + rm -f "$tmp" + + # Final post-processing + if [ -f "$html" ] ; then + sed -i.bak "s/<table/<table class=\"table\"/" "$html" && rm "$html.bak" + echo "$html" fi -done
\ No newline at end of file +} + +# Render markdown into html file +# Arguments: +# 1. markdown source file, e.g. download/index.md +# 2. html target filen, e.g. download/index.html +function render_md_html { + md="$1" + html="$2" + relroot="$( dirname $md | sed -E 's/^.\///' | sed -E 's/[^/]+/../g' )" + + pandoc \ + --from=markdown \ + --to=html5 \ + --standalone \ + --template="$DIR/_template.html" \ + --variable="rel-root:$relroot" \ + "$md" \ + --output="$html" + + # Final post-processing + if [ -f "$html" ] ; then + sed -i.bak "s/<table/<table class=\"table\"/" "$html" && rm "$html.bak" + echo "$html" + fi +} + +if [ $# -gt 0 ] ; then + # Render specific file(s) from args, ignoring dates + for file in "$@" ; do + ext="${file##*.}" + html="${file%.$ext}.html" + case $ext in + "md") + render_md_html "$file" "$html" + ;; + "t2t") + render_t2t_html "$file" "$html" + ;; + esac + done +else + # Render all files found in cwd and deeper if source is newer + find . -name '*.t2t' | while read file ; do + html="${file%.t2t}.html" + if [ "$file" -nt "$html" ] ; then + render_t2t_html "$file" "$html" + fi + done + find . -name '*.md' | while read file ; do + if [[ "$file" == *"README.md" ]] ; then continue ; fi + html="${file%.md}.html" + if [ "$file" -nt "$html" ] ; then + render_md_html "$file" "$html" + fi + done +fi |
