aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libroff.h
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-06-26 20:09:04 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-06-26 20:09:04 +0000
commit49f05c164bb57720456a69a680c30c94727ee0cd (patch)
tree88b3762fef860753483b174305f5a465147a9083 /libroff.h
parentbaa06147e1a9b5a1f3c9f4a29b58b8722c1fd875 (diff)
downloadmandoc-49f05c164bb57720456a69a680c30c94727ee0cd.tar.gz
mandoc-49f05c164bb57720456a69a680c30c94727ee0cd.tar.zst
mandoc-49f05c164bb57720456a69a680c30c94727ee0cd.zip
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.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/libroff.h b/libroff.h
index 897a55ae..90ef4178 100644
--- a/libroff.h
+++ b/libroff.h
@@ -1,4 +1,4 @@
-/* $Id: libroff.h,v 1.39 2015/11/07 14:01:16 schwarze Exp $ */
+/* $Id: libroff.h,v 1.40 2017/06/26 20:09:04 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -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 */