From 637b922ab2b2aa18419a0abed18ae9d2fed4e50a Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Wed, 8 Apr 2020 11:56:03 +0000 Subject: Use a separate node->tag attribute rather than abusing the node->string attribute for the purpose. No functional change intended. The purpose is to make it possible to later attach tags to text nodes. --- tag.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'tag.c') diff --git a/tag.c b/tag.c index 634b0f03..0c330f46 100644 --- a/tag.c +++ b/tag.c @@ -1,4 +1,4 @@ -/* $Id: tag.c,v 1.33 2020/04/07 22:56:02 schwarze Exp $ */ +/* $Id: tag.c,v 1.34 2020/04/08 11:56:04 schwarze Exp $ */ /* * Copyright (c) 2015,2016,2018,2019,2020 Ingo Schwarze * @@ -83,6 +83,7 @@ void tag_put(const char *s, int prio, struct roff_node *n) { struct tag_entry *entry; + struct roff_node *nold; const char *se; size_t len; unsigned int slot; @@ -155,9 +156,12 @@ tag_put(const char *s, int prio, struct roff_node *n) */ else if (entry->prio > prio || prio == TAG_FALLBACK) { - while (entry->nnodes > 0) - entry->nodes[--entry->nnodes]->flags &= ~NODE_ID; - + while (entry->nnodes > 0) { + nold = entry->nodes[--entry->nnodes]; + nold->flags &= ~NODE_ID; + free(nold->tag); + nold->tag = NULL; + } if (prio == TAG_FALLBACK) { entry->prio = TAG_DELETE; return; @@ -175,8 +179,8 @@ tag_put(const char *s, int prio, struct roff_node *n) entry->prio = prio; n->flags |= NODE_ID; if (n->child == NULL || n->child->string != s || *se != '\0') { - assert(n->string == NULL); - n->string = mandoc_strndup(s, len); + assert(n->tag == NULL); + n->tag = mandoc_strndup(s, len); } } @@ -222,9 +226,9 @@ tag_move_id(struct roff_node *n) } /* FALLTHROUGH */ case MDOC_Pp: /* Target the ROFFT_ELEM =

. */ - if (np->string == NULL) { - np->string = mandoc_strdup(n->string == NULL ? - n->child->string : n->string); + if (np->tag == NULL) { + np->tag = mandoc_strdup(n->tag == NULL ? + n->child->string : n->tag); np->flags |= NODE_ID; n->flags &= ~NODE_ID; } @@ -268,8 +272,11 @@ tag_postprocess(struct roff_node *n) tag_move_id(n); if (n->tok != MDOC_Tg) n->flags |= NODE_HREF; - else if ((n->flags & NODE_ID) == 0) + else if ((n->flags & NODE_ID) == 0) { n->flags |= NODE_NOPRT; + free(n->tag); + n->tag = NULL; + } break; } } -- cgit v1.2.3-56-ge451