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