github.com/benhoyt/goawk@v1.8.1/testdata/tt.15 (about)

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