• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var jis0208CPs = []; // index is unicode cp, value is pointer
2for (var p = 0; p < jis0208.length; p++) {
3    if (jis0208[p] != null && jis0208CPs[jis0208[p]] == null) {
4        jis0208CPs[jis0208[p]] = p;
5    }
6}
7
8function chars2cps(chars) {
9    // this is needed because of javascript's handling of supplementary characters
10    // char: a string of unicode characters
11    // returns an array of decimal code point values
12    var haut = 0;
13    var out = [];
14    for (var i = 0; i < chars.length; i++) {
15        var b = chars.charCodeAt(i);
16        if (b < 0 || b > 0xffff) {
17            alert(
18                "Error in chars2cps: byte out of range " + b.toString(16) + "!"
19            );
20        }
21        if (haut != 0) {
22            if (0xdc00 <= b && b <= 0xdfff) {
23                out.push(0x10000 + ((haut - 0xd800) << 10) + (b - 0xdc00));
24                haut = 0;
25                continue;
26            } else {
27                alert(
28                    "Error in chars2cps: surrogate out of range " +
29                        haut.toString(16) +
30                        "!"
31                );
32                haut = 0;
33            }
34        }
35        if (0xd800 <= b && b <= 0xdbff) {
36            haut = b;
37        } else {
38            out.push(b);
39        }
40    }
41    return out;
42}
43
44function eucjpEncoder(stream) {
45    var cps = chars2cps(stream);
46    var out = "";
47    var cp;
48    var finished = false;
49
50    while (!finished) {
51        if (cps.length == 0) {
52            finished = true;
53            continue;
54        } else cp = cps.shift();
55        if (cp >= 0x00 && cp <= 0x7f) {
56            // ASCII
57            out += " " + cp.toString(16).toUpperCase();
58            continue;
59        }
60        if (cp == 0xa5) {
61            out += " 5C";
62            continue;
63        }
64        if (cp == 0x203e) {
65            out += " 7E";
66            continue;
67        }
68        if (cp >= 0xff61 && cp <= 0xff9f) {
69            var temp = cp - 0xff61 + 0xa1;
70            out += " 8E " + temp.toString(16).toUpperCase();
71            continue;
72        }
73        if (cp == 0x2212) {
74            cp = 0xff0d;
75        }
76        var ptr = jis0208CPs[cp];
77        if (ptr == null) {
78            return null;
79            //          out += ' &#'+cp+';'
80            //          continue
81        }
82        var lead = Math.floor(ptr / 94) + 0xa1;
83        var trail = ptr % 94 + 0xa1;
84        out +=
85            " " +
86            lead.toString(16).toUpperCase() +
87            " " +
88            trail.toString(16).toUpperCase();
89    }
90    return out.trim();
91}
92
93function convertToHex(str) {
94    // converts a string of ASCII characters to hex byte codes
95    var out = "";
96    var result;
97    for (var c = 0; c < str.length; c++) {
98        result =
99            str
100                .charCodeAt(c)
101                .toString(16)
102                .toUpperCase() + " ";
103        out += result;
104    }
105    return out;
106}
107
108function normalizeStr(str) {
109    var out = "";
110    for (var c = 0; c < str.length; c++) {
111        if (str.charAt(c) == "%") {
112            out += String.fromCodePoint(
113                parseInt(str.charAt(c + 1) + str.charAt(c + 2), 16)
114            );
115            c += 2;
116        } else out += str.charAt(c);
117    }
118    var result = "";
119    for (var o = 0; o < out.length; o++) {
120        result +=
121            "%" +
122            out
123                .charCodeAt(o)
124                .toString(16)
125                .toUpperCase();
126    }
127    return result.replace(/%1B%28%42$/, "");
128}
129