]> git.cameronkatri.com Git - mandoc.git/blobdiff - term_ascii.c
Explicit block closure macros clobber next-line block head scope,
[mandoc.git] / term_ascii.c
index 0f1c1e01bedffff949912654b3b4cc7da4f8bace..71d8af4c6c7905375c7e09cd6ecfd6768d951158 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: term_ascii.c,v 1.37 2014/10/28 02:43:59 schwarze Exp $ */
+/*     $Id: term_ascii.c,v 1.40 2014/11/20 13:56:20 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -19,6 +19,7 @@
 
 #include <sys/types.h>
 
+#include <assert.h>
 #if HAVE_WCHAR
 #include <locale.h>
 #endif
@@ -36,7 +37,8 @@
 #include "term.h"
 #include "main.h"
 
-static struct termp     *ascii_init(enum termenc, char *);
+static struct termp     *ascii_init(enum termenc,
+                               const struct mchars *, char *);
 static double            ascii_hspan(const struct termp *,
                                const struct roffsu *);
 static size_t            ascii_width(const struct termp *, int);
@@ -56,7 +58,7 @@ static        size_t            locale_width(const struct termp *, int);
 
 
 static struct termp *
-ascii_init(enum termenc enc, char *outopts)
+ascii_init(enum termenc enc, const struct mchars *mchars, char *outopts)
 {
        const char      *toks[5];
        char            *v;
@@ -64,6 +66,7 @@ ascii_init(enum termenc enc, char *outopts)
 
        p = mandoc_calloc(1, sizeof(struct termp));
 
+       p->symtab = mchars;
        p->tabwidth = 5;
        p->defrmargin = p->lastrmargin = 78;
 
@@ -131,24 +134,24 @@ ascii_init(enum termenc enc, char *outopts)
 }
 
 void *
-ascii_alloc(char *outopts)
+ascii_alloc(const struct mchars *mchars, char *outopts)
 {
 
-       return(ascii_init(TERMENC_ASCII, outopts));
+       return(ascii_init(TERMENC_ASCII, mchars, outopts));
 }
 
 void *
-utf8_alloc(char *outopts)
+utf8_alloc(const struct mchars *mchars, char *outopts)
 {
 
-       return(ascii_init(TERMENC_UTF8, outopts));
+       return(ascii_init(TERMENC_UTF8, mchars, outopts));
 }
 
 void *
-locale_alloc(char *outopts)
+locale_alloc(const struct mchars *mchars, char *outopts)
 {
 
-       return(ascii_init(TERMENC_LOCALE, outopts));
+       return(ascii_init(TERMENC_LOCALE, mchars, outopts));
 }
 
 static void
@@ -156,12 +159,14 @@ ascii_setwidth(struct termp *p, int iop, size_t width)
 {
 
        p->rmargin = p->defrmargin;
-       if (0 < iop)
+       if (iop > 0)
                p->defrmargin += width;
-       else if (0 > iop)
+       else if (iop == 0)
+               p->defrmargin = width ? width : p->lastrmargin;
+       else if (p->defrmargin > width)
                p->defrmargin -= width;
        else
-               p->defrmargin = width ? width : p->lastrmargin;
+               p->defrmargin = 0;
        p->lastrmargin = p->rmargin;
        p->rmargin = p->maxrmargin = p->defrmargin;
 }
@@ -335,8 +340,7 @@ ascii_uc2str(int uc)
        "j",    "DZ",   "Dz",   "dz",   "'\bG", "'\bg", "HV",   "W",
        "`\bN", "`\bn", "A",    "a",    "'\bAE","'\bae","O",    "o"};
 
-       if (uc < 0)
-               return("<?>");
+       assert(uc >= 0);
        if ((size_t)uc < sizeof(tab)/sizeof(tab[0]))
                return(tab[uc]);
        return(mchars_uc2str(uc));