]> git.cameronkatri.com Git - mandoc.git/blobdiff - term_ascii.c
If no man.cgi `whatis' results are found, offer a quick link to the apropos
[mandoc.git] / term_ascii.c
index 3b4ca241196dc1582f038cd8f2cc662775e89a28..2f114786f6af49cf996ccba7bfaaebf7c1be96e4 100644 (file)
@@ -1,6 +1,6 @@
-/*     $Id: term_ascii.c,v 1.16 2011/05/19 15:48:58 kristaps Exp $ */
+/*     $Id: term_ascii.c,v 1.20 2011/12/04 23:10:52 schwarze Exp $ */
 /*
- * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -68,7 +68,7 @@ static        size_t            locale_width(const struct termp *, int);
 static struct termp *
 ascii_init(enum termenc enc, char *outopts)
 {
-       const char      *toks[2];
+       const char      *toks[4];
        char            *v;
        struct termp    *p;
 
@@ -89,25 +89,42 @@ ascii_init(enum termenc enc, char *outopts)
        p->letter = ascii_letter;
        p->width = ascii_width;
 
-#if defined (USE_WCHAR)
-       if (TERMENC_LOCALE == enc)
-               if (setlocale(LC_ALL, "") && MB_CUR_MAX > 1) {
+#ifdef USE_WCHAR
+       if (TERMENC_ASCII != enc) {
+               v = TERMENC_LOCALE == enc ?
+                       setlocale(LC_ALL, "") :
+                       setlocale(LC_CTYPE, "UTF-8");
+               if (NULL != v && MB_CUR_MAX > 1) {
                        p->enc = enc;
                        p->advance = locale_advance;
                        p->endline = locale_endline;
                        p->letter = locale_letter;
                        p->width = locale_width;
                }
+       }
 #endif
 
-       toks[0] = "width";
-       toks[1] = NULL;
+       toks[0] = "indent";
+       toks[1] = "width";
+       toks[2] = "mdoc";
+       toks[3] = NULL;
 
        while (outopts && *outopts)
                switch (getsubopt(&outopts, UNCONST(toks), &v)) {
                case (0):
+                       p->defindent = (size_t)atoi(v);
+                       break;
+               case (1):
                        p->defrmargin = (size_t)atoi(v);
                        break;
+               case (2):
+                       /*
+                        * Temporary, undocumented mode
+                        * to imitate mdoc(7) output style.
+                        */
+                       p->mdocstyle = 1;
+                       p->defindent = 5;
+                       break;
                default:
                        break;
                }
@@ -126,6 +143,14 @@ ascii_alloc(char *outopts)
        return(ascii_init(TERMENC_ASCII, outopts));
 }
 
+void *
+utf8_alloc(char *outopts)
+{
+
+       return(ascii_init(TERMENC_UTF8, outopts));
+}
+
+
 void *
 locale_alloc(char *outopts)
 {