1 1.1 christos # fmt - format 2 1.1 christos # input: text 3 1.1 christos # output: text formatted into lines of <= 72 characters 4 1.1 christos 5 1.1 christos BEGIN { 6 1.1 christos maxlen = 72 7 1.1 christos } 8 1.1 christos 9 1.1 christos /^[ \t]/ { printline(); print; next } # verbatim 10 1.1 christos ###/^ +/ { printline(); } # whitespace == break 11 1.1 christos 12 1.1 christos /./ { for (i = 1; i <= NF; i++) addword($i); next } 13 1.1 christos 14 1.1 christos /^$/ { printline(); print "" } 15 1.1 christos END { printline() } 16 1.1 christos 17 1.1 christos function addword(w) { 18 1.1.1.1.12.1 perseant print "adding [", w, "] ", length(w), length(line), maxlen 19 1.1 christos if (length(line) + length(w) > maxlen) 20 1.1 christos printline() 21 1.1 christos if (length(w) > 2 && ( w ~ /[\.!]["?)]?$/ || w ~ /[?!]"?$/) && 22 1.1 christos w !~ /^(Mr|Dr|Ms|Mrs|vs|Ph.D)\.$/) 23 1.1 christos w = w " " 24 1.1 christos line = line " " w 25 1.1 christos } 26 1.1 christos 27 1.1 christos function printline() { 28 1.1 christos if (length(line) > 0) { 29 1.1 christos sub(/ +$/, "", line) 30 1.1 christos print substr(line, 2) # removes leading blank 31 1.1 christos line = "" 32 1.1 christos } 33 1.1 christos } 34