diff options
Diffstat (limited to 'web/noweb/src/c/columns.nw')
-rw-r--r-- | web/noweb/src/c/columns.nw | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/web/noweb/src/c/columns.nw b/web/noweb/src/c/columns.nw new file mode 100644 index 0000000000..ce35ed568b --- /dev/null +++ b/web/noweb/src/c/columns.nw @@ -0,0 +1,53 @@ +% Copyright 1991 by Norman Ramsey. All rights reserved. +% See file COPYRIGHT for more information. +\subsection{Managing indentation and columns} +These functions are used to help accumulate indentations across module +boundaries by measuring the widths of various strings +in columns. +The size of things depends on [[tabsize]] as defined in columns.h. +If [[tabsize == 0]], tabs shouldn't be touched on input and won't be +generated on output. +<<header>>= +extern int tabsize; +extern int columnwidth (char *s); /* number of columns string occupies */ +extern int limitcolumn (char *s, int startcolumn); + /* width of startcolumn blanks plus s */ +extern void indent_for (int width, FILE *fp); + /* indent to width; next char -> width+1 */ +<<*>>= +static char rcsid[] = "$Id: columns.nw,v 2.24 2008/10/06 01:03:05 nr Exp nr $"; +static char rcsname[] = "$Name: v2_12 $"; +#include <stdio.h> +#include "columns.h" + +int tabsize = 8; +<<*>>= +int columnwidth (char *s) { /* width of a string in columns */ + (void)rcsid; /* avoid a warning */ + (void)rcsname; /* avoid a warning */ + return limitcolumn(s, 0); +} +<<*>>= +int limitcolumn (char *s, int col) { + while (*s) { + col++; + if (*s=='\t' && tabsize > 0) while (col % tabsize != 0) col++; + s++; + } + return col; +} +<<*>>= +void indent_for (int width, FILE *fp) { + /* write whitespace [[width]] columns wide */ +/*fprintf(fp,"<%2d>",width); if (width>4) {fprintf(fp," "); width -= 4;}*/ + if (tabsize > 1) + while (width >= tabsize) { + putc('\t', fp); + width -= tabsize; + } + while (width > 0) { + putc(' ', fp); + width--; + } +} + |