]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdocterm.c
-tag, if followed by empty body, doesn't newline.
[mandoc.git] / mdocterm.c
index 00a1308503a2185b5f7909785afc8686788beb56..c873c57648f876ecbc434e4c3ebb2fcd11228cc3 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mdocterm.c,v 1.27 2009/03/03 21:07:01 kristaps Exp $ */
+/* $Id: mdocterm.c,v 1.32 2009/03/04 14:41:40 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -78,6 +78,8 @@ static        struct termenc    termenc1[] = {
 static struct termenc    termenc2[] = {
        { "rB",           TERMSYM_RBRACK },
        { "lB",           TERMSYM_LBRACK },
+       { "ra",           TERMSYM_RANGLE },
+       { "la",           TERMSYM_LANGLE },
        { "Lq",           TERMSYM_LDQUOTE },
        { "lq",           TERMSYM_LDQUOTE },
        { "Rq",           TERMSYM_RDQUOTE },
@@ -99,7 +101,7 @@ static       struct termenc    termenc2[] = {
        { "Le",           TERMSYM_LE },
        { "<=",           TERMSYM_LE },
        { "Ge",           TERMSYM_GE },
-       { "=>",           TERMSYM_GE },
+       { ">=",           TERMSYM_GE },
        { "==",           TERMSYM_EQ },
        { "Ne",           TERMSYM_NEQ },
        { "!=",           TERMSYM_NEQ },
@@ -161,6 +163,8 @@ static      struct termsym    termsym_ansi[] = {
        { " ", 1 },             /* TERMSYM_SPACE */
        { ".", 1 },             /* TERMSYM_PERIOD */
        { "", 0 },              /* TERMSYM_BREAK */
+       { "<", 1 },             /* TERMSYM_LANGLE */
+       { ">", 1 },             /* TERMSYM_RANGLE */
 };
 
 static const char        ansi_clear[]  = { 27, '[', '0', 'm' };
@@ -189,8 +193,7 @@ main(int argc, char *argv[])
        if (NULL == (mdoc = mmain_mdoc(p)))
                mmain_exit(p, 1);
 
-       termp.maxrmargin = 78; /* XXX */
-       termp.rmargin = termp.maxrmargin;
+       termp.maxrmargin = termp.rmargin = 78; /* XXX */
        termp.maxcols = 1024;
        termp.offset = termp.col = 0;
        termp.flags = TERMP_NOSPACE;
@@ -227,9 +230,6 @@ main(int argc, char *argv[])
  *    offset value.  This is useful when doing columnar lists where the
  *    prior column has right-padded.
  *
- *  - TERMP_LITERAL: don't break apart words.  Note that a long literal
- *    word will violate the right margin.
- *
  *  - TERMP_NOBREAK: this is the most important and is used when making
  *    columns.  In short: don't print a newline and instead pad to the
  *    right margin.  Used in conjunction with TERMP_NOLPAD.
@@ -320,7 +320,7 @@ flushln(struct termp *p)
                                putchar('\n');
                                for (j = 0; j < p->rmargin; j++)
                                        putchar(' ');
-                               vis = p->rmargin;
+                               vis = p->rmargin - p->offset;
                        } else if (vis + vsz > bp) 
                                warnx("word breaks right margin");
 
@@ -351,9 +351,11 @@ flushln(struct termp *p)
         */
 
        if ((TERMP_NOBREAK & p->flags) && vis >= maxvis) {
-               putchar('\n');
-               for (i = 0; i < p->rmargin; i++)
-                       putchar(' ');
+               if ( ! (TERMP_NONOBREAK & p->flags)) {
+                       putchar('\n');
+                       for (i = 0; i < p->rmargin; i++)
+                               putchar(' ');
+               }
                p->col = 0;
                return;
        }
@@ -364,8 +366,9 @@ flushln(struct termp *p)
         */
 
        if (p->flags & TERMP_NOBREAK) {
-               for ( ; vis < maxvis; vis++)
-                       putchar(' ');
+               if ( ! (TERMP_NONOBREAK & p->flags))
+                       for ( ; vis < maxvis; vis++)
+                               putchar(' ');
        } else
                putchar('\n');