diff options
author | 2018-08-23 14:29:38 +0000 | |
---|---|---|
committer | 2018-08-23 14:29:38 +0000 | |
commit | c56c17992552256b55134ead16c3e16164fd2e67 (patch) | |
tree | cfe287e6cfd33a9dcb04a6a781b093af17e5b556 /libmandoc.h | |
parent | 1483cf671448b44a8bf37ea7129c88e24f588abd (diff) | |
download | mandoc-c56c17992552256b55134ead16c3e16164fd2e67.tar.gz mandoc-c56c17992552256b55134ead16c3e16164fd2e67.tar.zst mandoc-c56c17992552256b55134ead16c3e16164fd2e67.zip |
Implement the roff(7) .shift and .return requests,
for example used by groff_hdtbl(7) and groff_mom(7).
Also correctly interpolate arguments during nested macro execution
even after .shift and .return, implemented using a stack of argument
arrays.
Note that only read.c, but not roff.c can detect the end of a macro
execution, and the existence of .shift implies that arguments cannot
be interpolated up front, so unfortunately, this includes a partial
revert of roff.c rev. 1.337, moving argument interpolation back into
the function roff_res().
Diffstat (limited to 'libmandoc.h')
-rw-r--r-- | libmandoc.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libmandoc.h b/libmandoc.h index 9cc8cce4..05f149fb 100644 --- a/libmandoc.h +++ b/libmandoc.h @@ -1,7 +1,7 @@ -/* $Id: libmandoc.h,v 1.71 2018/04/09 22:27:04 schwarze Exp $ */ +/* $Id: libmandoc.h,v 1.72 2018/08/23 14:29:38 schwarze Exp $ */ /* * Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -21,6 +21,8 @@ enum rofferr { ROFF_RERUN, /* re-run roff interpreter with offset */ ROFF_APPEND, /* re-run main parser, appending next line */ ROFF_REPARSE, /* re-run main parser on the result */ + ROFF_USERCALL, /* dto., calling a user-defined macro */ + ROFF_USERRET, /* abort parsing of user-defined macro */ ROFF_SO, /* include another file */ ROFF_IGN, /* ignore current line */ }; @@ -64,6 +66,7 @@ struct roff_man *roff_man_alloc(struct roff *, struct mparse *, const char *, int); void roff_man_reset(struct roff_man *); enum rofferr roff_parseln(struct roff *, int, struct buf *, int *); +void roff_userret(struct roff *); void roff_endparse(struct roff *); void roff_setreg(struct roff *, const char *, int, char sign); int roff_getreg(struct roff *, const char *); |