Lines Matching defs:mdoc

38 #include "mdoc.h"
45 #define POST_ARGS struct roff_man *mdoc
289 mdoc_node_validate(struct roff_man *mdoc)
294 n = mdoc->last;
295 mdoc->last = mdoc->last->child;
296 while (mdoc->last != NULL) {
297 mdoc_node_validate(mdoc);
298 if (mdoc->last == n)
299 mdoc->last = mdoc->last->child;
301 mdoc->last = mdoc->last->next;
304 mdoc->last = n;
305 mdoc->next = ROFF_NEXT_SIBLING;
310 check_text(mdoc, n->line, n->pos, n->string);
315 check_toptext(mdoc, n->line, n->pos, n->string);
321 post_root(mdoc);
324 check_args(mdoc, mdoc->last);
343 post_par(mdoc);
346 roff_validate(mdoc);
355 (*p)(mdoc);
356 if (mdoc->last == n)
357 mdoc_state(mdoc, n);
363 check_args(struct roff_man *mdoc, struct roff_node *n)
372 check_argv(mdoc, n, &n->args->argv[i]);
376 check_argv(struct roff_man *mdoc, struct roff_node *n, struct mdoc_argv *v)
381 check_text(mdoc, v->line, v->pos, v->value[i]);
385 check_text(struct roff_man *mdoc, int ln, int pos, char *p)
389 if (MDOC_LITERAL & mdoc->flags)
393 mandoc_msg(MANDOCERR_FI_TAB, mdoc->parse,
398 check_toptext(struct roff_man *mdoc, int ln, int pos, const char *p)
406 mandoc_msg(MANDOCERR_BX, mdoc->parse,
409 mandoc_msg(MANDOCERR_BX, mdoc->parse,
412 mandoc_msg(MANDOCERR_BX, mdoc->parse,
415 mandoc_msg(MANDOCERR_BX, mdoc->parse,
425 mandoc_vmsg(MANDOCERR_FUNC, mdoc->parse,
440 tok = mdoc->last->tok;
441 nch = mdoc->last->last;
454 mandoc_vmsg(MANDOCERR_DELIM, mdoc->parse,
457 nch == mdoc->last->child ? "" : " ...", nch->string);
474 tok = mdoc->last->tok;
475 nch = mdoc->last->last;
549 mandoc_vmsg(MANDOCERR_DELIM_NB, mdoc->parse,
552 nch == mdoc->last->child ? "" : " ...", nch->string);
564 n = mdoc->last->parent;
617 mdoc->parse, argv->line,
625 mdoc->parse, argv->line,
632 mdoc->parse, argv->line,
635 rewrite_macro2len(mdoc, argv->value);
641 mdoc->parse, argv->line,
647 mdoc->parse, argv->line,
650 rewrite_macro2len(mdoc, argv->value);
664 mdoc->parse, n->line, n->pos,
675 mdoc->parse, n->line, n->pos, "Bl -%s",
688 mandoc_msg(MANDOCERR_BL_NOTYPE, mdoc->parse,
704 mandoc_msg(MANDOCERR_BL_NOWIDTH, mdoc->parse,
713 mandoc_vmsg(MANDOCERR_BL_SKIPW, mdoc->parse,
741 n = mdoc->last;
763 mandoc_msg(MANDOCERR_BD_FILE, mdoc->parse,
769 mdoc->parse, argv->line,
775 mdoc->parse, argv->line,
778 rewrite_macro2len(mdoc, argv->value);
784 mdoc->parse, argv->line,
798 mdoc->parse, n->line, n->pos,
803 mandoc_msg(MANDOCERR_BD_NOTYPE, mdoc->parse,
820 n = mdoc->last;
827 mdoc->parse, argv->line, argv->pos,
845 post_useless(mdoc);
846 n = mdoc->last;
848 mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, n->line,
852 roff_node_delete(mdoc, n->child);
854 roff_word_alloc(mdoc, n->line, n->pos, n->tok == MDOC_Bt ?
856 mdoc->last->flags |= NODE_EOS | NODE_NOSRC;
857 mdoc->last = n;
861 build_list(struct roff_man *mdoc, int tok)
866 n = mdoc->last->next;
868 roff_elem_alloc(mdoc, n->line, n->pos, tok);
869 mdoc->last->flags |= NODE_NOSRC;
870 mdoc_node_relink(mdoc, n);
871 n = mdoc->last = mdoc->last->parent;
872 mdoc->next = ROFF_NEXT_SIBLING;
876 roff_word_alloc(mdoc, n->line, n->pos, ",");
877 mdoc->last->flags |= NODE_DELIMC | NODE_NOSRC;
879 n = mdoc->last->next;
881 roff_word_alloc(mdoc, n->line, n->pos, "and");
882 mdoc->last->flags |= NODE_NOSRC;
893 post_std(mdoc);
895 n = mdoc->last;
896 mdoc->next = ROFF_NEXT_CHILD;
897 roff_word_alloc(mdoc, n->line, n->pos, "The");
898 mdoc->last->flags |= NODE_NOSRC;
900 if (mdoc->last->next != NULL)
901 ic = build_list(mdoc, MDOC_Nm);
902 else if (mdoc->meta.name != NULL) {
903 roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Nm);
904 mdoc->last->flags |= NODE_NOSRC;
905 roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);
906 mdoc->last->flags |= NODE_NOSRC;
907 mdoc->last = mdoc->last->parent;
908 mdoc->next = ROFF_NEXT_SIBLING;
911 mandoc_msg(MANDOCERR_EX_NONAME, mdoc->parse,
916 roff_word_alloc(mdoc, n->line, n->pos,
918 mdoc->last->flags |= NODE_NOSRC;
919 roff_word_alloc(mdoc, n->line, n->pos,
921 mdoc->last->flags |= NODE_EOS | NODE_NOSRC;
922 mdoc->last = n;
931 post_delim_nb(mdoc);
933 n = mdoc->last;
935 mdoc->next = ROFF_NEXT_CHILD;
939 roff_word_alloc(mdoc, n->line, n->pos, p);
940 mdoc->last->flags = NODE_NOSRC;
941 mdoc->last = n;
945 mandoc_vmsg(MANDOCERR_LB_BAD, mdoc->parse, n->child->line,
948 roff_word_alloc(mdoc, n->line, n->pos, "library");
949 mdoc->last->flags = NODE_NOSRC;
950 roff_word_alloc(mdoc, n->line, n->pos, "\\(Lq");
951 mdoc->last->flags = NODE_DELIMO | NODE_NOSRC;
952 mdoc->last = mdoc->last->next;
953 roff_word_alloc(mdoc, n->line, n->pos, "\\(Rq");
954 mdoc->last->flags = NODE_DELIMC | NODE_NOSRC;
955 mdoc->last = n;
964 post_std(mdoc);
966 n = mdoc->last;
967 mdoc->next = ROFF_NEXT_CHILD;
969 roff_word_alloc(mdoc, n->line, n->pos, "The");
970 mdoc->last->flags |= NODE_NOSRC;
971 ic = build_list(mdoc, MDOC_Fn);
972 roff_word_alloc(mdoc, n->line, n->pos,
974 mdoc->last->flags |= NODE_NOSRC;
975 roff_word_alloc(mdoc, n->line, n->pos,
978 roff_word_alloc(mdoc, n->line, n->pos, "Upon successful "
980 mdoc->last->flags |= NODE_NOSRC;
982 roff_word_alloc(mdoc, n->line, n->pos, "otherwise "
984 mdoc->last->flags |= NODE_NOSRC;
985 roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Va);
986 mdoc->last->flags |= NODE_NOSRC;
987 roff_word_alloc(mdoc, n->line, n->pos, "errno");
988 mdoc->last->flags |= NODE_NOSRC;
989 mdoc->last = mdoc->last->parent;
990 mdoc->next = ROFF_NEXT_SIBLING;
991 roff_word_alloc(mdoc, n->line, n->pos,
993 mdoc->last->flags |= NODE_EOS | NODE_NOSRC;
994 mdoc->last = n;
1002 post_delim(mdoc);
1004 n = mdoc->last;
1009 mandoc_msg(MANDOCERR_ARG_STD, mdoc->parse,
1019 n = mdoc->last;
1024 mandoc_vmsg(MANDOCERR_ST_BAD, mdoc->parse,
1026 roff_node_delete(mdoc, n);
1031 mdoc->next = ROFF_NEXT_CHILD;
1032 roff_word_alloc(mdoc, nch->line, nch->pos, p);
1033 mdoc->last->flags |= NODE_NOSRC;
1034 mdoc->last= n;
1042 n = mdoc->last;
1044 mandoc_msg(MANDOCERR_MACRO_OBS, mdoc->parse,
1053 n = mdoc->last;
1054 mandoc_msg(MANDOCERR_MACRO_USELESS, mdoc->parse,
1072 np = mdoc->last;
1084 mandoc_msg(MANDOCERR_BF_NOFONT, mdoc->parse,
1091 mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
1122 mandoc_vmsg(MANDOCERR_BF_BADFONT, mdoc->parse,
1134 n = mdoc->last->child;
1138 mandoc_msg(MANDOCERR_FN_PAREN, mdoc->parse,
1146 post_fname(mdoc);
1147 post_fa(mdoc);
1155 n = mdoc->last;
1161 mandoc_msg(MANDOCERR_FO_NOHEAD, mdoc->parse,
1166 mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
1170 roff_node_delete(mdoc, n->last);
1172 post_delim(mdoc);
1174 post_fname(mdoc);
1183 for (n = mdoc->last->child; n != NULL; n = n->next) {
1190 mandoc_msg(MANDOCERR_FA_COMMA, mdoc->parse,
1196 post_delim_nb(mdoc);
1204 n = mdoc->last;
1207 n->child->type == ROFFT_TEXT && mdoc->meta.msec != NULL)
1208 mandoc_xr_add(mdoc->meta.msec, n->child->string, -1, -1);
1213 mdoc_node_relink(mdoc, n->last);
1215 if (mdoc->meta.name == NULL)
1216 deroff(&mdoc->meta.name, n);
1218 if (mdoc->meta.name == NULL ||
1219 (mdoc->lastsec == SEC_NAME && n->child == NULL))
1220 mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse,
1225 post_delim_nb(mdoc);
1228 post_delim(mdoc);
1235 mdoc->meta.name == NULL)
1238 mdoc->next = ROFF_NEXT_CHILD;
1239 roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);
1240 mdoc->last->flags |= NODE_NOSRC;
1241 mdoc->last = n;
1249 n = mdoc->last;
1255 mandoc_msg(MANDOCERR_ND_LATE, mdoc->parse,
1259 mandoc_msg(MANDOCERR_ND_EMPTY, mdoc->parse,
1262 post_delim(mdoc);
1264 post_hyph(mdoc);
1272 n = mdoc->last;
1278 roff_node_delete(mdoc, n);
1280 mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
1283 post_hyph(mdoc);
1289 mdoc->parse, n->line, n->pos, "Bd");
1290 mdoc->next = ROFF_NEXT_SIBLING;
1292 mdoc_node_relink(mdoc,
1294 roff_node_delete(mdoc, n);
1297 post_bd(mdoc);
1298 post_prevpar(mdoc);
1303 mdoc->parse, n->line, n->pos,
1319 if (mdoc->last->child != NULL) {
1320 post_delim_nb(mdoc);
1330 nn = mdoc->last;
1333 mdoc->next = ROFF_NEXT_CHILD;
1334 roff_word_alloc(mdoc, nn->line, nn->pos, "file");
1335 mdoc->last->flags |= NODE_NOSRC;
1336 roff_word_alloc(mdoc, nn->line, nn->pos, "...");
1337 mdoc->last->flags |= NODE_NOSRC;
1341 mdoc->next = ROFF_NEXT_CHILD;
1342 roff_word_alloc(mdoc, nn->line, nn->pos, "~");
1343 mdoc->last->flags |= NODE_NOSRC;
1348 mdoc->last = nn;
1357 n = mdoc->last;
1368 mandoc_vmsg(MANDOCERR_AT_BAD, mdoc->parse,
1371 mdoc->next = ROFF_NEXT_CHILD;
1373 roff_word_alloc(mdoc, nch->line, nch->pos, att);
1376 roff_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX");
1377 mdoc->last->flags |= NODE_NOSRC;
1378 mdoc->last = n;
1386 post_an_norm(mdoc);
1388 np = mdoc->last;
1392 mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
1395 post_delim_nb(mdoc);
1397 mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
1405 post_obsolete(mdoc);
1406 if (mdoc->last->type == ROFFT_BLOCK)
1407 mdoc->last->norm->Es = mdoc->last_es;
1414 post_obsolete(mdoc);
1415 mdoc->last_es = mdoc->last;
1425 post_delim_nb(mdoc);
1427 n = mdoc->last;
1448 mdoc->next = ROFF_NEXT_CHILD;
1449 roff_word_alloc(mdoc, n->child->line, n->child->pos, v);
1450 v = mdoc->last->string;
1452 mdoc->last->flags |= NODE_NOSRC;
1453 mdoc->last = n;
1464 mdoc->next = ROFF_NEXT_CHILD;
1465 roff_word_alloc(mdoc, n->line, n->pos, os);
1466 mdoc->last->flags |= NODE_NOSRC;
1467 mdoc->last = n;
1477 post_prevpar(mdoc);
1479 nit = mdoc->last;
1494 mdoc->parse, nit->line, nit->pos,
1504 mdoc->parse, nit->line, nit->pos,
1510 mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse,
1522 mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
1524 roff_node_delete(mdoc, nit);
1533 mandoc_msg(MANDOCERR_TA_LINE, mdoc->parse,
1538 mdoc->parse, nit->line, nit->pos,
1542 mandoc_msg(MANDOCERR_IT_NOARG, mdoc->parse,
1555 post_prevpar(mdoc);
1557 n = mdoc->last;
1574 mdoc->parse, nc->line, nc->pos,
1576 mdoc_node_relink(mdoc, nc);
1580 mdoc->parse, nc->line, nc->pos,
1582 roff_node_delete(mdoc, nc);
1595 rewrite_macro2len(struct roff_man *mdoc, char **arg)
1604 else if ((tok = roffhash_find(mdoc->mdocmac, *arg, 0)) == TOKEN_NONE)
1620 post_bl_norm(mdoc);
1622 nh = mdoc->last;
1626 mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
1629 roff_node_delete(mdoc, nch);
1685 nbody = mdoc->last;
1688 post_bl_block(mdoc);
1691 post_bl_head(mdoc);
1703 mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
1726 mdoc->last = nchild;
1727 mdoc->next = ROFF_NEXT_SIBLING;
1728 roff_block_alloc(mdoc, nchild->line,
1730 roff_head_alloc(mdoc, nchild->line,
1732 mdoc->next = ROFF_NEXT_SIBLING;
1733 roff_body_alloc(mdoc, nchild->line,
1736 mdoc_node_relink(mdoc, nchild);
1740 mdoc->next = ROFF_NEXT_SIBLING;
1742 mdoc->last = nbody;
1746 mandoc_msg(MANDOCERR_BL_MOVE, mdoc->parse,
1785 if (mdoc->meta.os_e != MANDOC_OS_NETBSD)
1803 mdoc->parse, nnext->line, nnext->pos,
1808 mdoc->parse, nnext->line, nnext->pos,
1820 n = mdoc->last;
1824 mdoc->parse, n->line, n->pos, "Bk");
1825 roff_node_delete(mdoc, n);
1834 nch = mdoc->last->child;
1837 mdoc->flags ^= MDOC_SMOFF;
1844 mdoc->flags &= ~MDOC_SMOFF;
1848 mdoc->flags |= MDOC_SMOFF;
1853 mdoc->parse, nch->line, nch->pos,
1854 "%s %s", roff_name[mdoc->last->tok], nch->string);
1855 mdoc_node_relink(mdoc, nch);
1888 if (mdoc->meta.date == NULL)
1889 mdoc->meta.date = mdoc->quick ? mandoc_strdup("") :
1890 mandoc_normdate(mdoc, NULL, 0, 0);
1892 if (mdoc->meta.title == NULL) {
1894 mdoc->parse, 0, 0, "EOF");
1895 mdoc->meta.title = mandoc_strdup("UNTITLED");
1898 if (mdoc->meta.vol == NULL)
1899 mdoc->meta.vol = mandoc_strdup("LOCAL");
1901 if (mdoc->meta.os == NULL) {
1903 mdoc->parse, 0, 0, NULL);
1904 mdoc->meta.os = mandoc_strdup("");
1905 } else if (mdoc->meta.os_e &&
1906 (mdoc->meta.rcsids & (1 << mdoc->meta.os_e)) == 0)
1907 mandoc_msg(MANDOCERR_RCS_MISSING, mdoc->parse, 0, 0,
1908 mdoc->meta.os_e == MANDOC_OS_OPENBSD ?
1911 if (mdoc->meta.arch != NULL &&
1912 (arch = arches[mdoc->meta.os_e]) != NULL) {
1913 while (*arch != NULL && strcmp(*arch, mdoc->meta.arch))
1916 n = mdoc->first->child;
1921 mdoc->parse, n->line, n->pos,
1922 "Dt ... %s %s", mdoc->meta.arch,
1923 mdoc->meta.os_e == MANDOC_OS_OPENBSD ?
1930 n = mdoc->first->child;
1936 mandoc_msg(MANDOCERR_DOC_EMPTY, mdoc->parse, 0, 0, NULL);
1938 mandoc_msg(MANDOCERR_SEC_BEFORE, mdoc->parse,
1948 np = mdoc->last;
1954 mandoc_msg(MANDOCERR_RS_EMPTY, mdoc->parse,
1973 mandoc_msg(MANDOCERR_RS_BAD, mdoc->parse,
2041 for (nch = mdoc->last->child; nch != NULL; nch = nch->next) {
2060 n = mdoc->last;
2063 mandoc_msg(MANDOCERR_NS_SKIP, mdoc->parse,
2070 post_delim(mdoc);
2071 post_hyph(mdoc);
2078 post_ignpar(mdoc);
2080 switch (mdoc->last->type) {
2082 post_sh_head(mdoc);
2085 switch (mdoc->lastsec) {
2087 post_sh_name(mdoc);
2090 post_sh_see_also(mdoc);
2093 post_sh_authors(mdoc);
2112 for (n = mdoc->last->child; n != NULL; n = n->next) {
2117 mdoc->parse, n->line, n->pos,
2125 mdoc->parse, n->line, n->pos, NULL);
2136 mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse,
2144 mandoc_msg(MANDOCERR_NAMESEC_NONM, mdoc->parse,
2145 mdoc->last->line, mdoc->last->pos, NULL);
2147 mandoc_msg(MANDOCERR_NAMESEC_NOND, mdoc->parse,
2148 mdoc->last->line, mdoc->last->pos, NULL);
2159 n = mdoc->last->child;
2174 mdoc->parse, n->line, n->pos,
2180 mdoc->parse, n->line, n->pos,
2186 mdoc->parse, n->line, n->pos,
2208 mandoc_vmsg(MANDOCERR_XR_PUNCT, mdoc->parse,
2229 if ( ! child_an(mdoc->last))
2230 mandoc_msg(MANDOCERR_AN_MISSING, mdoc->parse,
2231 mdoc->last->line, mdoc->last->pos, NULL);
2291 sec = mdoc->last->sec;
2295 if (sec != SEC_NAME && mdoc->lastnamed == SEC_NONE)
2296 mandoc_vmsg(MANDOCERR_NAMESEC_FIRST, mdoc->parse,
2297 mdoc->last->line, mdoc->last->pos, "Sh %s",
2299 (nch = mdoc->last->child) == NULL ? "" :
2306 roff_setreg(mdoc->roff, "nS", 1, '=');
2307 mdoc->flags |= MDOC_SYNOPSIS;
2309 roff_setreg(mdoc->roff, "nS", 0, '=');
2310 mdoc->flags &= ~MDOC_SYNOPSIS;
2315 mdoc->lastsec = sec;
2320 if ((nch = mdoc->last->child) == NULL ||
2333 mandoc_vmsg(MANDOCERR_SEC_TYPO, mdoc->parse,
2344 if (sec == mdoc->lastnamed)
2345 mandoc_vmsg(MANDOCERR_SEC_REP, mdoc->parse,
2346 mdoc->last->line, mdoc->last->pos,
2349 if (sec < mdoc->lastnamed)
2350 mandoc_vmsg(MANDOCERR_SEC_ORDER, mdoc->parse,
2351 mdoc->last->line, mdoc->last->pos,
2356 mdoc->lastnamed = sec;
2360 if (mdoc->meta.msec == NULL)
2366 if (*mdoc->meta.msec == '4')
2372 if (*mdoc->meta.msec == '2')
2374 if (*mdoc->meta.msec == '3')
2380 if (*mdoc->meta.msec == '9')
2384 mandoc_vmsg(MANDOCERR_SEC_MSEC, mdoc->parse,
2385 mdoc->last->line, mdoc->last->pos,
2398 n = mdoc->last;
2401 mandoc_vmsg(MANDOCERR_XR_NOSEC, mdoc->parse,
2407 mandoc_vmsg(MANDOCERR_XR_SELF, mdoc->parse,
2411 post_delim_nb(mdoc);
2419 switch (mdoc->last->type) {
2421 post_prevpar(mdoc);
2424 post_delim(mdoc);
2425 post_hyph(mdoc);
2433 if ((np = mdoc->last->child) != NULL)
2436 mdoc->parse, np->line, np->pos,
2438 roff_name[mdoc->last->tok]);
2439 roff_node_delete(mdoc, np);
2442 if ((np = mdoc->last->last) != NULL)
2444 mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,
2447 roff_name[mdoc->last->tok]);
2448 roff_node_delete(mdoc, np);
2457 n = mdoc->last;
2479 mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,
2482 roff_node_delete(mdoc, n->prev);
2490 np = mdoc->last;
2492 post_prevpar(mdoc);
2496 mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
2501 mdoc->parse, np->line, np->pos, "%s %s",
2504 if ((np = mdoc->last->prev) == NULL) {
2505 np = mdoc->last->parent;
2509 (mdoc->last->tok != ROFF_br ||
2513 mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,
2514 mdoc->last->line, mdoc->last->pos, "%s after %s",
2515 roff_name[mdoc->last->tok], roff_name[np->tok]);
2516 roff_node_delete(mdoc, mdoc->last);
2525 n = mdoc->last;
2528 if (mdoc->meta.date != NULL) {
2529 mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,
2531 free(mdoc->meta.date);
2532 } else if (mdoc->flags & MDOC_PBODY)
2533 mandoc_msg(MANDOCERR_PROLOG_LATE, mdoc->parse,
2535 else if (mdoc->meta.title != NULL)
2536 mandoc_msg(MANDOCERR_PROLOG_ORDER, mdoc->parse,
2538 else if (mdoc->meta.os != NULL)
2539 mandoc_msg(MANDOCERR_PROLOG_ORDER, mdoc->parse,
2543 mdoc->meta.date = mdoc->quick ? mandoc_strdup("") :
2544 mandoc_normdate(mdoc, NULL, n->line, n->pos);
2550 if (mdoc->quick)
2551 mdoc->meta.date = datestr;
2553 mdoc->meta.date = mandoc_normdate(mdoc,
2566 n = mdoc->last;
2569 if (mdoc->flags & MDOC_PBODY) {
2570 mandoc_msg(MANDOCERR_DT_LATE, mdoc->parse,
2575 if (mdoc->meta.title != NULL)
2576 mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,
2578 else if (mdoc->meta.os != NULL)
2579 mandoc_msg(MANDOCERR_PROLOG_ORDER, mdoc->parse,
2582 free(mdoc->meta.title);
2583 free(mdoc->meta.msec);
2584 free(mdoc->meta.vol);
2585 free(mdoc->meta.arch);
2587 mdoc->meta.title = NULL;
2588 mdoc->meta.msec = NULL;
2589 mdoc->meta.vol = NULL;
2590 mdoc->meta.arch = NULL;
2597 mdoc->parse, n->line, n->pos, "Dt");
2598 mdoc->meta.title = mandoc_strdup("UNTITLED");
2600 mdoc->meta.title = mandoc_strdup(nn->string);
2607 mdoc->parse, nn->line,
2621 mdoc->parse, n->line, n->pos,
2622 "Dt %s", mdoc->meta.title);
2623 mdoc->meta.vol = mandoc_strdup("LOCAL");
2627 mdoc->meta.msec = mandoc_strdup(nn->string);
2633 mandoc_vmsg(MANDOCERR_MSEC_BAD, mdoc->parse,
2635 mdoc->meta.vol = mandoc_strdup(nn->string);
2637 mdoc->meta.vol = mandoc_strdup(cp);
2646 mdoc->meta.arch = mandoc_strdup(nn->string);
2651 mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
2661 post_delim_nb(mdoc);
2663 n = mdoc->last;
2672 mandoc_msg(MANDOCERR_BX, mdoc->parse,
2674 mdoc->last = nch;
2676 mdoc->next = ROFF_NEXT_SIBLING;
2677 roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns);
2678 mdoc->last->flags |= NODE_NOSRC;
2679 mdoc->next = ROFF_NEXT_SIBLING;
2681 mdoc->next = ROFF_NEXT_CHILD;
2682 roff_word_alloc(mdoc, n->line, n->pos, "BSD");
2683 mdoc->last->flags |= NODE_NOSRC;
2686 mdoc->last = n;
2690 roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns);
2691 mdoc->last->flags |= NODE_NOSRC;
2692 mdoc->next = ROFF_NEXT_SIBLING;
2693 roff_word_alloc(mdoc, n->line, n->pos, "-");
2694 mdoc->last->flags |= NODE_NOSRC;
2695 roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns);
2696 mdoc->last->flags |= NODE_NOSRC;
2697 mdoc->last = n;
2717 n = mdoc->last;
2720 if (mdoc->meta.os != NULL)
2721 mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,
2723 else if (mdoc->flags & MDOC_PBODY)
2724 mandoc_msg(MANDOCERR_PROLOG_LATE, mdoc->parse,
2727 post_delim(mdoc);
2738 free(mdoc->meta.os);
2739 mdoc->meta.os = NULL;
2740 deroff(&mdoc->meta.os, n);
2741 if (mdoc->meta.os)
2744 if (mdoc->os_s != NULL) {
2745 mdoc->meta.os = mandoc_strdup(mdoc->os_s);
2750 mdoc->meta.os = mandoc_strdup(OSNAME);
2754 mandoc_msg(MANDOCERR_OS_UNAME, mdoc->parse,
2761 mdoc->meta.os = mandoc_strdup(defbuf);
2765 if (mdoc->meta.os_e == MANDOC_OS_OTHER) {
2766 if (strstr(mdoc->meta.os, "OpenBSD") != NULL)
2767 mdoc->meta.os_e = MANDOC_OS_OPENBSD;
2768 else if (strstr(mdoc->meta.os, "NetBSD") != NULL)
2769 mdoc->meta.os_e = MANDOC_OS_NETBSD;
2779 mandoc_vmsg(MANDOCERR_OS_ARG, mdoc->parse,
2782 mdoc->meta.os_e == MANDOC_OS_OPENBSD ?
2791 if (mdoc->meta.os_e == MANDOC_OS_OPENBSD)
2793 mdoc->parse, n->line, n->pos,
2796 if (mdoc->meta.os_e == MANDOC_OS_NETBSD)
2798 mdoc->parse, n->line, n->pos,