]> git.cameronkatri.com Git - mandoc.git/blobdiff - man.c
Removed superfluous XXX.
[mandoc.git] / man.c
diff --git a/man.c b/man.c
index 8f0f06f0c3a7da77d3f1e48ec057758d355bb04b..5763c9ea948aebbe5dee427e8cab5164b6a2dadc 100644 (file)
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/*     $Id: man.c,v 1.31 2009/08/19 11:58:32 kristaps Exp $ */
+/*     $Id: man.c,v 1.36 2009/08/21 13:18:32 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -41,7 +41,9 @@ const char *const __man_merrnames[WERRMAX] = {
        "unknown macro", /* WMACRO */
        "ill-formed macro", /* WMACROFORM */
        "scope open on exit", /* WEXITSCOPE */
-       "no scope context" /* WNOSCOPE */
+       "no scope context", /* WNOSCOPE */
+       "literal context already open", /* WOLITERAL */
+       "no literal context open" /* WNLITERAL */
 };
 
 const  char *const __man_macronames[MAN_MAX] = {                
@@ -52,7 +54,7 @@ const char *const __man_macronames[MAN_MAX] = {
        "R",            "B",            "I",            "IR",
        "RI",           "na",           "i",            "sp",
        "nf",           "fi",           "r",            "RE",
-       "RS"
+       "RS",           "DT"
        };
 
 const  char * const *man_macronames = __man_macronames;
@@ -68,6 +70,10 @@ static       int              man_alloc1(struct man *);
 static int              pstring(struct man *, int, int, 
                                const char *, size_t);
 
+#ifdef __linux__
+extern size_t            strlcpy(char *, const char *, size_t);
+#endif
+
 
 const struct man_node *
 man_node(const struct man *m)
@@ -388,6 +394,14 @@ man_ptext(struct man *m, int line, char *buf)
 {
        int              i, j;
 
+       /* Literal free-form text whitespace is preserved. */
+
+       if (MAN_LITERAL & m->flags) {
+               if ( ! man_word_alloc(m, line, 0, buf))
+                       return(0);
+               goto descope;
+       }
+
        /* First de-chunk and allocate words. */
 
        for (i = 0; ' ' == buf[i]; i++)
@@ -429,8 +443,6 @@ descope:
         * out the block scope (also if applicable).
         */
 
-       /* XXX - this should be in man_action.c. */
-
        if (MAN_ELINE & m->flags) {
                m->flags &= ~MAN_ELINE;
                if ( ! man_unscope(m, m->last->parent))
@@ -450,8 +462,9 @@ descope:
 int
 man_pmacro(struct man *m, int ln, char *buf)
 {
-       int               i, j, c, ppos, fl;
-       char              mac[5];
+       int              i, j, c, ppos, fl;
+       char             mac[5];
+       struct man_node *n;
 
        /* Comments and empties are quickly ignored. */
 
@@ -508,6 +521,29 @@ man_pmacro(struct man *m, int ln, char *buf)
        while (buf[i] && ' ' == buf[i])
                i++;
 
+       /* Remove prior ELINE macro, if applicable. */
+
+       if (m->flags & MAN_ELINE) {
+               n = m->last;
+               assert(NULL == n->child);
+               if ( ! man_nwarn(m, n, WLNSCOPE))
+                       return(0);
+
+               if (n->prev) {
+                       assert(n != n->parent->child);
+                       assert(n == n->prev->next);
+                       n->prev->next = NULL;
+                       m->last = n->prev;
+               } else {
+                       assert(n == n->parent->child);
+                       n->parent->child = NULL;
+                       m->last = n->parent;
+               }
+
+               man_node_free(n);
+               m->flags &= ~MAN_ELINE;
+       }
+
        /* Begin recursive parse sequence. */
 
        assert(man_macros[c].fp);
@@ -529,8 +565,6 @@ out:
 
        /* Close out the block scope opened in the prior line.  */
 
-       /* XXX - this should be in man_action.c. */
-
        assert(MAN_BLINE & m->flags);
        m->flags &= ~MAN_BLINE;