Word wrap: Difference between revisions
Content added Content deleted
(→{{header|Go}}: ++ awk) |
|||
Line 8: | Line 8: | ||
If you have both basic and extra credit solutions, show an example where the two algorithms give different results. |
If you have both basic and extra credit solutions, show an example where the two algorithms give different results. |
||
=={{header|AWK}}== |
|||
Basic word wrap. |
|||
<lang awk>function wordwrap_paragraph(p) |
|||
{ |
|||
if ( length(p) < 1 ) return |
|||
split(p, words) |
|||
spaceLeft = lineWidth |
|||
line = words[1] |
|||
delete words[1] |
|||
for (i = 1; i <= length(words); i++) { |
|||
word = words[i] |
|||
if ( (length(word) + 1) > spaceLeft ) { |
|||
print line |
|||
line = word |
|||
spaceLeft = lineWidth - length(word) |
|||
} else { |
|||
spaceLeft -= length(word) + 1 |
|||
line = line " " word |
|||
} |
|||
} |
|||
print line |
|||
} |
|||
BEGIN { |
|||
lineWidth = width |
|||
par = "" |
|||
} |
|||
/^[ \t]*$/ { |
|||
wordwrap_paragraph(par) |
|||
par = "" |
|||
} |
|||
!/^[ \t]*$/ { |
|||
par = par " " $0 |
|||
} |
|||
END { |
|||
wordwrap_paragraph(par) |
|||
}</lang> |
|||
To test it, |
|||
<pre> |
|||
awk -f wordwrap.awk -v width=80 < text.txt |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |