tor-browser

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

eucjp-encoder.js (3472B)


      1 var jis0208CPs = []; // index is unicode cp, value is pointer
      2 for (var p = 0; p < jis0208.length; p++) {
      3    if (jis0208[p] != null && jis0208CPs[jis0208[p]] == null) {
      4        jis0208CPs[jis0208[p]] = p;
      5    }
      6 }
      7 
      8 function 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 
     44 function 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 
     93 function 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 
    108 function 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 }