diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-12-22 11:15:16 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-12-22 11:15:16 +0000 |
commit | 544a766eb06bf03fc9ae275a02575c4dc54c8d32 (patch) | |
tree | 5094d1a10b9a3243e5713b32cd76f383eb2dd04d /mdoc.h | |
parent | 89a32203ddc128f3448f944bcb1a47eac62514d9 (diff) | |
download | mandoc-544a766eb06bf03fc9ae275a02575c4dc54c8d32.tar.gz |
Implement reference-counted version of original union mdoc_data. This
simplifies clean-up and allows for more types without extra hassle.
Also made in-line literal types in -T[x]html use CODE instead of SPAN to
match how literal blocks use PRE.
Diffstat (limited to 'mdoc.h')
-rw-r--r-- | mdoc.h | 21 |
1 files changed, 15 insertions, 6 deletions
@@ -358,11 +358,20 @@ struct mdoc_an { * of iterating through the mdoc_arg pointers of a node: defaults are * provided, etc. */ -union mdoc_data { - struct mdoc_an *An; - struct mdoc_bd *Bd; - struct mdoc_bf *Bf; - struct mdoc_bl *Bl; +union mdoc_data { + struct mdoc_an An; + struct mdoc_bd Bd; + struct mdoc_bf Bf; + struct mdoc_bl Bl; +}; + +/* + * Reference-counted structure for containing normalised arguments of + * certain macros (those listed in union mdoc_data). + */ +struct mdoc_norm { + int refcnt; + union mdoc_data d; }; /* @@ -387,6 +396,7 @@ struct mdoc_node { #define MDOC_ENDED (1 << 5) /* rendering has been ended */ enum mdoc_type type; /* AST node type */ enum mdoc_sec sec; /* current named section */ + struct mdoc_norm *norm; /* ref-counted, normalised args */ /* FIXME: these can be union'd to shave a few bytes. */ struct mdoc_arg *args; /* BLOCK/ELEM */ struct mdoc_node *pending; /* BLOCK */ @@ -395,7 +405,6 @@ struct mdoc_node { struct mdoc_node *tail; /* BLOCK */ char *string; /* TEXT */ enum mdoc_endbody end; /* BODY */ - union mdoc_data data; }; /* |