diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2017-06-26 20:09:04 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2017-06-26 20:09:04 +0000 |
commit | d06770ec5841a0d0f6cc2f9616d2a46daa15450b (patch) | |
tree | 74138a14b75a09b17c8c959c9c08c8021ceb6ecf /libroff.h | |
parent | 31b27242e30cf39fa62e9daa2925de5b5d8b90aa (diff) | |
download | mandoc-d06770ec5841a0d0f6cc2f9616d2a46daa15450b.tar.gz |
Complete rewrite of the lexer in a single function with four operation
modes instead of four functions, resulting in considerable
simplification, fifty lines less of code, fifteen fewer automatic
variables, and several bug fixes, for example:
1. The delim control statement consumes exactly two bytes of input,
requires no whitespace after these two bytes, and does not treat
quotes in any special way.
2. If the argument of left, right, gfont, gsize, or size is defined
as an alias, only the first word of the value is used as the
delimiter, font name, or font size.
3. If a back, fwd, down, or up keyword is followed by another keyword
instead of the required number, GNU eqn does nothing useful, but
typically errors out. So no need to have special handling (with
an ugly goto!) for it in mandoc.
Also getting rid of one pointless static buffer and twelve redundant
calls to strlcpy(3).
Diffstat (limited to 'libroff.h')
-rw-r--r-- | libroff.h | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -43,10 +43,11 @@ struct eqn_node { struct eqn_node *next; /* singly linked list of equations */ struct eqn_def *defs; /* array of definitions */ char *data; /* source code of this equation */ + char *start; /* first byte of the current token */ + char *end; /* first byte of the next token */ size_t defsz; /* number of definitions */ size_t sz; /* length of the source code */ - size_t cur; /* parse point in the source code */ - size_t rew; /* beginning of the current token */ + size_t toksz; /* length of the current token */ int gsize; /* default point size */ int delim; /* in-line delimiters enabled */ char odelim; /* in-line opening delimiter */ |