summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorJohn J. Camilleri <john@johnjcamilleri.com>2018-11-28 22:22:41 +0100
committerJohn J. Camilleri <john@johnjcamilleri.com>2018-11-28 22:22:41 +0100
commita7e43d872f5e612f93131f2d8caf811fbee9aa83 (patch)
tree1c7de5e7e7c886d6c12e0259c5385a393e4082d1 /bin
parentc6ec8cf302fef3d279a2d9e0a305f8b554978c7f (diff)
parentd6fc50b40b3b7d16ad9a7d147aedc81e73fe4581 (diff)
Merge branch 'new-website'
Diffstat (limited to 'bin')
-rw-r--r--bin/_template.html132
-rwxr-xr-xbin/clean_html8
-rwxr-xr-xbin/update_html117
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