]> git.cameronkatri.com Git - mandoc.git/blobdiff - term.c
Strings abstracted into dynamically-created C files.
[mandoc.git] / term.c
diff --git a/term.c b/term.c
index 2236703ecd95cd1ee42bfadfdb411582f710a6f3..a4c75df634ca48554f1f48b66a48964b68cc5e6b 100644 (file)
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.39 2009/03/04 13:57:35 kristaps Exp $ */
+/* $Id: term.c,v 1.43 2009/03/06 14:13:47 kristaps Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -166,6 +166,7 @@ DECL_PRE(termp_xr);
 DECL_POST(termp___);
 DECL_POST(termp_bl);
 DECL_POST(termp_bx);
+DECL_POST(termp_lb);
 
 const  struct termact __termacts[MDOC_MAX] = {
        { NULL, NULL }, /* \" */
@@ -274,6 +275,7 @@ const       struct termact __termacts[MDOC_MAX] = {
        { NULL, NULL }, /* Hf */
        { NULL, NULL }, /* Fr */
        { termp_ud_pre, NULL }, /* Ud */
+       { NULL, termp_lb_post }, /* lb */
 };
 
 const struct termact *termacts = __termacts;
@@ -295,7 +297,7 @@ arg_width(const struct mdoc_arg *arg)
        assert(len > 0);
 
        for (i = 0; i < len - 1; i++) 
-               if ( ! isdigit((int)(*arg->value)[i]))
+               if ( ! isdigit((u_char)(*arg->value)[i]))
                        break;
 
        if (i == len - 1) {
@@ -536,6 +538,10 @@ termp_it_pre(DECL_ARGS)
                        p->flags |= TERMP_NOBREAK;
                else
                        p->flags |= TERMP_NOLPAD;
+               if (MDOC_HEAD == node->type && MDOC_Tag == type)
+                       if (NULL == node->next ||
+                                       NULL == node->next->child)
+                               p->flags |= TERMP_NONOBREAK;
                break;
        case (MDOC_Diag):
                if (MDOC_HEAD == node->type)
@@ -689,10 +695,6 @@ termp_ar_pre(DECL_ARGS)
 {
 
        TERMPAIR_SETFLAG(p, pair, ttypes[TTYPE_CMD_ARG]);
-       if (NULL == node->child) {
-               word(p, "file");
-               word(p, "...");
-       }
        return(1);
 }
 
@@ -721,14 +723,13 @@ termp_pp_pre(DECL_ARGS)
 static int
 termp_st_pre(DECL_ARGS)
 {
-       const char      *tp;
-
-       assert(1 == node->data.elem.argc);
-
-       tp = mdoc_st2a(node->data.elem.argv[0].arg);
-       word(p, tp);
+       const char      *cp;
 
-       return(1);
+       /* XXX - if child isn't text? */
+       if (node->child) 
+               if ((cp = mdoc_a2st(node->child->data.text.string)))
+                       word(p, cp);
+       return(0);
 }
 
 
@@ -967,6 +968,15 @@ termp_bt_pre(DECL_ARGS)
 }
 
 
+/* ARGSUSED */
+static void
+termp_lb_post(DECL_ARGS)
+{
+
+       newln(p);
+}
+
+
 /* ARGSUSED */
 static int
 termp_ud_pre(DECL_ARGS)
@@ -1009,7 +1019,7 @@ termp_aq_pre(DECL_ARGS)
 
        if (MDOC_BODY != node->type)
                return(1);
-       word(p, "<");
+       word(p, "\\(la");
        p->flags |= TERMP_NOSPACE;
        return(1);
 }
@@ -1023,7 +1033,7 @@ termp_aq_post(DECL_ARGS)
        if (MDOC_BODY != node->type)
                return;
        p->flags |= TERMP_NOSPACE;
-       word(p, ">");
+       word(p, "\\(ra");
 }
 
 
@@ -1480,15 +1490,19 @@ termp_in_post(DECL_ARGS)
 static int
 termp_at_pre(DECL_ARGS)
 {
-       enum mdoc_att    c;
+       const char      *att;
+
+       att = NULL;
 
-       c = ATT_DEFAULT;
        if (node->child) {
                assert(MDOC_TEXT == node->child->type);
-               c = mdoc_atoatt(node->child->data.text.string);
+               att = mdoc_a2att(node->child->data.text.string);
        }
 
-       word(p, mdoc_att2a(c));
+       if (NULL == att)
+               att = "AT&T UNIX";
+
+       word(p, att);
        return(0);
 }
 
@@ -1662,6 +1676,7 @@ static int
 termp__t_pre(DECL_ARGS)
 {
 
+       /* FIXME: titles are underlined. */
        word(p, "\"");
        p->flags |= TERMP_NOSPACE;
        return(1);
@@ -1674,6 +1689,7 @@ termp__t_post(DECL_ARGS)
 {
 
        p->flags |= TERMP_NOSPACE;
+       /* FIXME: titles are underlined. */
        word(p, "\"");
        word(p, node->next ? "," : ".");
 }