diff options
Diffstat (limited to 'gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c')
| -rw-r--r-- | gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c | 175 |
1 files changed, 93 insertions, 82 deletions
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c index 9d9412af21b..5a0df9173d8 100644 --- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c +++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTLex.c @@ -1,57 +1,55 @@ /* MODULE HTLex.c -** LEXICAL ANALYSOR -** -** AUTHORS: -** AL Ari Luotonen luotonen@dxcern.cern.ch -** -** HISTORY: -** -** -** BUGS: -** -** -*/ + * LEXICAL ANALYSOR + * + * AUTHORS: + * AL Ari Luotonen luotonen@dxcern.cern.ch + * + * HISTORY: + * + * + * BUGS: + * + * + */ #include <HTUtils.h> -#include <HTLex.h> /* Implemented here */ +#include <HTLex.h> /* Implemented here */ #include <LYLeaks.h> /* -** Global variables -*/ -PUBLIC char HTlex_buffer[40]; /* Read lexical string */ -PUBLIC int HTlex_line = 1; /* Line number in source file */ - + * Global variables + */ +char HTlex_buffer[40]; /* Read lexical string */ +int HTlex_line = 1; /* Line number in source file */ /* -** Module-wide variables -*/ -PRIVATE int lex_cnt; -PRIVATE BOOL lex_template; -PRIVATE LexItem lex_pushed_back = LEX_NONE; -PRIVATE FILE *cache = NULL; - - -PUBLIC void unlex ARGS1(LexItem, lex_item) + * Module-wide variables + */ +static int lex_cnt; +static BOOL lex_template; +static LexItem lex_pushed_back = LEX_NONE; +static FILE *cache = NULL; + +void unlex(LexItem lex_item) { lex_pushed_back = lex_item; } - -PUBLIC LexItem lex ARGS1(FILE *, fp) +LexItem lex(FILE *fp) { int ch = 0; - if (fp != cache) { /* This cache doesn't work ok because the system */ - cache = fp; /* often assign same FILE structure the next open */ - HTlex_line = 1; /* file. So, if there are syntax errors in setup */ - } /* files it may confuse things later on. */ - + if (fp != cache) { /* This cache doesn't work ok because the system */ + cache = fp; /* often assign same FILE structure the next open */ + HTlex_line = 1; /* file. So, if there are syntax errors in setup * + files it may confuse things later on. */ + } if (lex_pushed_back != LEX_NONE) { LexItem ret = lex_pushed_back; + lex_pushed_back = LEX_NONE; return ret; } @@ -59,73 +57,86 @@ PUBLIC LexItem lex ARGS1(FILE *, fp) lex_cnt = 0; lex_template = NO; - for(;;) { + for (;;) { switch (ch = getc(fp)) { - case EOF: - case ' ': - case '\t': - case '\r': - case '\n': - case ':': - case ',': - case '(': - case ')': - case '@': + case EOF: + case ' ': + case '\t': + case '\r': + case '\n': + case ':': + case ',': + case '(': + case ')': + case '@': if (lex_cnt > 0) { - if (ch != EOF) ungetc(ch,fp); - if (lex_template) return LEX_TMPL_STR; - else return LEX_ALPH_STR; - } - else switch(ch) { - case EOF: return LEX_EOF; - case '\n': - HTlex_line++; return LEX_REC_SEP; - case ':': return LEX_FIELD_SEP; - case ',': return LEX_ITEM_SEP; - case '(': return LEX_OPEN_PAREN; - case ')': return LEX_CLOSE_PAREN; - case '@': return LEX_AT_SIGN; - default: ; /* Leading white space ignored (SP,TAB,CR) */ - } + if (ch != EOF) + ungetc(ch, fp); + if (lex_template) + return LEX_TMPL_STR; + else + return LEX_ALPH_STR; + } else + switch (ch) { + case EOF: + return LEX_EOF; + case '\n': + HTlex_line++; + return LEX_REC_SEP; + case ':': + return LEX_FIELD_SEP; + case ',': + return LEX_ITEM_SEP; + case '(': + return LEX_OPEN_PAREN; + case ')': + return LEX_CLOSE_PAREN; + case '@': + return LEX_AT_SIGN; + default: /* Leading white space ignored (SP,TAB,CR) */ + break; + } break; - default: - HTlex_buffer[lex_cnt++] = (char) ch; + default: + if (lex_cnt < (int) (sizeof(HTlex_buffer) - 1)) + HTlex_buffer[lex_cnt++] = (char) ch; HTlex_buffer[lex_cnt] = '\0'; - if ('*' == ch) lex_template = YES; - } /* switch ch */ - } /* forever */ + if ('*' == ch) + lex_template = YES; + } /* switch ch */ + } /* forever */ } - -PUBLIC char *lex_verbose ARGS1(LexItem, lex_item) +const char *lex_verbose(LexItem lex_item) { - static char msg[100]; /* @@@@@@@@ */ + static char msg[sizeof(HTlex_buffer) + 30]; /* @@@@@@@@ */ switch (lex_item) { - case LEX_NONE: /* Internally used */ + case LEX_NONE: /* Internally used */ return "NO-LEX-ITEM"; - case LEX_EOF: /* End of file */ + case LEX_EOF: /* End of file */ return "end-of-file"; - case LEX_REC_SEP: /* Record separator */ + case LEX_REC_SEP: /* Record separator */ return "record separator (newline)"; - case LEX_FIELD_SEP: /* Field separator */ + case LEX_FIELD_SEP: /* Field separator */ return "field separator ':'"; - case LEX_ITEM_SEP: /* List item separator */ + case LEX_ITEM_SEP: /* List item separator */ return "item separator ','"; - case LEX_OPEN_PAREN: /* Group start tag */ + case LEX_OPEN_PAREN: /* Group start tag */ return "'('"; - case LEX_CLOSE_PAREN: /* Group end tag */ + case LEX_CLOSE_PAREN: /* Group end tag */ return "')'"; - case LEX_AT_SIGN: /* Address qualifier */ + case LEX_AT_SIGN: /* Address qualifier */ return "address qualifier '@'"; - case LEX_ALPH_STR: /* Alphanumeric string */ - sprintf(msg, "alphanumeric string '%.70s'", HTlex_buffer); + case LEX_ALPH_STR: /* Alphanumeric string */ + sprintf(msg, "alphanumeric string '%.*s'", + (int) sizeof(HTlex_buffer), HTlex_buffer); return msg; - case LEX_TMPL_STR: /* Template string */ - sprintf(msg, "template string '%.70s'", HTlex_buffer); + case LEX_TMPL_STR: /* Template string */ + sprintf(msg, "template string '%.*s'", + (int) sizeof(HTlex_buffer), HTlex_buffer); return msg; - default: + default: return "UNKNOWN-LEX-ITEM"; } } - |
