diff options
Diffstat (limited to '')
-rwxr-xr-x | v2/src/bin/extract | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/v2/src/bin/extract b/v2/src/bin/extract new file mode 100755 index 0000000..ce4b115 --- /dev/null +++ b/v2/src/bin/extract @@ -0,0 +1,103 @@ +#!/bin/sh +set -eu + + +usage() { + cat <<-'EOF' + Usage: + extract -t TYPE < STDIN + extract -h + EOF +} + +help() { + cat <<-'EOF' + + Options: + -t TYPE the type of extraction to perform ("content" or "env") + -h, --help show this message + + + Separate the content from the "frontmatter", and emit the + selected one. + + + 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)) + + +eval "$(assert-arg "$TYPE" '-t TYPE')" + + +case "$TYPE" in + content) + awk ' + separator >= 2 + /^---$/ { separator++ } + ' + ;; + env) + awk ' + /^---$/ { + if (++separator > 1) { + exit + } else { + next + } + } + + { print } + ' + ;; + *) + printf 'Bad value for TYPE: "%s".\n\n' \ + "$TYPE" >&2 + usage >&2 + exit 2 + ;; +esac |