#!/usr/bin/env bash if [[ $DEBUG != "" ]]; then set -x fi set -o errexit set -o pipefail if ! [ -x node_modules/.bin/marked-man ]; then ps=0 if [ -f .building_marked-man ]; then pid=$(cat .building_marked-man) ps=$(ps -p $pid | grep $pid | wc -l) || true fi if [ -f .building_marked-man ] && [ $ps != 0 ]; then while [ -f .building_marked-man ]; do sleep 1 done else # a race to see which make process will be the one to install marked-man echo $$ > .building_marked-man sleep 1 if [ $(cat .building_marked-man) == $$ ]; then make node_modules/.bin/marked-man rm .building_marked-man else while [ -f .building_marked-man ]; do sleep 1 done fi fi fi if ! [ -x node_modules/.bin/marked ]; then ps=0 if [ -f .building_marked ]; then pid=$(cat .building_marked) ps=$(ps -p $pid | grep $pid | wc -l) || true fi if [ -f .building_marked ] && [ $ps != 0 ]; then while [ -f .building_marked ]; do sleep 1 done else # a race to see which make process will be the one to install marked echo $$ > .building_marked sleep 1 if [ $(cat .building_marked) == $$ ]; then make node_modules/.bin/marked rm .building_marked else while [ -f .building_marked ]; do sleep 1 done fi fi fi src=$1 dest=$2 name=$(basename ${src%.*}) date=$(date -u +'%Y-%m-%d %H:%M:%S') version=$(node cli.js -v) mkdir -p $(dirname $dest) html_replace_tokens () { local url=$1 sed "s|@NAME@|$name|g" \ | sed "s|@DATE@|$date|g" \ | sed "s|@URL@|$url|g" \ | sed "s|@VERSION@|$version|g" \ | perl -p -e 's/]*)>([^\(]*\([0-9]\)) -- (.*?)<\/h1>/

\2<\/h1>

\3<\/p>/g' \ | perl -p -e 's/npm-npm/npm/g' \ | perl -p -e 's/([^"-])(npm-)?README(?!\.html)(\(1\))?/\1README<\/a>/g' \ | perl -p -e 's/<a href="[^"]+README.html">README<\/a><\/title>/<title>README<\/title>/g' \ | perl -p -e 's/([^"-])([^\(> ]+)(\(1\))/\1<a href="..\/cli\/\2.html">\2\3<\/a>/g' \ | perl -p -e 's/([^"-])([^\(> ]+)(\(3\))/\1<a href="..\/api\/\2.html">\2\3<\/a>/g' \ | perl -p -e 's/([^"-])([^\(> ]+)(\(5\))/\1<a href="..\/files\/\2.html">\2\3<\/a>/g' \ | perl -p -e 's/([^"-])([^\(> ]+)(\(7\))/\1<a href="..\/misc\/\2.html">\2\3<\/a>/g' \ | perl -p -e 's/\([1357]\)<\/a><\/h1>/<\/a><\/h1>/g' \ | (if [ $(basename $(dirname $dest)) == "doc" ]; then perl -p -e 's/ href="\.\.\// href="/g' else cat fi) } man_replace_tokens () { sed "s|@VERSION@|$version|g" \ | perl -p -e 's/(npm\\-)?([a-zA-Z\\\.\-]*)\(1\)/npm help \2/g' \ | perl -p -e 's/(npm\\-)?([a-zA-Z\\\.\-]*)\(([57])\)/npm help \3 \2/g' \ | perl -p -e 's/(npm\\-)?([a-zA-Z\\\.\-]*)\(3\)/npm apihelp \2/g' \ | perl -p -e 's/npm\(1\)/npm help npm/g' \ | perl -p -e 's/npm\(3\)/npm apihelp npm/g' } case $dest in *.[1357]) ./node_modules/.bin/marked-man --roff $src \ | man_replace_tokens > $dest exit $? ;; *.html) url=${dest/html\//} (cat html/dochead.html && \ cat $src | ./node_modules/.bin/marked && cat html/docfoot.html)\ | html_replace_tokens $url \ > $dest exit $? ;; *) echo "Invalid destination type: $dest" >&2 exit 1 ;; esac