|
|
@@ -0,0 +1,74 @@ |
|
|
|
#!/bin/sh |
|
|
|
fname=$(mktemp foobar.XXXXX) |
|
|
|
cat > "$fname" |
|
|
|
awk ' |
|
|
|
maxline == 1 { |
|
|
|
if (maxlength < length) |
|
|
|
maxlength = length |
|
|
|
} |
|
|
|
|
|
|
|
function printtop () { |
|
|
|
blank = sprintf("%*s", maxlength + 4, "") |
|
|
|
gsub(" ", "*", blank) |
|
|
|
printf("%s\n", blank) |
|
|
|
} |
|
|
|
|
|
|
|
function printline(a) |
|
|
|
{ |
|
|
|
printf("* %s%*s *\n", a, maxlength - length(a), "") |
|
|
|
} |
|
|
|
|
|
|
|
# return the string a, with the character at pos, replaced with chr |
|
|
|
function replace(a, pos, chr) |
|
|
|
{ |
|
|
|
return substr(a, 1, pos - 1) chr substr(a, pos + 1) |
|
|
|
} |
|
|
|
|
|
|
|
output == 1 && FNR == 1 { |
|
|
|
printtop() |
|
|
|
printf("* %*s *\n", maxlength, "") |
|
|
|
|
|
|
|
prevline = $0 |
|
|
|
next |
|
|
|
} |
|
|
|
|
|
|
|
output == 1 { |
|
|
|
# fix up horizontal issues |
|
|
|
gsub("\\|-", "+-", prevline) |
|
|
|
gsub("\\| -", "+--", prevline) |
|
|
|
gsub("-\\|", "-+", prevline) |
|
|
|
gsub("- \\|", "--+", prevline) |
|
|
|
|
|
|
|
# Fix up vertical issues |
|
|
|
|
|
|
|
# first fix edges from below |
|
|
|
r = split($0, a, "|") |
|
|
|
pos = 0 |
|
|
|
for (i = 2; i <= r; i++) { |
|
|
|
pos += length(a[i - 1]) + 1 |
|
|
|
if (substr(prevline, pos, 1) == "-") |
|
|
|
prevline = replace(prevline, pos, "+") |
|
|
|
} |
|
|
|
|
|
|
|
# fix edges from above |
|
|
|
r = split(prevline, a, "|") |
|
|
|
pos = 0 |
|
|
|
for (i = 2; i <= r; i++) { |
|
|
|
pos += length(a[i - 1]) + 1 |
|
|
|
if (substr($0, pos, 1) == "-") |
|
|
|
$0 = replace($0, pos, "+") |
|
|
|
} |
|
|
|
|
|
|
|
printline(prevline) |
|
|
|
|
|
|
|
prevline = $0 |
|
|
|
} |
|
|
|
|
|
|
|
END { |
|
|
|
printline(prevline) |
|
|
|
printf("* %*s *\n", maxlength, "") |
|
|
|
printtop() |
|
|
|
} |
|
|
|
' maxline=1 "$fname" maxline=0 output=1 "$fname" |
|
|
|
|
|
|
|
rm "$fname" |