tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

sjis-encoder.js (3004B)


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