summaryrefslogtreecommitdiff
path: root/appl/lib/convcs/genjisx0201kana.b
diff options
context:
space:
mode:
Diffstat (limited to 'appl/lib/convcs/genjisx0201kana.b')
-rw-r--r--appl/lib/convcs/genjisx0201kana.b117
1 files changed, 117 insertions, 0 deletions
diff --git a/appl/lib/convcs/genjisx0201kana.b b/appl/lib/convcs/genjisx0201kana.b
new file mode 100644
index 00000000..29c67f02
--- /dev/null
+++ b/appl/lib/convcs/genjisx0201kana.b
@@ -0,0 +1,117 @@
+implement genjisx0201kana;
+
+include "sys.m";
+include "draw.m";
+
+genjisx0201kana : module {
+ init: fn(ctxt: ref Draw->Context, args: list of string);
+};
+
+DATAFILE : con "/lib/convcs/jisx0201kana";
+
+init(nil: ref Draw->Context, nil: list of string)
+{
+ sys := load Sys Sys->PATH;
+ fd := sys->create(DATAFILE, Sys->OWRITE, 8r644);
+ if (fd == nil) {
+ sys->print("cannot create %s: %r\n", DATAFILE);
+ return;
+ }
+
+ s := "";
+ for (slen := 0; slen < len mapdata; slen ++) {
+ (nil, code) := sys->tokenize(mapdata[slen], " \t");
+ u := hex2int(hd tl code);
+ s[slen] = u;
+ }
+ buf := array of byte s;
+ sys->write(fd, buf, len buf);
+}
+
+hex2int(s: string): int
+{
+ n := 0;
+ for (i := 0; i < len s; i++) {
+ case s[i] {
+ '0' to '9' =>
+ n = 16*n + s[i] - '0';
+ 'A' to 'F' =>
+ n = 16*n + s[i] + 10 - 'A';
+ 'a' to 'f' =>
+ n = 16*n + s[i] + 10 - 'a';
+ * =>
+ return n;
+ }
+ }
+ return n;
+}
+
+
+# data derived from Unicode Consortium "CharmapML" data for EUC-JP
+# (G2 charset of EUC-JP is JIS X 0201 Kana)
+# the leading code point value is not used, it just appears for convenience
+mapdata := array [] of {
+ "A1 FF61",
+ "A2 FF62",
+ "A3 FF63",
+ "A4 FF64",
+ "A5 FF65",
+ "A6 FF66",
+ "A7 FF67",
+ "A8 FF68",
+ "A9 FF69",
+ "AA FF6A",
+ "AB FF6B",
+ "AC FF6C",
+ "AD FF6D",
+ "AE FF6E",
+ "AF FF6F",
+ "B0 FF70",
+ "B1 FF71",
+ "B2 FF72",
+ "B3 FF73",
+ "B4 FF74",
+ "B5 FF75",
+ "B6 FF76",
+ "B7 FF77",
+ "B8 FF78",
+ "B9 FF79",
+ "BA FF7A",
+ "BB FF7B",
+ "BC FF7C",
+ "BD FF7D",
+ "BE FF7E",
+ "BF FF7F",
+ "C0 FF80",
+ "C1 FF81",
+ "C2 FF82",
+ "C3 FF83",
+ "C4 FF84",
+ "C5 FF85",
+ "C6 FF86",
+ "C7 FF87",
+ "C8 FF88",
+ "C9 FF89",
+ "CA FF8A",
+ "CB FF8B",
+ "CC FF8C",
+ "CD FF8D",
+ "CE FF8E",
+ "CF FF8F",
+ "D0 FF90",
+ "D1 FF91",
+ "D2 FF92",
+ "D3 FF93",
+ "D4 FF94",
+ "D5 FF95",
+ "D6 FF96",
+ "D7 FF97",
+ "D8 FF98",
+ "D9 FF99",
+ "DA FF9A",
+ "DB FF9B",
+ "DC FF9C",
+ "DD FF9D",
+ "DE FF9E",
+ "DF FF9F",
+}; \ No newline at end of file