1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
--- ptexenc.c.orig 2014-04-28 06:37:18 UTC
+++ ptexenc.c
@@ -15,6 +15,7 @@
#include <ptexenc/unicode-jp.h>
#include <ctype.h>
+#include <fnmatch.h>
#define ENC_UNKNOWN 0
#define ENC_JIS 1
@@ -23,10 +24,46 @@
#define ENC_UTF8 4
#define ENC_UPTEX 5
-static int default_kanji_enc;
+static int default_kanji_is_uptex;
static boolean UPTEX_enabled;
static boolean prior_file_enc = false;
+static struct le {
+ char *name;
+ int enc;
+ int flag;
+} letable[] = {
+ {"*.UTF-8", ENC_UTF8, FNM_NOESCAPE},
+ {"*.eucJP", ENC_EUC, FNM_NOESCAPE | FNM_CASEFOLD},
+ {"*.EUC-JP", ENC_EUC, FNM_NOESCAPE},
+ {"*.EUC", ENC_EUC, FNM_NOESCAPE | FNM_CASEFOLD},
+ {"*.PCK", ENC_SJIS, FNM_NOESCAPE | FNM_CASEFOLD},
+ {"*.SJIS", ENC_SJIS, FNM_NOESCAPE | FNM_CASEFOLD},
+ {"*.ISO-2022-JP", ENC_JIS, FNM_NOESCAPE | FNM_CASEFOLD},
+ {NULL, 0, 0}
+};
+
+static int
+default_kanji_enc(void)
+{
+ struct le *le;
+ const char *name;
+ int i;
+
+ if (default_kanji_is_uptex)
+ return (ENC_UPTEX);
+ name = getenv("LANG");
+ if (name == NULL)
+ return (ENC_UTF8);
+
+ for (i = 0; letable[i].name != NULL; i++) {
+ if (fnmatch(letable[i].name, name, letable[i].flag) !=
+ FNM_NOMATCH)
+ return (letable[i].enc);
+ }
+ return (ENC_UTF8);
+}
+
#define ESC '\033'
#ifndef NOFILE
@@ -64,7 +101,7 @@ static const_string enc_to_string(int en
static int string_to_enc(const_string str)
{
if (str == NULL) return ENC_UNKNOWN;
- if (strcasecmp(str, "default")== 0) return default_kanji_enc;
+ if (strcasecmp(str, "default")== 0) return default_kanji_enc();
if (strcasecmp(str, "jis") == 0) return ENC_JIS;
if (strcasecmp(str, "euc") == 0) return ENC_EUC;
if (strcasecmp(str, "sjis") == 0) return ENC_SJIS;
@@ -92,7 +129,7 @@ static int get_default_enc(void)
} else if (enc != ENC_UNKNOWN) {
return enc;
}
- return default_kanji_enc;
+ return default_kanji_enc();
}
static void set_file_enc(int enc)
@@ -150,14 +187,14 @@ void enable_UPTEX (boolean enable)
{
UPTEX_enabled = enable;
if (enable) {
- default_kanji_enc = ENC_UPTEX;
+ default_kanji_is_uptex = 1;
internal_enc = ENC_UPTEX;
} else {
#ifdef WIN32
default_kanji_enc = ENC_SJIS;
internal_enc = ENC_SJIS;
#else
- default_kanji_enc = ENC_UTF8;
+ default_kanji_is_uptex = 0;
internal_enc = ENC_EUC;
#endif
}
|