| #!/usr/bin/env bash |
| |
| # Format in-tree documentation for posting to MDN. |
| # See js/src/doc/README.md for general usage information. |
| # |
| # Usage: |
| # |
| # ./format.sh [--mdn] SOURCEDIR OUTPUTDIR |
| # |
| # Pages are tagged with the current Mercurial parent changeset ID. |
| # |
| # Normally, the generated HTML includes appropriate headers for in-place |
| # viewing, and the links are set up to allow the files to refer to each |
| # other where they're placed in OUTPUTDIR. However, if the --mdn flag is |
| # given, we omit non-body elements from the HTML (which seems to be what |
| # MDN prefers), and generate links to work with the URLs at which the pages |
| # will be published on MDN. |
| |
| set -eu |
| |
| progname=$(basename $0) |
| lib=$(cd $(dirname $0)/lib; pwd) |
| |
| # If we're producing text meant to be reviewed locally, then ask Pandoc to |
| # produce standalone HTML files (which include text encoding metadata and |
| # other helpful things). |
| standalone_arg=--standalone |
| |
| # If we're producing text for MDN, then generate links using the wiki URLs. |
| mdn_arg= |
| |
| while true; do |
| case "${1-}" in |
| '--mdn') |
| mdn_arg=--mdn |
| standalone_arg= |
| shift |
| ;; |
| *) |
| break |
| ;; |
| esac |
| done |
| |
| sourcedir=$1 |
| outputdir=$2 |
| |
| config=$sourcedir/config.sh |
| if ! [ -f "$config" ]; then |
| echo "SOURCEDIR doesn't seem to contain a 'config.sh' file: $sourcedir" >&2 |
| exit 1 |
| fi |
| |
| export JS_DOC_HG_IDENTIFY="$(hg identify | sed -e 's/ .*$//')" |
| |
| # Compute the name of the source directory relative to the hg root, for the |
| # "this text computed from..." message. |
| hg_relative_sourcedir=$((cd $sourcedir; pwd) | sed -e "s|$(hg root)/||") |
| |
| checked_pandoc=false |
| |
| source $lib/dummy-config.sh |
| |
| markdown() { |
| INPUT_FILE=$1 |
| URL=$BASE_URL$2 |
| |
| if ! $checked_pandoc; then |
| if ! pandoc -v > /dev/null; then |
| echo "$progname: This script uses the 'pandoc' formatter, but that doesn't seem" >&2 |
| echo "to be installed." >&2 |
| exit 1 |
| fi |
| checked_pandoc=true |
| fi |
| |
| local file=$sourcedir/$INPUT_FILE |
| if ! [ -f "$file" ]; then |
| echo "$progname: Can't find markdown file $file, mentioned by $config" >&2 |
| exit 1 |
| fi |
| |
| local output_file=$outputdir/${INPUT_FILE/md/html} |
| |
| mkdir -p $(dirname "$output_file") |
| pandoc $standalone_arg \ |
| -f markdown --smart -t html \ |
| "$file" \ |
| <("$lib/make-bibliography.sh" $mdn_arg "$config" "$URL") \ |
| -o "$output_file" |
| |
| "$lib/make-watermark.sh" "$output_file" "$hg_relative_sourcedir/$INPUT_FILE" >> "$output_file" |
| } |
| |
| resource() { |
| local label=$1 file=$2 url=$3 |
| ln -f $sourcedir/$file $outputdir/$file |
| } |
| |
| source "$config" |