=================================================================== RCS file: /cvs/mandoc/mdoc_term.c,v retrieving revision 1.9 retrieving revision 1.13 diff -u -p -r1.9 -r1.13 --- mandoc/mdoc_term.c 2009/06/11 12:07:49 1.9 +++ mandoc/mdoc_term.c 2009/06/15 20:26:47 1.13 @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.9 2009/06/11 12:07:49 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.13 2009/06/15 20:26:47 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -86,10 +86,10 @@ struct termpair { struct termpair *ppair; int type; #define TERMPAIR_FLAG (1 << 0) - int flag; - size_t offset; - size_t rmargin; - int count; + int flag; /* Whether being used. */ + size_t offset; /* Left margin. */ + size_t rmargin; /* Right margin. */ + int count; /* Enum count. */ }; #define TERMPAIR_SETFLAG(termp, p, fl) \ @@ -415,11 +415,7 @@ print_foot(struct termp *p, const struct mdoc_meta *me tm = localtime(&meta->date); -#ifdef __OpenBSD__ - if (NULL == strftime(buf, p->rmargin, "%B %d, %Y", tm)) -#else if (0 == strftime(buf, p->rmargin, "%B %d, %Y", tm)) -#endif err(1, "strftime"); (void)strlcpy(os, meta->os, p->rmargin); @@ -592,6 +588,8 @@ arg_listtype(const struct mdoc_node *n) break; } + /* FIXME: mandated by parser. */ + errx(1, "list type not supported"); /* NOTREACHED */ } @@ -602,10 +600,15 @@ arg_offset(const struct mdoc_argv *arg) { assert(*arg->value); + if (0 == strcmp(*arg->value, "left")) + return(0); if (0 == strcmp(*arg->value, "indent")) return(INDENT); if (0 == strcmp(*arg->value, "indent-two")) return(INDENT * 2); + + /* FIXME: needs to support field-widths (10n, etc.). */ + return(strlen(*arg->value)); } @@ -1067,6 +1070,8 @@ termp_rv_pre(DECL_ARGS) { int i; + /* FIXME: mandated by parser. */ + if (-1 == (i = arg_getattr(MDOC_Std, node))) errx(1, "expected -std argument"); if (1 != node->args->argv[i].sz) @@ -1100,6 +1105,8 @@ termp_ex_pre(DECL_ARGS) { int i; + /* FIXME: mandated by parser? */ + if (-1 == (i = arg_getattr(MDOC_Std, node))) errx(1, "expected -std argument"); if (1 != node->args->argv[i].sz) @@ -1153,8 +1160,9 @@ termp_xr_pre(DECL_ARGS) { const struct mdoc_node *n; - if (NULL == (n = node->child)) - errx(1, "expected text line argument"); + assert(node->child && MDOC_TEXT == node->child->type); + n = node->child; + term_word(p, n->string); if (NULL == (n = n->next)) return(0); @@ -1288,8 +1296,7 @@ termp_lb_pre(DECL_ARGS) { const char *lb; - if (NULL == node->child) - errx(1, "expected text line argument"); + assert(node->child && MDOC_TEXT == node->child->type); if ((lb = mdoc_a2lib(node->child->string))) { term_word(p, lb); return(0); @@ -1397,8 +1404,7 @@ termp_fn_pre(DECL_ARGS) { const struct mdoc_node *n; - if (NULL == node->child) - errx(1, "expected text line arguments"); + assert(node->child && MDOC_TEXT == node->child->type); /* FIXME: can be "type funcname" "type varname"... */ @@ -1505,6 +1511,8 @@ termp_bd_pre(DECL_ARGS) else if (MDOC_BODY != node->type) return(1); + /* FIXME: display type should be mandated by parser. */ + if (NULL == node->parent->args) errx(1, "missing display type"); @@ -1953,8 +1961,7 @@ termp_fo_pre(DECL_ARGS) p->flags |= ttypes[TTYPE_FUNC_NAME]; for (n = node->child; n; n = n->next) { - if (MDOC_TEXT != n->type) - errx(1, "expected text line argument"); + assert(MDOC_TEXT == n->type); term_word(p, n->string); } p->flags &= ~ttypes[TTYPE_FUNC_NAME]; @@ -1998,9 +2005,7 @@ termp_bf_pre(DECL_ARGS) return(1); } - if (MDOC_TEXT != n->type) - errx(1, "expected text line arguments"); - + assert(MDOC_TEXT == n->type); if (0 == strcmp("Em", n->string)) TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_EMPH]); else if (0 == strcmp("Sy", n->string)) @@ -2036,9 +2041,7 @@ static int termp_sm_pre(DECL_ARGS) { - if (NULL == node->child || MDOC_TEXT != node->child->type) - errx(1, "expected boolean line argument"); - + assert(node->child && MDOC_TEXT == node->child->type); if (0 == strcmp("on", node->child->string)) { p->flags &= ~TERMP_NONOSPACE; p->flags &= ~TERMP_NOSPACE; @@ -2109,21 +2112,25 @@ termp_lk_pre(DECL_ARGS) { const struct mdoc_node *n; - if (NULL == (n = node->child)) - errx(1, "expected line argument"); + assert(node->child); + n = node->child; + if (NULL == n->next) { + TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_LINK_ANCHOR]); + return(1); + } + p->flags |= ttypes[TTYPE_LINK_ANCHOR]; term_word(p, n->string); - p->flags &= ~ttypes[TTYPE_LINK_ANCHOR]; p->flags |= TERMP_NOSPACE; term_word(p, ":"); + p->flags &= ~ttypes[TTYPE_LINK_ANCHOR]; p->flags |= ttypes[TTYPE_LINK_TEXT]; - for ( ; n; n = n->next) { + for (n = n->next; n; n = n->next) term_word(p, n->string); - } - p->flags &= ~ttypes[TTYPE_LINK_TEXT]; + p->flags &= ~ttypes[TTYPE_LINK_TEXT]; return(0); }