From 3496545358da0b95880615ead581c13f91b1b5f9 Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Sat, 1 Jan 2022 17:58:21 +0100 Subject: mflow: fixed lines were not wrapped, add test suite Reported by ninewise. --- mflow.c | 36 +++++-------- t/4500-mflow.t | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+), 22 deletions(-) create mode 100755 t/4500-mflow.t diff --git a/mflow.c b/mflow.c index 1013da5..9bed19d 100644 --- a/mflow.c +++ b/mflow.c @@ -29,28 +29,6 @@ chgquote(int quotes) } } -void -fixed(int quotes, char *line, size_t linelen) -{ - chgquote(quotes); - - if (column && linelen > (size_t)(maxcolumn - column)) { - putchar('\n'); - column = 0; - } - - if (column == 0) { - for (; column < quotes; column++) - putchar('>'); - if (quotes && *line != ' ') - putchar(' '); - } - - fwrite(line, 1, linelen, stdout); - putchar('\n'); - column = 0; -} - void flowed(int quotes, char *line, ssize_t linelen) { @@ -96,6 +74,15 @@ flowed(int quotes, char *line, ssize_t linelen) } } +void +fixed(int quotes, char *line, size_t linelen) +{ + flowed(quotes, line, linelen); + + putchar('\n'); + column = 0; +} + int main(int argc, char *argv[]) { @@ -200,6 +187,11 @@ main(int argc, char *argv[]) if (delsp) line[--rd] = 0; flowed(quotes, line, rd); + } else if (rd == 0) { // empty line is fixed + if (column > 0) + putchar('\n'); + putchar('\n'); + column = 0; } else { if (force && rd > maxcolumn) { flowed(quotes, line, rd); diff --git a/t/4500-mflow.t b/t/4500-mflow.t new file mode 100755 index 0000000..879d6d4 --- /dev/null +++ b/t/4500-mflow.t @@ -0,0 +1,166 @@ +#!/bin/sh -e +cd ${0%/*} +. ./lib.sh +plan 12 + +rm -rf test.dir +mkdir test.dir +( +cd test.dir + +export PIPE_CONTENTTYPE='text/plain; format=flowed' +export COLUMNS=80 + +cat <a +this +is +flowed. +! +cat <b +this is flowed. +! +check 'simple reflow' 'mflow a +this +is +two spaces. +! +cat <b +this is two spaces. +! +check 'simple space stuffing' 'mflow a +this +is +flowed. +this is fixed. +! +cat <b +this is flowed. +this is fixed. +! +check 'simple fixed' 'mflow a +> this +> is +> quoted. +this +is +unquoted. +! +cat <b +> this is quoted. +this is unquoted. +! +check 'simple quoted' 'mflow a +> this +> is +> delsp. + +> double +> spaced +! +cat <b +> thisisdelsp. + +> double spaced +! +check 'simple delsp' 'mflow a +this +is +way more than eighty chars which is the terminal width to flow. +this +is +way more than eighty chars which is the terminal width to flow. +! +cat <b +this is way more than eighty chars which is the terminal width to flow. this is +way more than eighty chars which is the terminal width to flow. +! +check 'simple wrap' 'mflow a +this +is +way more than eighty chars which is the terminal width to flow. +averylongwordcomeshere. +this +is +way more than eighty chars which is the terminal width to flow. +! +cat <b +this is way more than eighty chars which is the terminal width to flow. +averylongwordcomeshere. this is way more than eighty chars which is the +terminal width to flow. +! +check 'more complex wrap' 'mflow a +foo +bar. + +quux. +! +cat <b +foo bar. + +quux. +! +check 'space before empty line' 'mflow a +Aaaaa bbbbb ccccc ddddd eeeee aaaaa bbbbb ccccc ddddd eeeee +aaaaa bbbbb ccccc ddddd eeeee aaaaa bbbbb ccccc ddddd eeeee +aaaaa bbbbb ccccc +ffffff gggggg hhhhhh iiiiii. +! +cat <b +Aaaaa bbbbb ccccc ddddd eeeee aaaaa bbbbb ccccc ddddd eeeee aaaaa bbbbb ccccc +ddddd eeeee aaaaa bbbbb ccccc ddddd eeeee aaaaa bbbbb ccccc ffffff gggggg +hhhhhh iiiiii. +! +check 'fixed lines are wrapped too' 'mflow a +some +wrapped. +-- +signature +! +cat <b +some wrapped. +-- +signature +! +check 'passes usenet signature marker as is' 'mflow a +some regular text being force wrapped because the line is way too long oh no who writes so long lines. +! +cat <b +some regular text being force wrapped because the line is way too long oh no +who writes so long lines. +! +check 'force wrapping' 'mflow -f a +> some regular text being force wrapped because the line is way too long oh no who writes so long lines. +! +cat <b +> some regular text being force wrapped because the line is way too long oh no +> who writes so long lines. +! +check 'force wrapping of quoted text' 'mflow -f