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