summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.h1
-rw-r--r--term.h3
-rw-r--r--term_ascii.c18
3 files changed, 18 insertions, 4 deletions
diff --git a/main.h b/main.h
index 7588749c..4422d2c0 100644
--- a/main.h
+++ b/main.h
@@ -42,6 +42,7 @@ void tree_mdoc(void *, const struct mdoc *);
void tree_man(void *, const struct man *);
void *locale_alloc(char *);
+void *utf8_alloc(char *);
void *ascii_alloc(char *);
void ascii_free(void *);
diff --git a/term.h b/term.h
index 252b0a2a..1a4452d3 100644
--- a/term.h
+++ b/term.h
@@ -23,7 +23,8 @@ struct termp;
enum termenc {
TERMENC_ASCII,
- TERMENC_LOCALE
+ TERMENC_LOCALE,
+ TERMENC_UTF8
};
enum termtype {
diff --git a/term_ascii.c b/term_ascii.c
index af1fade9..f1db4c5a 100644
--- a/term_ascii.c
+++ b/term_ascii.c
@@ -89,15 +89,19 @@ 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";
@@ -127,6 +131,14 @@ ascii_alloc(char *outopts)
}
void *
+utf8_alloc(char *outopts)
+{
+
+ return(ascii_init(TERMENC_UTF8, outopts));
+}
+
+
+void *
locale_alloc(char *outopts)
{