User:Scsbot/examples/addrhyme
Appearance
< User:Scsbot | examples
file="$1" rhyme="$2" rhymebase="Rhymes:English:" if test -z "$file" -o -z "$rhyme" then echo "arg count" >&2 exit 1 fi lang="English" # 1. find English section # 1a. Find level-2 headers l2hdrs=`grep -n '^== *[^=][^=]*==' $file` if test -z "$l2hdrs" then echo "no level 2 (language) headers" exit 1 fi nl=`echo "$l2hdrs" | grep -ic "^[1-9][0-9]*:== *$lang *=="` if test $nl -ne 1 then echo "article has $nl sections for $lang" exit 1 fi # find end of English section -- # either next level-2 header, or EOF li=`echo "$l2hdrs" | grep -n "^[1-9][0-9]*:== *$lang *==" | sed 's/:.*//'` # line in $l2hdrs el=`echo "$l2hdrs" | grep "^[1-9][0-9]*:== *$lang *==" | sed 's/:.*//'` # line in $file nl2=`echo "$l2hdrs" | wc -l` if test $li -lt $nl2 then li2=`expr $li + 1` eoe=`echo "$l2hdrs" | line $li2 | sed 's/:.*//'` eoe=`expr $eoe - 1` else eoe=`wc -l < $file` fi # now grab pronunciation lines between # 2. Find Pronunciation header(s) prohdrs=`line -f $el -t $eoe $file | grep -n '^==* *Pronunciation *='` needprohdr=no if test -z "$prohdrs" then echo "adding Pronunciation section" >&2 needprohdr=yes elif test `echo "$prohdrs" | wc -l` -gt 1 then echo "multiple Pronunciation sections in $lang section" exit 1 fi if test $needprohdr = no then # now find next header (any level) after target pronunciation header proline=`expr "$prohdrs" : '\([^:]*\)'` nxthdr=`line -f $el -t $eoe $file | grep -n '^=' | awk -F: "\\$1 > $proline {print; exit}"` if test -n "$nxthdr" then nxtline=`expr "$nxthdr" : '\([^:]*\)'` else nxtline=`expr $eoe - $el + 1 + 1` fi proline=`expr $el + $proline - 1` nxtline=`expr $el + $nxtline - 1` # echo "pronunciation line: $proline" # echo "next header line: $nxtline" # now count blank lines preceding $nxtline i=`expr $nxtline - 1` while test $i -gt $proline do if line $i $file | grep -q . then break fi i=`expr $i - 1` done else # If there's an Etymology section, insert after that. # Otherwise insert at beginning of English section. etyhdr=`line -f $el -t $eoe $file | grep -n '^==* *Etymology' | head -1` if test -n "$etyhdr" then etyline=`expr "$etyhdr" : '\([^:]*\)'` firstline=$etyline else firstline=1 # in $el space fi # find next header (any header) nxthdr=`line -f $el -t $eoe $file | grep -n '^=' | awk -F: "\\$1 > $firstline {print; exit}"` if test -n "$nxthdr" then nxtline=`expr "$nxthdr" : '\([^:]*\)'` else nxtline=`expr $eoe - $el + 1 + 1` fi nxtline=`expr $el + $nxtline - 1` i=`expr $nxtline - 1` # now count blank lines preceding $nxtline needtrailing=yes while test $i -gt $firstline do if line $i $file | grep -q . then break fi needtrailing=no i=`expr $i - 1` done fi # now $i is line to insert after nins=1 if test $needprohdr = yes then nins=`expr $nins + 2` if test "$needtrailing" = yes then nins=`expr $nins + 1` fi fi ( echo ${i}a if test $needprohdr = yes then echo echo "===Pronunciation===" fi echo "*:Rhymes: [[$rhymebase$rhyme|$rhyme]]" if test $needprohdr = yes -a "$needtrailing" = yes then echo fi echo . echo w ) | ed - $file echo "expect $nins insertions" exit 0