summaryrefslogtreecommitdiff
path: root/web/noweb/src/c/columns.nw
diff options
context:
space:
mode:
Diffstat (limited to 'web/noweb/src/c/columns.nw')
-rw-r--r--web/noweb/src/c/columns.nw53
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--;
+ }
+}
+