|
Packit |
0986c0 |
#ifndef lint
|
|
Packit |
0986c0 |
static char *RCSid() { return RCSid("$Id: checkdoc.c,v 1.14 2005/06/28 22:37:31 sfeam Exp $"); }
|
|
Packit |
0986c0 |
#endif
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
/* GNUPLOT - checkdoc.c */
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
/*[
|
|
Packit |
0986c0 |
* Copyright 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley
|
|
Packit |
0986c0 |
*
|
|
Packit |
0986c0 |
* Permission to use, copy, and distribute this software and its
|
|
Packit |
0986c0 |
* documentation for any purpose with or without fee is hereby granted,
|
|
Packit |
0986c0 |
* provided that the above copyright notice appear in all copies and
|
|
Packit |
0986c0 |
* that both that copyright notice and this permission notice appear
|
|
Packit |
0986c0 |
* in supporting documentation.
|
|
Packit |
0986c0 |
*
|
|
Packit |
0986c0 |
* Permission to modify the software is granted, but not the right to
|
|
Packit |
0986c0 |
* distribute the complete modified source code. Modifications are to
|
|
Packit |
0986c0 |
* be distributed as patches to the released version. Permission to
|
|
Packit |
0986c0 |
* distribute binaries produced by compiling modified sources is granted,
|
|
Packit |
0986c0 |
* provided you
|
|
Packit |
0986c0 |
* 1. distribute the corresponding source modifications from the
|
|
Packit |
0986c0 |
* released version in the form of a patch file along with the binaries,
|
|
Packit |
0986c0 |
* 2. add special version identification to distinguish your version
|
|
Packit |
0986c0 |
* in addition to the base release version number,
|
|
Packit |
0986c0 |
* 3. provide your name and address as the primary contact for the
|
|
Packit |
0986c0 |
* support of your modified version, and
|
|
Packit |
0986c0 |
* 4. retain our contact information in regard to use of the base
|
|
Packit |
0986c0 |
* software.
|
|
Packit |
0986c0 |
* Permission to distribute the released version of the source code along
|
|
Packit |
0986c0 |
* with corresponding source modifications in the form of a patch file is
|
|
Packit |
0986c0 |
* granted with same provisions 2 through 4 for binary distributions.
|
|
Packit |
0986c0 |
*
|
|
Packit |
0986c0 |
* This software is provided "as is" without express or implied warranty
|
|
Packit |
0986c0 |
* to the extent permitted by applicable law.
|
|
Packit |
0986c0 |
]*/
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
/*
|
|
Packit |
0986c0 |
* checkdoc -- check a doc file for correctness of first column.
|
|
Packit |
0986c0 |
*
|
|
Packit |
0986c0 |
* Prints out lines that have an illegal first character.
|
|
Packit |
0986c0 |
* First character must be space, digit, or ?, @, #, %,
|
|
Packit |
0986c0 |
* or line must be empty.
|
|
Packit |
0986c0 |
*
|
|
Packit |
0986c0 |
* usage: checkdoc [docfile]
|
|
Packit |
0986c0 |
* Modified by Russell Lang from hlp2ms.c by Thomas Williams
|
|
Packit |
0986c0 |
*
|
|
Packit |
0986c0 |
* Original version by David Kotz used the following one line script!
|
|
Packit |
0986c0 |
* sed -e '/^$/d' -e '/^[ 0-9?@#%]/d' gnuplot.doc
|
|
Packit |
0986c0 |
*
|
|
Packit |
0986c0 |
*/
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
0986c0 |
# include "config.h"
|
|
Packit |
0986c0 |
#endif
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
#include "syscfg.h"
|
|
Packit |
0986c0 |
#include "stdfn.h"
|
|
Packit |
0986c0 |
#include "doc2x.h"
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
void convert __PROTO((FILE *, FILE *));
|
|
Packit |
0986c0 |
void process_line __PROTO((char *, FILE *));
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
int
|
|
Packit |
0986c0 |
main (int argc, char **argv)
|
|
Packit |
0986c0 |
{
|
|
Packit |
0986c0 |
FILE *infile;
|
|
Packit |
0986c0 |
infile = stdin;
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
if (argc > 2) {
|
|
Packit |
0986c0 |
fprintf(stderr, "Usage: %s [infile]\n", argv[0]);
|
|
Packit |
0986c0 |
exit(EXIT_FAILURE);
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
if (argc == 2)
|
|
Packit |
0986c0 |
if ((infile = fopen(argv[1], "r")) == (FILE *) NULL) {
|
|
Packit |
0986c0 |
fprintf(stderr, "%s: Can't open %s for reading\n",
|
|
Packit |
0986c0 |
argv[0], argv[1]);
|
|
Packit |
0986c0 |
exit(EXIT_FAILURE);
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
convert(infile, stdout);
|
|
Packit |
0986c0 |
return EXIT_SUCCESS;
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
void
|
|
Packit |
0986c0 |
convert(FILE *a, FILE *b)
|
|
Packit |
0986c0 |
{
|
|
Packit |
0986c0 |
static char line[MAX_LINE_LEN+1];
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
while (get_line(line, sizeof(line), a)) {
|
|
Packit |
0986c0 |
process_line(line, b);
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
void
|
|
Packit |
0986c0 |
process_line(char *line, FILE *b)
|
|
Packit |
0986c0 |
{
|
|
Packit |
0986c0 |
/* check matching backticks within a paragraph */
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
static int count = 0;
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
if (line[0] == ' ') {
|
|
Packit |
0986c0 |
char *p = line;
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
/* skip/count leading spaces */
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
while (*++p == ' ');
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
if (*p == '\n') {
|
|
Packit |
0986c0 |
/* it is not clear if this is an error, but it is an
|
|
Packit |
0986c0 |
* inconsistency, so flag it
|
|
Packit |
0986c0 |
*/
|
|
Packit |
0986c0 |
fprintf(b, "spaces-only line %s:%d\n", termdoc_filename, termdoc_lineno);
|
|
Packit |
0986c0 |
} else {
|
|
Packit |
0986c0 |
/* accumulate count of backticks. Do not check odd-ness
|
|
Packit |
0986c0 |
* until end of paragraph (non-space in column 1)
|
|
Packit |
0986c0 |
*/
|
|
Packit |
0986c0 |
for (; *p; ++p)
|
|
Packit |
0986c0 |
if (*p == '`')
|
|
Packit |
0986c0 |
++count;
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
} else {
|
|
Packit |
0986c0 |
if (count & 1) {
|
|
Packit |
0986c0 |
fprintf(b,
|
|
Packit |
0986c0 |
"mismatching backticks before %s:%d\n",
|
|
Packit |
0986c0 |
termdoc_filename, termdoc_lineno);
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
count = 0;
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
if (strchr(line, '\t'))
|
|
Packit |
0986c0 |
fprintf(b, "tab character in line %s:%d\n", termdoc_filename, termdoc_lineno);
|
|
Packit |
0986c0 |
|
|
Packit |
0986c0 |
switch (line[0]) { /* control character */
|
|
Packit |
0986c0 |
case '?':{ /* interactive help entry */
|
|
Packit |
0986c0 |
break; /* ignore */
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
case '<':{ /* term docs */
|
|
Packit |
0986c0 |
break; /* ignore */
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
case '@':{ /* start/end table */
|
|
Packit |
0986c0 |
break; /* ignore */
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
case '#':{ /* latex table entry */
|
|
Packit |
0986c0 |
break; /* ignore */
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
case '%':{ /* troff table entry */
|
|
Packit |
0986c0 |
break; /* ignore */
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
case '^':{ /* html entry */
|
|
Packit |
0986c0 |
break; /* ignore */
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
case '=':{ /* index entry */
|
|
Packit |
0986c0 |
break; /* ignore */
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
case 'F':{ /* included figure */
|
|
Packit |
0986c0 |
break; /* ignore */
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
case '\n': /* empty text line */
|
|
Packit |
0986c0 |
case ' ':{ /* normal text line */
|
|
Packit |
0986c0 |
break;
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
default:{
|
|
Packit |
0986c0 |
if (isdigit((int)line[0])) { /* start of section */
|
|
Packit |
0986c0 |
/* ignore */
|
|
Packit |
0986c0 |
} else
|
|
Packit |
0986c0 |
/* output bad line */
|
|
Packit |
0986c0 |
fprintf(b, "%s:%d:%s", termdoc_filename, termdoc_lineno, line);
|
|
Packit |
0986c0 |
break;
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
}
|
|
Packit |
0986c0 |
}
|