diff options
| -rwxr-xr-x | bin/extra/ladd | 156 | 
1 files changed, 156 insertions, 0 deletions
diff --git a/bin/extra/ladd b/bin/extra/ladd new file mode 100755 index 0000000..0b0679b --- /dev/null +++ b/bin/extra/ladd @@ -0,0 +1,156 @@ +#!/bin/sh +assume_yes=0 +verbose=0 + +die () +{ +	# always print errors +	if [ "$verbose" -eq 1 ] || echo "$1" | grep -q "^E:" +	then +		echo "$1" >&2 +	fi +} + +help () +{ +	local verbose=1 +	die "ladd [OPTION [ARG]...] [FILE]" +	die "\t-c CATEGORY\t\twill be uppercased" +	die "\t-d DESCRIPTION" +	die "\t-f FILE" +	die "\t-l LINK" +	die "\t-v\t\t\tverbose" +	die "\t-y\t\t\tassume yes" +} + +alias shiftt=' +if [ $# -gt 0 ] +then +	shift +else +	die "E: No argument provided." +	exit 1 +fi' + +ftest () +{ +	if [ ! -f "$1" ]; then +		die "E: '$1' not found." +		exit 1 +	fi +} + +# Main execution + +if [ $# -eq 0 ] +then +	help +	exit +fi +while [ $# -ne 0 ] +do +	case "$1" in +		'-c') +			shiftt +			category="$(echo "$1" | tr '[:lower:]' '[:upper:]')"  +			die "I: category -> '$category'" +			shiftt +			;; +		'-d') +			shiftt +			description="$1" +			die "I: description -> '$description'" +			shiftt +			;; +		'-f') +			shiftt +			test -n "$1" && +				ftest "$1" +			file="$1" +			shiftt +			die "I: file -> '$file'" +			;; +		'-l') +			shiftt +			link="$1" +			die "I: link -> '$link'" +			shiftt +			;; +		'-v') +			verbose=1 +			die "I: verbose -> $verbose" +			shiftt +			;; +		'-y') +			assume_yes=1 +			die "I: assume_yes -> $assume_yes" +			shiftt +			;; +		*) +			if [ ! "$file" ] +			then +				ftest "$1" +				file="$1" +				die "I: file -> '$file'" +				shiftt +			else +				die "E: not a valid argument." +				help +				exit 1 +			fi +			;; +	esac +done + +# Tests +# Check on file and/or link +if [ -z "$file" ] || [ -z "$link" ] +then +	die "E: no file and/or link supplied." +	exit 1 +fi +# Check on valid category +categories="$(pup -f "$file" -p 'h2 text{}' | +	tr '\n' ',' | sed 's/,$//')" +die "" +die "categories: $categories" +if ! echo "$categories" | grep -q "$category" +then +	die "E: '$category' is not a valid category." +fi +# Check on empty values +for var in category description +do +	eval value=\$$var +	if [ -z "$value" ] +	then +		die "W: $var is empty" +		if [ "$assume_yes" -eq 0 ] +		then +			die "W: are you sure you want to proceed? (Y/n)" +			echo -n ">" >&2 +			read input +			test "$input" = "n" && +				exit 1 +		fi +		eval $var="'UNDEFINED'" +		die "I: $var -> $(eval echo "\$$var")" +	fi +done +# Checks if the link has already been added +if grep -q "$link" "$file" +then +	die "E: link already in $file" +	exit 1 +fi + +# constructing the tag +tag="<li><a href=\"$link\">$link</a> - $description</li>" +die "tag: $tag" + +die "I: appending tag" +# use grep line numbers to add link after match of the category header +# header will have an <ul> element this one is used with -A 1 | tail -1 +sed -i "$(grep -n "<h2.*$category" -A 1 "$file" | +	tail -n 1 | +	cut -f 1 -d '-')a $tag" "$file"  | 
