summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/tools/fixwhite/fixwhite.12
-rw-r--r--tools/tools/fixwhite/fixwhite.c13
2 files changed, 15 insertions, 0 deletions
diff --git a/tools/tools/fixwhite/fixwhite.1 b/tools/tools/fixwhite/fixwhite.1
index 852a390..ccf5ece 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 276ae2e..903a5a3 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");
OpenPOWER on IntegriCloud