tor-browser

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

bidiMirroring.js (8468B)


      1 // Pairs of mirrored characters from
      2 // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
      3 var mirrors = [
      4  [0x0028, 0x0029],
      5  [0x0029, 0x0028],
      6  [0x003C, 0x003E],
      7  [0x003E, 0x003C],
      8  [0x005B, 0x005D],
      9  [0x005D, 0x005B],
     10  [0x007B, 0x007D],
     11  [0x007D, 0x007B],
     12  [0x00AB, 0x00BB],
     13  [0x00BB, 0x00AB],
     14 // These four are disabled as on Mac earlier than 10.7, Tibetan characters will
     15 // not be used from the BitPattern.woff font due to lack of platform support.
     16 //
     17 //   [0x0F3A, 0x0F3B],
     18 //   [0x0F3B, 0x0F3A],
     19 //   [0x0F3C, 0x0F3D],
     20 //   [0x0F3D, 0x0F3C],
     21  [0x169B, 0x169C],
     22  [0x169C, 0x169B],
     23  [0x2039, 0x203A],
     24  [0x203A, 0x2039],
     25  [0x2045, 0x2046],
     26  [0x2046, 0x2045],
     27  [0x207D, 0x207E],
     28  [0x207E, 0x207D],
     29  [0x208D, 0x208E],
     30  [0x208E, 0x208D],
     31  [0x2208, 0x220B],
     32  [0x2209, 0x220C],
     33  [0x220A, 0x220D],
     34  [0x220B, 0x2208],
     35  [0x220C, 0x2209],
     36  [0x220D, 0x220A],
     37  [0x2215, 0x29F5],
     38  [0x223C, 0x223D],
     39  [0x223D, 0x223C],
     40  [0x2243, 0x22CD],
     41  [0x2252, 0x2253],
     42  [0x2253, 0x2252],
     43  [0x2254, 0x2255],
     44  [0x2255, 0x2254],
     45  [0x2264, 0x2265],
     46  [0x2265, 0x2264],
     47  [0x2266, 0x2267],
     48  [0x2267, 0x2266],
     49  [0x2268, 0x2269],
     50  [0x2269, 0x2268],
     51  [0x226A, 0x226B],
     52  [0x226B, 0x226A],
     53  [0x226E, 0x226F],
     54  [0x226F, 0x226E],
     55  [0x2270, 0x2271],
     56  [0x2271, 0x2270],
     57  [0x2272, 0x2273],
     58  [0x2273, 0x2272],
     59  [0x2274, 0x2275],
     60  [0x2275, 0x2274],
     61  [0x2276, 0x2277],
     62  [0x2277, 0x2276],
     63  [0x2278, 0x2279],
     64  [0x2279, 0x2278],
     65  [0x227A, 0x227B],
     66  [0x227B, 0x227A],
     67  [0x227C, 0x227D],
     68  [0x227D, 0x227C],
     69  [0x227E, 0x227F],
     70  [0x227F, 0x227E],
     71  [0x2280, 0x2281],
     72  [0x2281, 0x2280],
     73  [0x2282, 0x2283],
     74  [0x2283, 0x2282],
     75  [0x2284, 0x2285],
     76  [0x2285, 0x2284],
     77  [0x2286, 0x2287],
     78  [0x2287, 0x2286],
     79  [0x2288, 0x2289],
     80  [0x2289, 0x2288],
     81  [0x228A, 0x228B],
     82  [0x228B, 0x228A],
     83  [0x228F, 0x2290],
     84  [0x2290, 0x228F],
     85  [0x2291, 0x2292],
     86  [0x2292, 0x2291],
     87  [0x2298, 0x29B8],
     88  [0x22A2, 0x22A3],
     89  [0x22A3, 0x22A2],
     90  [0x22A6, 0x2ADE],
     91  [0x22A8, 0x2AE4],
     92  [0x22A9, 0x2AE3],
     93  [0x22AB, 0x2AE5],
     94  [0x22B0, 0x22B1],
     95  [0x22B1, 0x22B0],
     96  [0x22B2, 0x22B3],
     97  [0x22B3, 0x22B2],
     98  [0x22B4, 0x22B5],
     99  [0x22B5, 0x22B4],
    100  [0x22B6, 0x22B7],
    101  [0x22B7, 0x22B6],
    102  [0x22C9, 0x22CA],
    103  [0x22CA, 0x22C9],
    104  [0x22CB, 0x22CC],
    105  [0x22CC, 0x22CB],
    106  [0x22CD, 0x2243],
    107  [0x22D0, 0x22D1],
    108  [0x22D1, 0x22D0],
    109  [0x22D6, 0x22D7],
    110  [0x22D7, 0x22D6],
    111  [0x22D8, 0x22D9],
    112  [0x22D9, 0x22D8],
    113  [0x22DA, 0x22DB],
    114  [0x22DB, 0x22DA],
    115  [0x22DC, 0x22DD],
    116  [0x22DD, 0x22DC],
    117  [0x22DE, 0x22DF],
    118  [0x22DF, 0x22DE],
    119  [0x22E0, 0x22E1],
    120  [0x22E1, 0x22E0],
    121  [0x22E2, 0x22E3],
    122  [0x22E3, 0x22E2],
    123  [0x22E4, 0x22E5],
    124  [0x22E5, 0x22E4],
    125  [0x22E6, 0x22E7],
    126  [0x22E7, 0x22E6],
    127  [0x22E8, 0x22E9],
    128  [0x22E9, 0x22E8],
    129  [0x22EA, 0x22EB],
    130  [0x22EB, 0x22EA],
    131  [0x22EC, 0x22ED],
    132  [0x22ED, 0x22EC],
    133  [0x22F0, 0x22F1],
    134  [0x22F1, 0x22F0],
    135  [0x22F2, 0x22FA],
    136  [0x22F3, 0x22FB],
    137  [0x22F4, 0x22FC],
    138  [0x22F6, 0x22FD],
    139  [0x22F7, 0x22FE],
    140  [0x22FA, 0x22F2],
    141  [0x22FB, 0x22F3],
    142  [0x22FC, 0x22F4],
    143  [0x22FD, 0x22F6],
    144  [0x22FE, 0x22F7],
    145  [0x2308, 0x2309],
    146  [0x2309, 0x2308],
    147  [0x230A, 0x230B],
    148  [0x230B, 0x230A],
    149  [0x2329, 0x232A],
    150  [0x232A, 0x2329],
    151  [0x2768, 0x2769],
    152  [0x2769, 0x2768],
    153  [0x276A, 0x276B],
    154  [0x276B, 0x276A],
    155  [0x276C, 0x276D],
    156  [0x276D, 0x276C],
    157  [0x276E, 0x276F],
    158  [0x276F, 0x276E],
    159  [0x2770, 0x2771],
    160  [0x2771, 0x2770],
    161  [0x2772, 0x2773],
    162  [0x2773, 0x2772],
    163  [0x2774, 0x2775],
    164  [0x2775, 0x2774],
    165  [0x27C3, 0x27C4],
    166  [0x27C4, 0x27C3],
    167  [0x27C5, 0x27C6],
    168  [0x27C6, 0x27C5],
    169  [0x27C8, 0x27C9],
    170  [0x27C9, 0x27C8],
    171  [0x27CB, 0x27CD],
    172  [0x27CD, 0x27CB],
    173  [0x27D5, 0x27D6],
    174  [0x27D6, 0x27D5],
    175  [0x27DD, 0x27DE],
    176  [0x27DE, 0x27DD],
    177  [0x27E2, 0x27E3],
    178  [0x27E3, 0x27E2],
    179  [0x27E4, 0x27E5],
    180  [0x27E5, 0x27E4],
    181  [0x27E6, 0x27E7],
    182  [0x27E7, 0x27E6],
    183  [0x27E8, 0x27E9],
    184  [0x27E9, 0x27E8],
    185  [0x27EA, 0x27EB],
    186  [0x27EB, 0x27EA],
    187  [0x27EC, 0x27ED],
    188  [0x27ED, 0x27EC],
    189  [0x27EE, 0x27EF],
    190  [0x27EF, 0x27EE],
    191  [0x2983, 0x2984],
    192  [0x2984, 0x2983],
    193  [0x2985, 0x2986],
    194  [0x2986, 0x2985],
    195  [0x2987, 0x2988],
    196  [0x2988, 0x2987],
    197  [0x2989, 0x298A],
    198  [0x298A, 0x2989],
    199  [0x298B, 0x298C],
    200  [0x298C, 0x298B],
    201  [0x298D, 0x2990],
    202  [0x298E, 0x298F],
    203  [0x298F, 0x298E],
    204  [0x2990, 0x298D],
    205  [0x2991, 0x2992],
    206  [0x2992, 0x2991],
    207  [0x2993, 0x2994],
    208  [0x2994, 0x2993],
    209  [0x2995, 0x2996],
    210  [0x2996, 0x2995],
    211  [0x2997, 0x2998],
    212  [0x2998, 0x2997],
    213  [0x29B8, 0x2298],
    214  [0x29C0, 0x29C1],
    215  [0x29C1, 0x29C0],
    216  [0x29C4, 0x29C5],
    217  [0x29C5, 0x29C4],
    218  [0x29CF, 0x29D0],
    219  [0x29D0, 0x29CF],
    220  [0x29D1, 0x29D2],
    221  [0x29D2, 0x29D1],
    222  [0x29D4, 0x29D5],
    223  [0x29D5, 0x29D4],
    224  [0x29D8, 0x29D9],
    225  [0x29D9, 0x29D8],
    226  [0x29DA, 0x29DB],
    227  [0x29DB, 0x29DA],
    228  [0x29F5, 0x2215],
    229  [0x29F8, 0x29F9],
    230  [0x29F9, 0x29F8],
    231  [0x29FC, 0x29FD],
    232  [0x29FD, 0x29FC],
    233  [0x2A2B, 0x2A2C],
    234  [0x2A2C, 0x2A2B],
    235  [0x2A2D, 0x2A2E],
    236  [0x2A2E, 0x2A2D],
    237  [0x2A34, 0x2A35],
    238  [0x2A35, 0x2A34],
    239  [0x2A3C, 0x2A3D],
    240  [0x2A3D, 0x2A3C],
    241  [0x2A64, 0x2A65],
    242  [0x2A65, 0x2A64],
    243  [0x2A79, 0x2A7A],
    244  [0x2A7A, 0x2A79],
    245  [0x2A7D, 0x2A7E],
    246  [0x2A7E, 0x2A7D],
    247  [0x2A7F, 0x2A80],
    248  [0x2A80, 0x2A7F],
    249  [0x2A81, 0x2A82],
    250  [0x2A82, 0x2A81],
    251  [0x2A83, 0x2A84],
    252  [0x2A84, 0x2A83],
    253  [0x2A8B, 0x2A8C],
    254  [0x2A8C, 0x2A8B],
    255  [0x2A91, 0x2A92],
    256  [0x2A92, 0x2A91],
    257  [0x2A93, 0x2A94],
    258  [0x2A94, 0x2A93],
    259  [0x2A95, 0x2A96],
    260  [0x2A96, 0x2A95],
    261  [0x2A97, 0x2A98],
    262  [0x2A98, 0x2A97],
    263  [0x2A99, 0x2A9A],
    264  [0x2A9A, 0x2A99],
    265  [0x2A9B, 0x2A9C],
    266  [0x2A9C, 0x2A9B],
    267  [0x2AA1, 0x2AA2],
    268  [0x2AA2, 0x2AA1],
    269  [0x2AA6, 0x2AA7],
    270  [0x2AA7, 0x2AA6],
    271  [0x2AA8, 0x2AA9],
    272  [0x2AA9, 0x2AA8],
    273  [0x2AAA, 0x2AAB],
    274  [0x2AAB, 0x2AAA],
    275  [0x2AAC, 0x2AAD],
    276  [0x2AAD, 0x2AAC],
    277  [0x2AAF, 0x2AB0],
    278  [0x2AB0, 0x2AAF],
    279  [0x2AB3, 0x2AB4],
    280  [0x2AB4, 0x2AB3],
    281  [0x2ABB, 0x2ABC],
    282  [0x2ABC, 0x2ABB],
    283  [0x2ABD, 0x2ABE],
    284  [0x2ABE, 0x2ABD],
    285  [0x2ABF, 0x2AC0],
    286  [0x2AC0, 0x2ABF],
    287  [0x2AC1, 0x2AC2],
    288  [0x2AC2, 0x2AC1],
    289  [0x2AC3, 0x2AC4],
    290  [0x2AC4, 0x2AC3],
    291  [0x2AC5, 0x2AC6],
    292  [0x2AC6, 0x2AC5],
    293  [0x2ACD, 0x2ACE],
    294  [0x2ACE, 0x2ACD],
    295  [0x2ACF, 0x2AD0],
    296  [0x2AD0, 0x2ACF],
    297  [0x2AD1, 0x2AD2],
    298  [0x2AD2, 0x2AD1],
    299  [0x2AD3, 0x2AD4],
    300  [0x2AD4, 0x2AD3],
    301  [0x2AD5, 0x2AD6],
    302  [0x2AD6, 0x2AD5],
    303  [0x2ADE, 0x22A6],
    304  [0x2AE3, 0x22A9],
    305  [0x2AE4, 0x22A8],
    306  [0x2AE5, 0x22AB],
    307  [0x2AEC, 0x2AED],
    308  [0x2AED, 0x2AEC],
    309  [0x2AF7, 0x2AF8],
    310  [0x2AF8, 0x2AF7],
    311  [0x2AF9, 0x2AFA],
    312  [0x2AFA, 0x2AF9],
    313  [0x2E02, 0x2E03],
    314  [0x2E03, 0x2E02],
    315  [0x2E04, 0x2E05],
    316  [0x2E05, 0x2E04],
    317  [0x2E09, 0x2E0A],
    318  [0x2E0A, 0x2E09],
    319  [0x2E0C, 0x2E0D],
    320  [0x2E0D, 0x2E0C],
    321  [0x2E1C, 0x2E1D],
    322  [0x2E1D, 0x2E1C],
    323  [0x2E20, 0x2E21],
    324  [0x2E21, 0x2E20],
    325  [0x2E22, 0x2E23],
    326  [0x2E23, 0x2E22],
    327  [0x2E24, 0x2E25],
    328  [0x2E25, 0x2E24],
    329  [0x2E26, 0x2E27],
    330  [0x2E27, 0x2E26],
    331  [0x2E28, 0x2E29],
    332  [0x2E29, 0x2E28],
    333  [0x3008, 0x3009],
    334  [0x3009, 0x3008],
    335  [0x300A, 0x300B],
    336  [0x300B, 0x300A],
    337  [0x300C, 0x300D],
    338  [0x300D, 0x300C],
    339  [0x300E, 0x300F],
    340  [0x300F, 0x300E],
    341  [0x3010, 0x3011],
    342  [0x3011, 0x3010],
    343  [0x3014, 0x3015],
    344  [0x3015, 0x3014],
    345  [0x3016, 0x3017],
    346  [0x3017, 0x3016],
    347  [0x3018, 0x3019],
    348  [0x3019, 0x3018],
    349  [0x301A, 0x301B],
    350  [0x301B, 0x301A],
    351  [0xFE59, 0xFE5A],
    352  [0xFE5A, 0xFE59],
    353  [0xFE5B, 0xFE5C],
    354  [0xFE5C, 0xFE5B],
    355  [0xFE5D, 0xFE5E],
    356  [0xFE5E, 0xFE5D],
    357  [0xFE64, 0xFE65],
    358  [0xFE65, 0xFE64],
    359  [0xFF08, 0xFF09],
    360  [0xFF09, 0xFF08],
    361  [0xFF1C, 0xFF1E],
    362  [0xFF1E, 0xFF1C],
    363  [0xFF3B, 0xFF3D],
    364  [0xFF3D, 0xFF3B],
    365  [0xFF5B, 0xFF5D],
    366  [0xFF5D, 0xFF5B],
    367  [0xFF5F, 0xFF60],
    368  [0xFF60, 0xFF5F],
    369  [0xFF62, 0xFF63],
    370  [0xFF63, 0xFF62]
    371 ];
    372 
    373 function show(attributes, text) {
    374  var e = document.createElementNS("http://www.w3.org/2000/svg", "text");
    375  for (var name in attributes) {
    376    e.setAttribute(name, attributes[name]);
    377  }
    378  e.textContent = text;
    379  document.documentElement.appendChild(e);
    380 }
    381 
    382 function showCharacters(isReference) {
    383  var row = 0, col = 0;
    384  for (var i = 0; i < mirrors.length; i++) {
    385    show({ x: col * 50 + 30,
    386           y: row * 30 + 30,
    387           direction: isReference ? "ltr" : "rtl",
    388           "unicode-bidi": "embed",
    389           "text-anchor": "middle",
    390           "font-family": "BitPattern",
    391           "font-size": "40px" },
    392         String.fromCharCode(mirrors[i][isReference ? 0 : 1]));
    393    if (++col == 16) {
    394      col = 0;
    395      row++;
    396    }
    397  }
    398  document.documentElement.removeAttribute("class");
    399 }
    400 
    401 function test() {
    402  showCharacters(false);
    403 }
    404 
    405 function reference() {
    406  showCharacters(true);
    407 }