From 0c26abe0a88a72a04cf37617295c931826c1791f Mon Sep 17 00:00:00 2001 From: Zandr Martin Date: Mon, 08 Jul 2019 13:17:59 -0400 Subject: [PATCH] enforce 1-step indentation Allow multi-step indentation in literal blocks, and allow multi-step dedents. --- src/main.c | 10 +++++----- test/indent | 35 +++++++++++++++++++++++++++++++++++ test/lib.sh | 2 +- diff --git a/src/main.c b/src/main.c index 2508a7f0ded51471729b78f7247305adf2f37f3a..6b948ecde7697ec29074dcddae372f10136aa50e 100644 --- a/src/main.c +++ b/src/main.c @@ -286,19 +286,19 @@ while ((ch = parser_getch(p)) == '\t') { ++i; } parser_pushch(p, ch); - if (ch == '\n' && *indent != 0) { - // Don't change indent when we encounter empty lines + if ((ch == '\n' || ch == UTF8_INVALID) && *indent != 0) { + // Don't change indent when we encounter empty lines or EOF return *indent; } if (write) { - if (i < *indent) { + if ((i - *indent) > 1) { + parser_fatal(p, "Indented by an amount greater than 1"); + } else if (i < *indent) { for (int j = *indent; i < j; --j) { roff_macro(p, "RE", NULL); } } else if (i == *indent + 1) { fprintf(p->output, ".RS 4\n"); - } else if (i != *indent && ch == '\t') { - parser_fatal(p, "Indented by an amount greater than 1"); } } *indent = i; diff --git a/test/indent b/test/indent index 087e30c9aaf450575d75247258a2a547e7efe8fd..9ea38e1168d9bd001fcb5231863ca7639981331d 100755 --- a/test/indent +++ b/test/indent @@ -19,3 +19,38 @@ Indented one level Not indented EOF end 0 + +begin "Disallows multi-step indents" +scdoc </dev/null +test(8) + +Not indented + Indented one level + Indented three levels +Not indented +EOF +end 1 + +begin "Allows indentation changes > 1 in literal blocks" +scdoc </dev/null +test(8) + +This is some code: + +\`\`\` +foobar: + # asdf +\`\`\` +EOF +end 0 + +begin "Allows multi-step dedents" +scdoc </dev/null +test(8) + +Not indented + Indented one level + Indented two levels +Not indented +EOF +end 0 diff --git a/test/lib.sh b/test/lib.sh index a26c734d8d4de13c9bf6567ef8e75b54225d56f5..b12ec753f40f08f02672cf4473e4e45f87f72189 100644 --- a/test/lib.sh +++ b/test/lib.sh @@ -2,7 +2,7 @@ printf '== %s\n' "$0" trap "printf '\n'" EXIT begin() { - printf '%-40s' "$1" + printf '%-50s' "$1" } scdoc() { -- 2.48.1