]> git.cameronkatri.com Git - mandoc.git/commitdiff
Add mode for -Tlocale. This mode, with this commit, behaves exactly
authorKristaps Dzonsons <kristaps@bsd.lv>
Tue, 17 May 2011 14:38:34 +0000 (14:38 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Tue, 17 May 2011 14:38:34 +0000 (14:38 +0000)
like -Tascii.  While adding this, inline term_alloc() (was a one-liner),
remove some switches around the terminal encoding for the symbol table
(unnecessary), and split out ascii_alloc() into ascii_init(), which is
also called from locale_init().

main.c
main.h
man_term.c
mdoc_term.c
term.c
term.h
term_ascii.c
term_ps.c

diff --git a/main.c b/main.c
index bbbb88466a6cdf7284fca315fffd1abf755e9bcf..f7edf473decaa7f9c13919d06a2d5385873728a5 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/*     $Id: main.c,v 1.161 2011/03/31 10:53:43 kristaps Exp $ */
+/*     $Id: main.c,v 1.162 2011/05/17 14:38:34 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -43,6 +43,7 @@ typedef       void            (*out_free)(void *);
 
 enum   outt {
        OUTT_ASCII = 0, /* -Tascii */
 
 enum   outt {
        OUTT_ASCII = 0, /* -Tascii */
+       OUTT_LOCALE,    /* -Tlocale */
        OUTT_TREE,      /* -Ttree */
        OUTT_HTML,      /* -Thtml */
        OUTT_XHTML,     /* -Txhtml */
        OUTT_TREE,      /* -Ttree */
        OUTT_HTML,      /* -Thtml */
        OUTT_XHTML,     /* -Txhtml */
@@ -206,9 +207,15 @@ parse(struct curparse *curp, int fd,
                switch (curp->outtype) {
                case (OUTT_XHTML):
                        curp->outdata = xhtml_alloc(curp->outopts);
                switch (curp->outtype) {
                case (OUTT_XHTML):
                        curp->outdata = xhtml_alloc(curp->outopts);
+                       curp->outfree = html_free;
                        break;
                case (OUTT_HTML):
                        curp->outdata = html_alloc(curp->outopts);
                        break;
                case (OUTT_HTML):
                        curp->outdata = html_alloc(curp->outopts);
+                       curp->outfree = html_free;
+                       break;
+               case (OUTT_LOCALE):
+                       curp->outdata = locale_alloc(curp->outopts);
+                       curp->outfree = ascii_free;
                        break;
                case (OUTT_ASCII):
                        curp->outdata = ascii_alloc(curp->outopts);
                        break;
                case (OUTT_ASCII):
                        curp->outdata = ascii_alloc(curp->outopts);
@@ -232,7 +239,6 @@ parse(struct curparse *curp, int fd,
                case (OUTT_XHTML):
                        curp->outman = html_man;
                        curp->outmdoc = html_mdoc;
                case (OUTT_XHTML):
                        curp->outman = html_man;
                        curp->outmdoc = html_mdoc;
-                       curp->outfree = html_free;
                        break;
                case (OUTT_TREE):
                        curp->outman = tree_man;
                        break;
                case (OUTT_TREE):
                        curp->outman = tree_man;
@@ -242,6 +248,8 @@ parse(struct curparse *curp, int fd,
                        /* FALLTHROUGH */
                case (OUTT_ASCII):
                        /* FALLTHROUGH */
                        /* FALLTHROUGH */
                case (OUTT_ASCII):
                        /* FALLTHROUGH */
+               case (OUTT_LOCALE):
+                       /* FALLTHROUGH */
                case (OUTT_PS):
                        curp->outman = terminal_man;
                        curp->outmdoc = terminal_mdoc;
                case (OUTT_PS):
                        curp->outman = terminal_man;
                        curp->outmdoc = terminal_mdoc;
@@ -299,6 +307,8 @@ toptions(struct curparse *curp, char *arg)
                curp->outtype = OUTT_TREE;
        else if (0 == strcmp(arg, "html"))
                curp->outtype = OUTT_HTML;
                curp->outtype = OUTT_TREE;
        else if (0 == strcmp(arg, "html"))
                curp->outtype = OUTT_HTML;
+       else if (0 == strcmp(arg, "locale"))
+               curp->outtype = OUTT_LOCALE;
        else if (0 == strcmp(arg, "xhtml"))
                curp->outtype = OUTT_XHTML;
        else if (0 == strcmp(arg, "ps"))
        else if (0 == strcmp(arg, "xhtml"))
                curp->outtype = OUTT_XHTML;
        else if (0 == strcmp(arg, "ps"))
diff --git a/main.h b/main.h
index bb503eb79e50e2a0788b9ff1b6c51095eeae9a9b..75637b36b5f29adf5f8949b9b2d9de255ee4b43e 100644 (file)
--- a/main.h
+++ b/main.h
@@ -1,4 +1,4 @@
-/*     $Id: main.h,v 1.10 2010/07/31 23:52:58 schwarze Exp $ */
+/*     $Id: main.h,v 1.11 2011/05/17 14:38:34 kristaps Exp $ */
 /*
  * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
 /*
  * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -41,6 +41,7 @@ void            html_free(void *);
 void             tree_mdoc(void *, const struct mdoc *);
 void             tree_man(void *, const struct man *);
 
 void             tree_mdoc(void *, const struct mdoc *);
 void             tree_man(void *, const struct man *);
 
+void            *locale_alloc(char *);
 void            *ascii_alloc(char *);
 void             ascii_free(void *);
 
 void            *ascii_alloc(char *);
 void             ascii_free(void *);
 
index 2fcf8b4612c3969324880fd56e345a277bd1fe08..38ceeabdbd1c53d94bb61a926c4379504a3ae7e5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_term.c,v 1.108 2011/04/30 22:14:42 kristaps Exp $ */
+/*     $Id: man_term.c,v 1.109 2011/05/17 14:38:34 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -156,14 +156,7 @@ terminal_man(void *arg, const struct man *man)
        p->tabwidth = term_len(p, 5);
 
        if (NULL == p->symtab)
        p->tabwidth = term_len(p, 5);
 
        if (NULL == p->symtab)
-               switch (p->enc) {
-               case (TERMENC_ASCII):
-                       p->symtab = mchars_alloc();
-                       break;
-               default:
-                       abort();
-                       /* NOTREACHED */
-               }
+               p->symtab = mchars_alloc();
 
        n = man_node(man);
        m = man_meta(man);
 
        n = man_node(man);
        m = man_meta(man);
index 5333cb8a93f08c9c9a111d194ead94caee0ae126..1a5ce4c2148f4242ee178f8ec8cb796c0c426282 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_term.c,v 1.229 2011/04/30 22:14:42 kristaps Exp $ */
+/*     $Id: mdoc_term.c,v 1.230 2011/05/17 14:38:34 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -264,14 +264,7 @@ terminal_mdoc(void *arg, const struct mdoc *mdoc)
        p->tabwidth = term_len(p, 5);
 
        if (NULL == p->symtab)
        p->tabwidth = term_len(p, 5);
 
        if (NULL == p->symtab)
-               switch (p->enc) {
-               case (TERMENC_ASCII):
-                       p->symtab = mchars_alloc();
-                       break;
-               default:
-                       abort();
-                       /* NOTREACHED */
-               }
+               p->symtab = mchars_alloc();
 
        n = mdoc_node(mdoc);
        m = mdoc_meta(mdoc);
 
        n = mdoc_node(mdoc);
        m = mdoc_meta(mdoc);
diff --git a/term.c b/term.c
index bfedefb0ff31e718b8f5f80d5ce3ddd619853414..922385ae90c64e38180c388ac26850bc84b8960a 100644 (file)
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/*     $Id: term.c,v 1.192 2011/05/17 11:55:08 kristaps Exp $ */
+/*     $Id: term.c,v 1.193 2011/05/17 14:38:34 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -69,18 +69,6 @@ term_end(struct termp *p)
        (*p->end)(p);
 }
 
        (*p->end)(p);
 }
 
-
-struct termp *
-term_alloc(enum termenc enc)
-{
-       struct termp    *p;
-
-       p = mandoc_calloc(1, sizeof(struct termp));
-       p->enc = enc;
-       return(p);
-}
-
-
 /*
  * Flush a line of text.  A "line" is loosely defined as being something
  * that should be followed by a newline, regardless of whether it's
 /*
  * Flush a line of text.  A "line" is loosely defined as being something
  * that should be followed by a newline, regardless of whether it's
diff --git a/term.h b/term.h
index 7b0537df5fe3b4be8e4ed626b6b9187354d7a543..dc3945ec20b17988e806ed93f6fc7c26843117a4 100644 (file)
--- a/term.h
+++ b/term.h
@@ -1,4 +1,4 @@
-/*     $Id: term.h,v 1.83 2011/05/15 00:58:48 kristaps Exp $ */
+/*     $Id: term.h,v 1.84 2011/05/17 14:38:34 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -22,7 +22,8 @@ __BEGIN_DECLS
 struct termp;
 
 enum   termenc {
 struct termp;
 
 enum   termenc {
-       TERMENC_ASCII
+       TERMENC_ASCII,
+       TERMENC_LOCALE
 };
 
 enum   termtype {
 };
 
 enum   termtype {
@@ -94,7 +95,6 @@ struct        termp {
        struct termp_ps  *ps;
 };
 
        struct termp_ps  *ps;
 };
 
-struct termp    *term_alloc(enum termenc);
 void             term_tbl(struct termp *, const struct tbl_span *);
 void             term_free(struct termp *);
 void             term_newln(struct termp *);
 void             term_tbl(struct termp *, const struct tbl_span *);
 void             term_free(struct termp *);
 void             term_newln(struct termp *);
index fd7005f0858f879c2274bf8c878428bd266307db..5b2ee847aca070d405092ad4ba3e6a53eed3b291 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: term_ascii.c,v 1.13 2011/05/14 17:54:42 kristaps Exp $ */
+/*     $Id: term_ascii.c,v 1.14 2011/05/17 14:38:34 kristaps Exp $ */
 /*
  * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
 /*
  * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -31,6 +31,7 @@
 #include "term.h"
 #include "main.h"
 
 #include "term.h"
 #include "main.h"
 
+static struct termp     *ascii_init(enum termenc, char *);
 static double            ascii_hspan(const struct termp *,
                                const struct roffsu *);
 static size_t            ascii_width(const struct termp *, int);
 static double            ascii_hspan(const struct termp *,
                                const struct roffsu *);
 static size_t            ascii_width(const struct termp *, int);
@@ -40,15 +41,15 @@ static      void              ascii_end(struct termp *);
 static void              ascii_endline(struct termp *);
 static void              ascii_letter(struct termp *, int);
 
 static void              ascii_endline(struct termp *);
 static void              ascii_letter(struct termp *, int);
 
-
-void *
-ascii_alloc(char *outopts)
+static struct termp *
+ascii_init(enum termenc enc, char *outopts)
 {
 {
-       struct termp    *p;
        const char      *toks[2];
        char            *v;
        const char      *toks[2];
        char            *v;
+       struct termp    *p;
 
 
-       p = term_alloc(TERMENC_ASCII);
+       p = mandoc_calloc(1, sizeof(struct termp));
+       p->enc = enc;
 
        p->tabwidth = 5;
        p->defrmargin = 78;
 
        p->tabwidth = 5;
        p->defrmargin = 78;
@@ -81,6 +82,19 @@ ascii_alloc(char *outopts)
        return(p);
 }
 
        return(p);
 }
 
+void *
+ascii_alloc(char *outopts)
+{
+
+       return(ascii_init(TERMENC_ASCII, outopts));
+}
+
+void *
+locale_alloc(char *outopts)
+{
+
+       return(ascii_init(TERMENC_LOCALE, outopts));
+}
 
 /* ARGSUSED */
 static size_t
 
 /* ARGSUSED */
 static size_t
index 50984dc0613abb9c69812550fc2f38a4f6a5db2e..44e492a2ea7d99d462e78db075579cfb1e89ebb7 100644 (file)
--- a/term_ps.c
+++ b/term_ps.c
@@ -1,4 +1,4 @@
-/*     $Id: term_ps.c,v 1.50 2011/05/15 00:58:48 kristaps Exp $ */
+/*     $Id: term_ps.c,v 1.51 2011/05/17 14:38:34 kristaps Exp $ */
 /*
  * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
 /*
  * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -434,7 +434,8 @@ pspdf_alloc(char *outopts)
        const char      *pp;
        char            *v;
 
        const char      *pp;
        char            *v;
 
-       p = term_alloc(TERMENC_ASCII);
+       p = mandoc_calloc(1, sizeof(struct termp));
+       p->enc = TERMENC_ASCII;
        p->ps = mandoc_calloc(1, sizeof(struct termp_ps));
 
        p->advance = ps_advance;
        p->ps = mandoc_calloc(1, sizeof(struct termp_ps));
 
        p->advance = ps_advance;