From e048cf369a76e64ed7219111404be032da5d93c6 Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Mon, 6 Feb 2012 18:52:40 +0000 Subject: Add a `fix' for another whitespace bug. If the sentence starts with a multiple of eight spaces, the sentence should in almost all practical cases have started with tabs instead. Replace these spaces by tabs. --- tools/tools/fixwhite/fixwhite.1 | 2 ++ tools/tools/fixwhite/fixwhite.c | 13 +++++++++++++ 2 files changed, 15 insertions(+) (limited to 'tools') diff --git a/tools/tools/fixwhite/fixwhite.1 b/tools/tools/fixwhite/fixwhite.1 index 852a390261ed..ccf5ecec03dc 100644 --- a/tools/tools/fixwhite/fixwhite.1 +++ b/tools/tools/fixwhite/fixwhite.1 @@ -41,6 +41,8 @@ and prints the result to standard output. It removes leading and trailing empty lines from the input, as well as trailing whitespace characters from ever line of text. Multiple successive empty lines are merged together. +If the whitespace at the beginning of a sentence is exactly a multiple +of eight spaces, the whitespace is replaced by tabs. Also, spaces preceeding tabs will be merged into the tab character. .Sh AUTHORS .An Ed Schouten Aq ed@FreeBSD.org diff --git a/tools/tools/fixwhite/fixwhite.c b/tools/tools/fixwhite/fixwhite.c index 276ae2e6fb41..903a5a355651 100644 --- a/tools/tools/fixwhite/fixwhite.c +++ b/tools/tools/fixwhite/fixwhite.c @@ -110,6 +110,19 @@ savewhite(char c, bool leading) static void printwhite(void) { + off_t i; + + /* Merge spaces at the start of a sentence to tabs if possible. */ + if ((column % 8) == 0) { + for (i = 0; i < column; i++) + if (!peekbyte(i + 1, ' ')) + break; + if (i == column) { + queuelen -= column; + for (i = 0; i < column; i += 8) + queue[queuelen++] = '\t'; + } + } if (fwrite(queue, 1, queuelen, stdout) != queuelen) { perror("write"); -- cgit v1.2.3