=================================================================== RCS file: /cvs/mandoc/mdoc_term.c,v retrieving revision 1.91 retrieving revision 1.94 diff -u -p -r1.91 -r1.94 --- mandoc/mdoc_term.c 2009/10/18 13:34:17 1.91 +++ mandoc/mdoc_term.c 2009/10/22 18:55:32 1.94 @@ -1,4 +1,4 @@ -/* $Id: mdoc_term.c,v 1.91 2009/10/18 13:34:17 kristaps Exp $ */ +/* $Id: mdoc_term.c,v 1.94 2009/10/22 18:55:32 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -23,6 +23,7 @@ #include #include +#include "out.h" #include "term.h" #include "mdoc.h" #include "chars.h" @@ -346,8 +347,8 @@ print_node(DECL_ARGS) static void print_foot(DECL_ARGS) { - struct tm *tm; - char *buf, *os; + char buf[DATESIZ]; + char *os; /* * Output the footer in new-groff style, that is, three columns @@ -357,16 +358,11 @@ print_foot(DECL_ARGS) * SYSTEM DATE SYSTEM */ - if (NULL == (buf = malloc(p->rmargin))) - err(EXIT_FAILURE, "malloc"); if (NULL == (os = malloc(p->rmargin))) err(EXIT_FAILURE, "malloc"); - tm = localtime(&m->date); + time2a(m->date, buf, DATESIZ); - if (0 == strftime(buf, p->rmargin, "%B %e, %Y", tm)) - err(EXIT_FAILURE, "strftime"); - (void)strlcpy(os, m->os, p->rmargin); term_vspace(p); @@ -397,7 +393,6 @@ print_foot(DECL_ARGS) p->rmargin = p->maxrmargin; p->flags = 0; - free(buf); free(os); } @@ -475,35 +470,31 @@ print_head(DECL_ARGS) static size_t arg2height(const struct mdoc_node *n) { - int r; + struct roffsu su; assert(MDOC_TEXT == n->type); assert(n->string); + if ( ! a2roffsu(n->string, &su, SCALE_VS)) + SCALE_VS_INIT(&su, strlen(n->string)); - if ((r = a2height(n->string)) < 0) - return(1); - - return((size_t)r); + return(term_vspan(&su)); } static size_t arg2width(const struct mdoc_argv *arg, int pos) { - int r; + struct roffsu su; assert(arg->value[pos]); - if ('\0' == arg->value[pos][0]) - return(2); + if ( ! a2roffsu(arg->value[pos], &su, SCALE_MAX)) + SCALE_HS_INIT(&su, strlen(arg->value[pos])); - if ((r = a2width(arg->value[pos])) >= 0) - return((size_t)r); - - return(strlen(arg->value[pos]) + 2); + /* XXX: pachemu? */ + return(term_hspan(&su) + 2); } -/* FIXME: put in utility file for front-ends. */ static int arg_listtype(const struct mdoc_node *n) { @@ -548,7 +539,7 @@ arg_listtype(const struct mdoc_node *n) static size_t arg2offs(const struct mdoc_argv *arg) { - int r; + struct roffsu su; if ('\0' == arg->value[0][0]) return(0); @@ -558,10 +549,10 @@ arg2offs(const struct mdoc_argv *arg) return(INDENT + 1); else if (0 == strcmp(arg->value[0], "indent-two")) return((INDENT + 1) * 2); - else if ((r = a2width(arg->value[0])) >= 0) - return((size_t)r); + else if ( ! a2roffsu(arg->value[0], &su, SCALE_MAX)) + SCALE_HS_INIT(&su, strlen(arg->value[0])); - return(strlen(arg->value[0])); + return(term_hspan(&su)); }