Lines Matching refs:mdoc
92 static void mdoc_node_unlink(struct mdoc *,
94 static void mdoc_free1(struct mdoc *);
95 static void mdoc_alloc1(struct mdoc *);
96 static struct mdoc_node *node_alloc(struct mdoc *, int, int,
98 static int node_append(struct mdoc *,
101 static int mdoc_preptext(struct mdoc *, int, char *, int);
103 static int mdoc_ptext(struct mdoc *, int, char *, int);
104 static int mdoc_pmacro(struct mdoc *, int, char *, int);
107 mdoc_node(const struct mdoc *mdoc) in mdoc_node() argument
110 assert( ! (MDOC_HALT & mdoc->flags)); in mdoc_node()
111 return(mdoc->first); in mdoc_node()
116 mdoc_meta(const struct mdoc *mdoc) in mdoc_meta() argument
119 assert( ! (MDOC_HALT & mdoc->flags)); in mdoc_meta()
120 return(&mdoc->meta); in mdoc_meta()
128 mdoc_free1(struct mdoc *mdoc) in mdoc_free1() argument
131 if (mdoc->first) in mdoc_free1()
132 mdoc_node_delete(mdoc, mdoc->first); in mdoc_free1()
133 if (mdoc->meta.title) in mdoc_free1()
134 free(mdoc->meta.title); in mdoc_free1()
135 if (mdoc->meta.os) in mdoc_free1()
136 free(mdoc->meta.os); in mdoc_free1()
137 if (mdoc->meta.name) in mdoc_free1()
138 free(mdoc->meta.name); in mdoc_free1()
139 if (mdoc->meta.arch) in mdoc_free1()
140 free(mdoc->meta.arch); in mdoc_free1()
141 if (mdoc->meta.vol) in mdoc_free1()
142 free(mdoc->meta.vol); in mdoc_free1()
143 if (mdoc->meta.msec) in mdoc_free1()
144 free(mdoc->meta.msec); in mdoc_free1()
145 if (mdoc->meta.date) in mdoc_free1()
146 free(mdoc->meta.date); in mdoc_free1()
154 mdoc_alloc1(struct mdoc *mdoc) in mdoc_alloc1() argument
157 memset(&mdoc->meta, 0, sizeof(struct mdoc_meta)); in mdoc_alloc1()
158 mdoc->flags = 0; in mdoc_alloc1()
159 mdoc->lastnamed = mdoc->lastsec = SEC_NONE; in mdoc_alloc1()
160 mdoc->last = mandoc_calloc(1, sizeof(struct mdoc_node)); in mdoc_alloc1()
161 mdoc->first = mdoc->last; in mdoc_alloc1()
162 mdoc->last->type = MDOC_ROOT; in mdoc_alloc1()
163 mdoc->last->tok = MDOC_MAX; in mdoc_alloc1()
164 mdoc->next = MDOC_NEXT_CHILD; in mdoc_alloc1()
175 mdoc_reset(struct mdoc *mdoc) in mdoc_reset() argument
178 mdoc_free1(mdoc); in mdoc_reset()
179 mdoc_alloc1(mdoc); in mdoc_reset()
188 mdoc_free(struct mdoc *mdoc) in mdoc_free() argument
191 mdoc_free1(mdoc); in mdoc_free()
192 free(mdoc); in mdoc_free()
199 struct mdoc *
202 struct mdoc *p; in mdoc_alloc()
204 p = mandoc_calloc(1, sizeof(struct mdoc)); in mdoc_alloc()
221 mdoc_endparse(struct mdoc *mdoc) in mdoc_endparse() argument
224 assert( ! (MDOC_HALT & mdoc->flags)); in mdoc_endparse()
225 if (mdoc_macroend(mdoc)) in mdoc_endparse()
227 mdoc->flags |= MDOC_HALT; in mdoc_endparse()
232 mdoc_addeqn(struct mdoc *mdoc, const struct eqn *ep) in mdoc_addeqn() argument
236 assert( ! (MDOC_HALT & mdoc->flags)); in mdoc_addeqn()
240 if (SEC_NONE == mdoc->lastnamed) { in mdoc_addeqn()
241 mdoc_pmsg(mdoc, ep->ln, ep->pos, MANDOCERR_NOTEXT); in mdoc_addeqn()
245 n = node_alloc(mdoc, ep->ln, ep->pos, MDOC_MAX, MDOC_EQN); in mdoc_addeqn()
248 if ( ! node_append(mdoc, n)) in mdoc_addeqn()
251 mdoc->next = MDOC_NEXT_SIBLING; in mdoc_addeqn()
256 mdoc_addspan(struct mdoc *mdoc, const struct tbl_span *sp) in mdoc_addspan() argument
260 assert( ! (MDOC_HALT & mdoc->flags)); in mdoc_addspan()
264 if (SEC_NONE == mdoc->lastnamed) { in mdoc_addspan()
265 mdoc_pmsg(mdoc, sp->line, 0, MANDOCERR_NOTEXT); in mdoc_addspan()
269 n = node_alloc(mdoc, sp->line, 0, MDOC_MAX, MDOC_TBL); in mdoc_addspan()
272 if ( ! node_append(mdoc, n)) in mdoc_addspan()
275 mdoc->next = MDOC_NEXT_SIBLING; in mdoc_addspan()
285 mdoc_parseln(struct mdoc *mdoc, int ln, char *buf, int offs) in mdoc_parseln() argument
288 assert( ! (MDOC_HALT & mdoc->flags)); in mdoc_parseln()
290 mdoc->flags |= MDOC_NEWLINE; in mdoc_parseln()
298 if (roff_getreg(mdoc->roff, "nS")) in mdoc_parseln()
299 mdoc->flags |= MDOC_SYNOPSIS; in mdoc_parseln()
301 mdoc->flags &= ~MDOC_SYNOPSIS; in mdoc_parseln()
303 return(roff_getcontrol(mdoc->roff, buf, &offs) ? in mdoc_parseln()
304 mdoc_pmacro(mdoc, ln, buf, offs) : in mdoc_parseln()
305 mdoc_ptext(mdoc, ln, buf, offs)); in mdoc_parseln()
316 MDOC_PBODY & mdoc->flags) { in mdoc_macro()
317 mdoc_pmsg(mdoc, line, ppos, MANDOCERR_BADBODY); in mdoc_macro()
324 ! (MDOC_PBODY & mdoc->flags)) { in mdoc_macro()
325 mdoc_pmsg(mdoc, line, ppos, MANDOCERR_BADPROLOG); in mdoc_macro()
326 if (NULL == mdoc->meta.msec) in mdoc_macro()
327 mdoc->meta.msec = mandoc_strdup("1"); in mdoc_macro()
328 if (NULL == mdoc->meta.title) in mdoc_macro()
329 mdoc->meta.title = mandoc_strdup("UNKNOWN"); in mdoc_macro()
330 if (NULL == mdoc->meta.vol) in mdoc_macro()
331 mdoc->meta.vol = mandoc_strdup("LOCAL"); in mdoc_macro()
332 if (NULL == mdoc->meta.os) in mdoc_macro()
333 mdoc->meta.os = mandoc_strdup("LOCAL"); in mdoc_macro()
334 if (NULL == mdoc->meta.date) in mdoc_macro()
335 mdoc->meta.date = mandoc_normdate in mdoc_macro()
336 (mdoc->parse, NULL, line, ppos); in mdoc_macro()
337 mdoc->flags |= MDOC_PBODY; in mdoc_macro()
340 return((*mdoc_macros[tok].fp)(mdoc, tok, line, ppos, pos, buf)); in mdoc_macro()
345 node_append(struct mdoc *mdoc, struct mdoc_node *p) in node_append() argument
348 assert(mdoc->last); in node_append()
349 assert(mdoc->first); in node_append()
352 switch (mdoc->next) { in node_append()
354 mdoc->last->next = p; in node_append()
355 p->prev = mdoc->last; in node_append()
356 p->parent = mdoc->last->parent; in node_append()
359 mdoc->last->child = p; in node_append()
360 p->parent = mdoc->last; in node_append()
388 if ( ! mdoc_valid_pre(mdoc, p)) in node_append()
410 mdoc->last = p; in node_append()
416 if ( ! mdoc_valid_post(mdoc)) in node_append()
428 node_alloc(struct mdoc *mdoc, int line, int pos, in node_alloc() argument
434 p->sec = mdoc->lastsec; in node_alloc()
443 if (MDOC_SYNOPSIS & mdoc->flags) in node_alloc()
447 if (MDOC_NEWLINE & mdoc->flags) in node_alloc()
449 mdoc->flags &= ~MDOC_NEWLINE; in node_alloc()
456 mdoc_tail_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok) in mdoc_tail_alloc() argument
460 p = node_alloc(mdoc, line, pos, tok, MDOC_TAIL); in mdoc_tail_alloc()
461 if ( ! node_append(mdoc, p)) in mdoc_tail_alloc()
463 mdoc->next = MDOC_NEXT_CHILD; in mdoc_tail_alloc()
469 mdoc_head_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok) in mdoc_head_alloc() argument
473 assert(mdoc->first); in mdoc_head_alloc()
474 assert(mdoc->last); in mdoc_head_alloc()
476 p = node_alloc(mdoc, line, pos, tok, MDOC_HEAD); in mdoc_head_alloc()
477 if ( ! node_append(mdoc, p)) in mdoc_head_alloc()
479 mdoc->next = MDOC_NEXT_CHILD; in mdoc_head_alloc()
485 mdoc_body_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok) in mdoc_body_alloc() argument
489 p = node_alloc(mdoc, line, pos, tok, MDOC_BODY); in mdoc_body_alloc()
490 if ( ! node_append(mdoc, p)) in mdoc_body_alloc()
492 mdoc->next = MDOC_NEXT_CHILD; in mdoc_body_alloc()
498 mdoc_endbody_alloc(struct mdoc *mdoc, int line, int pos, enum mdoct tok, in mdoc_endbody_alloc() argument
503 p = node_alloc(mdoc, line, pos, tok, MDOC_BODY); in mdoc_endbody_alloc()
507 if ( ! node_append(mdoc, p)) in mdoc_endbody_alloc()
509 mdoc->next = MDOC_NEXT_SIBLING; in mdoc_endbody_alloc()
515 mdoc_block_alloc(struct mdoc *mdoc, int line, int pos, in mdoc_block_alloc() argument
520 p = node_alloc(mdoc, line, pos, tok, MDOC_BLOCK); in mdoc_block_alloc()
539 if ( ! node_append(mdoc, p)) in mdoc_block_alloc()
541 mdoc->next = MDOC_NEXT_CHILD; in mdoc_block_alloc()
547 mdoc_elem_alloc(struct mdoc *mdoc, int line, int pos, in mdoc_elem_alloc() argument
552 p = node_alloc(mdoc, line, pos, tok, MDOC_ELEM); in mdoc_elem_alloc()
565 if ( ! node_append(mdoc, p)) in mdoc_elem_alloc()
567 mdoc->next = MDOC_NEXT_CHILD; in mdoc_elem_alloc()
572 mdoc_word_alloc(struct mdoc *mdoc, int line, int pos, const char *p) in mdoc_word_alloc() argument
576 n = node_alloc(mdoc, line, pos, MDOC_MAX, MDOC_TEXT); in mdoc_word_alloc()
577 n->string = roff_strdup(mdoc->roff, p); in mdoc_word_alloc()
579 if ( ! node_append(mdoc, n)) in mdoc_word_alloc()
582 mdoc->next = MDOC_NEXT_SIBLING; in mdoc_word_alloc()
587 mdoc_word_append(struct mdoc *mdoc, const char *p) in mdoc_word_append() argument
592 n = mdoc->last; in mdoc_word_append()
593 addstr = roff_strdup(mdoc->roff, p); in mdoc_word_append()
601 mdoc->next = MDOC_NEXT_SIBLING; in mdoc_word_append()
619 mdoc_node_unlink(struct mdoc *mdoc, struct mdoc_node *n) in mdoc_node_unlink() argument
641 if (mdoc && mdoc->last == n) { in mdoc_node_unlink()
643 mdoc->last = n->prev; in mdoc_node_unlink()
644 mdoc->next = MDOC_NEXT_SIBLING; in mdoc_node_unlink()
646 mdoc->last = n->parent; in mdoc_node_unlink()
647 mdoc->next = MDOC_NEXT_CHILD; in mdoc_node_unlink()
651 if (mdoc && mdoc->first == n) in mdoc_node_unlink()
652 mdoc->first = NULL; in mdoc_node_unlink()
657 mdoc_node_delete(struct mdoc *mdoc, struct mdoc_node *p) in mdoc_node_delete() argument
662 mdoc_node_delete(mdoc, p->child); in mdoc_node_delete()
666 mdoc_node_unlink(mdoc, p); in mdoc_node_delete()
671 mdoc_node_relink(struct mdoc *mdoc, struct mdoc_node *p) in mdoc_node_relink() argument
674 mdoc_node_unlink(mdoc, p); in mdoc_node_relink()
675 return(node_append(mdoc, p)); in mdoc_node_relink()
689 mdoc_preptext(struct mdoc *mdoc, int line, char *buf, int offs)
697 if ('\0' != (delim = roff_eqndelim(mdoc->roff)))
702 if ( ! mdoc_ptext(mdoc, line, buf, offs))
719 roff_openeqn(mdoc->roff, NULL, line, offs, buf);
722 if (roff_closeeqn(mdoc->roff))
723 if ( ! mdoc_addeqn(mdoc, roff_eqn(mdoc->roff)))
737 mdoc_ptext(struct mdoc *mdoc, int line, char *buf, int offs) in mdoc_ptext() argument
744 if (SEC_NONE == mdoc->lastnamed) { in mdoc_ptext()
745 mdoc_pmsg(mdoc, line, offs, MANDOCERR_NOTEXT); in mdoc_ptext()
749 assert(mdoc->last); in mdoc_ptext()
750 n = mdoc->last; in mdoc_ptext()
762 mdoc->flags |= MDOC_FREECOL; in mdoc_ptext()
763 return(mdoc_macro(mdoc, MDOC_It, line, offs, &offs, buf)); in mdoc_ptext()
771 mdoc->flags |= MDOC_FREECOL; in mdoc_ptext()
772 return(mdoc_macro(mdoc, MDOC_It, line, offs, &offs, buf)); in mdoc_ptext()
800 if (MDOC_LITERAL & mdoc->flags) in mdoc_ptext()
817 mdoc_pmsg(mdoc, line, (int)(ws-buf), MANDOCERR_EOLNSPACE); in mdoc_ptext()
819 if ('\0' == buf[offs] && ! (MDOC_LITERAL & mdoc->flags)) { in mdoc_ptext()
820 mdoc_pmsg(mdoc, line, (int)(c-buf), MANDOCERR_NOBLANKLN); in mdoc_ptext()
827 if ( ! mdoc_elem_alloc(mdoc, line, offs, MDOC_sp, NULL)) in mdoc_ptext()
830 mdoc->next = MDOC_NEXT_SIBLING; in mdoc_ptext()
832 return(mdoc_valid_post(mdoc)); in mdoc_ptext()
835 if ( ! mdoc_word_alloc(mdoc, line, offs, buf+offs)) in mdoc_ptext()
838 if (MDOC_LITERAL & mdoc->flags) in mdoc_ptext()
850 mdoc->last->flags |= MDOC_EOS; in mdoc_ptext()
861 mdoc_pmacro(struct mdoc *mdoc, int ln, char *buf, int offs) in mdoc_pmacro() argument
871 mdoc_pmsg(mdoc, ln, offs, MANDOCERR_BADCOMMENT); in mdoc_pmacro()
893 mandoc_vmsg(MANDOCERR_MACRO, mdoc->parse, in mdoc_pmacro()
914 mdoc_pmsg(mdoc, ln, offs - 1, MANDOCERR_EOLNSPACE); in mdoc_pmacro()
921 if (NULL == mdoc->last || MDOC_It == tok || MDOC_El == tok) { in mdoc_pmacro()
922 if ( ! mdoc_macro(mdoc, tok, ln, sv, &offs, buf)) in mdoc_pmacro()
927 n = mdoc->last; in mdoc_pmacro()
928 assert(mdoc->last); in mdoc_pmacro()
937 mdoc->flags |= MDOC_FREECOL; in mdoc_pmacro()
938 if ( ! mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf)) in mdoc_pmacro()
953 mdoc->flags |= MDOC_FREECOL; in mdoc_pmacro()
954 if ( ! mdoc_macro(mdoc, MDOC_It, ln, sv, &sv, buf)) in mdoc_pmacro()
961 if ( ! mdoc_macro(mdoc, tok, ln, sv, &offs, buf)) in mdoc_pmacro()
968 mdoc->flags |= MDOC_HALT; in mdoc_pmacro()