diff options
Diffstat (limited to 'v2/src/bin')
-rwxr-xr-x | v2/src/bin/absolute | 4 | ||||
-rwxr-xr-x | v2/src/bin/extract | 133 | ||||
-rwxr-xr-x | v2/src/bin/makemake | 137 | ||||
-rwxr-xr-x | v2/src/bin/url-for | 10 |
4 files changed, 145 insertions, 139 deletions
diff --git a/v2/src/bin/absolute b/v2/src/bin/absolute index ae25b43..6434219 100755 --- a/v2/src/bin/absolute +++ b/v2/src/bin/absolute @@ -62,6 +62,6 @@ done shift $((OPTIND - 1)) -. src/development/config.env +. src/lib/base-conf -printf 'https://%s%s' "$FQDN" "$(cat)" +printf 'https://%s%s' "$domain" "$(cat)" diff --git a/v2/src/bin/extract b/v2/src/bin/extract deleted file mode 100755 index 7bbcba7..0000000 --- a/v2/src/bin/extract +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/sh -set -eu - - -usage() { - cat <<-'EOF' - Usage: - extract -t TYPE FILENAME - extract -h - EOF -} - -help() { - cat <<-'EOF' - - Options: - -t TYPE the type of extraction to perform ("content" or "env") - -h, --help show this message - - FILENAME the name of the input file, also to be used as - URL. - - - Separate the content from the "frontmatter", and emit the - selected one, given the FILENAME. - - - Examples: - - Get the content: - - $ extract -t content src/file.md > src/file.entry-content - - - Get the "frontmatter": - - $ extract -t env src/f.md > src/f.entry-env - EOF -} - - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -TYPE='' -while getopts 't:h' flag; do - case "$flag" in - t) - TYPE="$OPTARG" - ;; - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - - -FILENAME="${1:-}" -eval "$(assert-arg "$FILENAME" 'FILENAME')" -eval "$(assert-arg "$TYPE" '-t TYPE')" - - -case "$TYPE" in - content) - . "${FILENAME%.md}.entry-env" - printf '%s\n' "$PREAMBLE" - awk ' - separator >= 2 - /^---$/ { separator++ } - ' "$FILENAME" - ;; - env) - cat src/development/config.env - awk ' - /^---$/ { - if (++separator > 1) { - exit - } else { - next - } - } - - { print } - ' "$FILENAME" - printf "FILENAME='%s'\n" "$FILENAME" - cat <<-'REAL_EOF' - TITLE="${TITLE:-$SITE_NAME}" - - URI_TITLE="$(printf '%s' "$TITLE" | uri)" - - URL="$( - printf '%s' "$FILENAME" | - sed \ - -e 's|^src/content/||' \ - -e 's|md$|html|' - )" - - PREAMBLE="$(cat <<EOF - # $TITLE - - <p class="timestamp"> - Posted on <time datetime="$DATE">$(LANG="$LANGUAGE" date -d "$DATE" "$DATE_FMT")</time> - </p> - EOF - )" - REAL_EOF - ;; - *) - printf 'Bad value for TYPE: "%s".\n\n' \ - "$TYPE" >&2 - usage >&2 - exit 2 - ;; -esac diff --git a/v2/src/bin/makemake b/v2/src/bin/makemake new file mode 100755 index 0000000..f4ab87a --- /dev/null +++ b/v2/src/bin/makemake @@ -0,0 +1,137 @@ +#!/bin/sh +set -eu + + +usage() { + cat <<-'EOF' + Usage: + makemake + makemake -h + EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message + + + Generate make(1) code for later evaluation by make(1). What + this scripts does is fill the gap where make(1) can't handle + globs and dynamic dependencies, and uses some ad-hoc scripts + to generate those. + EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + + + +varlist() { + printf '%s = \\\n' "$1" + sed \ + -e 's/^/ /' \ + -e 's/$/ \\/' + printf '\n' +} + +html_deps() { + "$@" | sed 's/^\(.*\)\.md$/\1.conf \1.content: \1.md/' + "$@" | sed 's/^\(.*\)\.md$/\1.html: \1.conf \1.content/' + printf '\n' +} + + +content_mds() { + find src/content/"$1"/ -type f -name '*.md' +} + +RESOURCES=' +pastebins +tils +' + +EXTENSIONS=' +.md +.conf +.content +.prehtml +.posthtml +.html +' + +for r in $RESOURCES; do + content_mds "$r" | varlist "$r".md + for e in $EXTENSIONS; do + if [ "$e" = '.md' ]; then + continue + fi + printf '%s%s = $(%s.md:.md=%s)\n' "$r" "$e" "$r" "$e" + done + printf '%s =' "$r" + for e in $EXTENSIONS; do + if [ "$e" = '.md' ]; then + continue + fi + printf ' $(%s%s)' "$r" "$e" + done + printf '\n' + html_deps content_mds "$r" + printf '\n' +done + +all_resources() { + echo $RESOURCES | tr ' ' '\n' +} + +all_vars() { + EXT="$1" + all_resources | + sed 's|^|$(|' | + sed "s|$|$EXT)|" | + varlist all-generated"$EXT" +} + +for e in $EXTENSIONS; do + all_vars "$e" +done +all_vars '' + + +git ls-files | + grep -v '^src/content/' | + varlist 'non-content' + +git ls-files src/content/ | + grep -v '\.md$' | + grep -Ev "src/content/($(all_resources | paste -sd'|'))/" | + varlist 'static-content' diff --git a/v2/src/bin/url-for b/v2/src/bin/url-for index 025a546..c31ff84 100755 --- a/v2/src/bin/url-for +++ b/v2/src/bin/url-for @@ -1,7 +1,6 @@ #!/bin/sh set -eu - usage() { cat <<-'EOF' Usage: @@ -69,9 +68,12 @@ while getopts 'h' flag; do done shift $((OPTIND - 1)) +. src/development/lib.sh + + FILE="${1:-}" -eval "$(assert-arg "$FILE" 'FILE')" +eval "$(assert_arg "$FILE" 'FILE')" -. src/development/config.env +. src/lib/base-conf -printf '%s/%s' "$BASE_URL" "$FILE" +printf '%s%s' "${base_url:-/}" "$FILE" |