1. {
  2.     "translatorID":"7cb70025-a888-4a29-a210-63ec52da40d4",
  3.     "translatorType":3,
  4.     "label":"BibTeX-CITEP",
  5.     "creator":"Simon Kornblith and Richard Karnesky (and edited for citep output)",
  6.     "target":"bib",
  7.     "minVersion":"2.1.3",
  8.     "maxVersion":"",
  9.     "priority":200,
  10.     "configOptions":{"dataMode":"block"},
  11.     "displayOptions":{"exportCharset":"UTF-8", "exportFileData":false},
  12.     "inRepository":true,
  13.     "lastUpdated":"2011-04-01 21:20:00"
  14. }
  15.  
  16. function detectImport() {
  17.     var maxChars = 1048576; // 1MB
  18.    
  19.     var inComment = false;
  20.     var block = "";
  21.     var buffer = "";
  22.     var chr = "";
  23.     var charsRead = 0;
  24.    
  25.     var re = /^\s*@[a-zA-Z]+[\(\{]/;
  26.     while((buffer = Zotero.read(4096)) && charsRead < maxChars) {
  27.         Zotero.debug("Scanning " + buffer.length + " characters for BibTeX");
  28.         charsRead += buffer.length;
  29.         for (var i=0; i<buffer.length; i++) {
  30.             chr = buffer[i];
  31.            
  32.             if (inComment && chr != "\r" && chr != "\n") {
  33.                 continue;
  34.             }
  35.             inComment = false;
  36.            
  37.             if(chr == "%") {
  38.                 // read until next newline
  39.                 block = "";
  40.                 inComment = true;
  41.             } else if((chr == "\n" || chr == "\r") && block) {
  42.                 // check if this is a BibTeX entry
  43.                 if(re.test(block)) {
  44.                     return true;
  45.                 }
  46.                
  47.                 block = "";
  48.             } else if(" \n\r\t".indexOf(chr) == -1) {
  49.                 block += chr;
  50.             }
  51.         }
  52.     }
  53. }
  54.  
  55. //%a = first author surname
  56. //%y = year
  57. //%t = first word of title
  58. var citeKeyFormat = "%a_%t_%y";
  59.  
  60. var fieldMap = {
  61.     address:"place",
  62.     chapter:"section",
  63.     edition:"edition",
  64.     type:"type",
  65.     series:"series",
  66.     title:"title",
  67.     volume:"volume",
  68.     copyright:"rights",
  69.     isbn:"ISBN",
  70.     issn:"ISSN",
  71.     lccn:"callNumber",
  72.     location:"archiveLocation",
  73.     shorttitle:"shortTitle",
  74.     url:"url",
  75.     doi:"DOI",
  76.     "abstract":"abstractNote"
  77. };
  78.  
  79. var inputFieldMap = {
  80.     booktitle :"publicationTitle",
  81.     school:"publisher",
  82.     institution:"publisher",
  83.     publisher:"publisher"
  84. };
  85.  
  86. var zotero2bibtexTypeMap = {
  87.     "book":"book",
  88.     "bookSection":"incollection",
  89.     "journalArticle":"article",
  90.     "magazineArticle":"article",
  91.     "newspaperArticle":"article",
  92.     "thesis":"phdthesis",
  93.     "letter":"misc",
  94.     "manuscript":"unpublished",
  95.     "interview":"misc",
  96.     "film":"misc",
  97.     "artwork":"misc",
  98.     "webpage":"misc",
  99.     "conferencePaper":"inproceedings",
  100.     "report":"techreport"
  101. };
  102.  
  103. var bibtex2zoteroTypeMap = {
  104.     "book":"book", // or booklet, proceedings
  105.     "inbook":"bookSection",
  106.     "incollection":"bookSection",
  107.     "article":"journalArticle", // or magazineArticle or newspaperArticle
  108.     "phdthesis":"thesis",
  109.     "unpublished":"manuscript",
  110.     "inproceedings":"conferencePaper", // check for conference also
  111.     "conference":"conferencePaper",
  112.     "techreport":"report",
  113.     "booklet":"book",
  114.     "manual":"book",
  115.     "mastersthesis":"thesis",
  116.     "misc":"book",
  117.     "proceedings":"book"
  118. };
  119.  
  120. /*
  121.  * three-letter month abbreviations. i assume these are the same ones that the
  122.  * docs say are defined in some appendix of the LaTeX book. (i don't have the
  123.  * LaTeX book.)
  124.  */
  125. var months = ["jan", "feb", "mar", "apr", "may", "jun",
  126.               "jul", "aug", "sep", "oct", "nov", "dec"];
  127.  
  128. /*
  129.  * new mapping table based on that from Matthias Steffens,
  130.  * then enhanced with some fields generated from the unicode table.
  131.  */
  132.  
  133. var mappingTable = {
  134.     "\u00A0":"~", // NO-BREAK SPACE
  135.     "\u00A1":"{\\textexclamdown}", // INVERTED EXCLAMATION MARK
  136.     "\u00A2":"{\\textcent}", // CENT SIGN
  137.     "\u00A3":"{\\textsterling}", // POUND SIGN
  138.     "\u00A5":"{\\textyen}", // YEN SIGN
  139.     "\u00A6":"{\\textbrokenbar}", // BROKEN BAR
  140.     "\u00A7":"{\\textsection}", // SECTION SIGN
  141.     "\u00A8":"{\\textasciidieresis}", // DIAERESIS
  142.     "\u00A9":"{\\textcopyright}", // COPYRIGHT SIGN
  143.     "\u00AA":"{\\textordfeminine}", // FEMININE ORDINAL INDICATOR
  144.     "\u00AB":"{\\guillemotleft}", // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
  145.     "\u00AC":"{\\textlnot}", // NOT SIGN
  146.     "\u00AD":"-", // SOFT HYPHEN
  147.     "\u00AE":"{\\textregistered}", // REGISTERED SIGN
  148.     "\u00AF":"{\\textasciimacron}", // MACRON
  149.     "\u00B0":"{\\textdegree}", // DEGREE SIGN
  150.     "\u00B1":"{\\textpm}", // PLUS-MINUS SIGN
  151.     "\u00B2":"{\\texttwosuperior}", // SUPERSCRIPT TWO
  152.     "\u00B3":"{\\textthreesuperior}", // SUPERSCRIPT THREE
  153.     "\u00B4":"{\\textasciiacute}", // ACUTE ACCENT
  154.     "\u00B5":"{\\textmu}", // MICRO SIGN
  155.     "\u00B6":"{\\textparagraph}", // PILCROW SIGN
  156.     "\u00B7":"{\\textperiodcentered}", // MIDDLE DOT
  157.     "\u00B8":"{\\c\\ }", // CEDILLA
  158.     "\u00B9":"{\\textonesuperior}", // SUPERSCRIPT ONE
  159.     "\u00BA":"{\\textordmasculine}", // MASCULINE ORDINAL INDICATOR
  160.     "\u00BB":"{\\guillemotright}", // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
  161.     "\u00BC":"{\\textonequarter}", // VULGAR FRACTION ONE QUARTER
  162.     "\u00BD":"{\\textonehalf}", // VULGAR FRACTION ONE HALF
  163.     "\u00BE":"{\\textthreequarters}", // VULGAR FRACTION THREE QUARTERS
  164.     "\u00BF":"{\\textquestiondown}", // INVERTED QUESTION MARK
  165.     "\u00C6":"{\\AE}", // LATIN CAPITAL LETTER AE
  166.     "\u00D0":"{\\DH}", // LATIN CAPITAL LETTER ETH
  167.     "\u00D7":"{\\texttimes}", // MULTIPLICATION SIGN
  168.     "\u00DE":"{\\TH}", // LATIN CAPITAL LETTER THORN
  169.     "\u00DF":"{\\ss}", // LATIN SMALL LETTER SHARP S
  170.     "\u00E6":"{\\ae}", // LATIN SMALL LETTER AE
  171.     "\u00F0":"{\\dh}", // LATIN SMALL LETTER ETH
  172.     "\u00F7":"{\\textdiv}", // DIVISION SIGN
  173.     "\u00FE":"{\\th}", // LATIN SMALL LETTER THORN
  174.     "\u0131":"{\\i}", // LATIN SMALL LETTER DOTLESS I
  175.     "\u0132":"IJ", // LATIN CAPITAL LIGATURE IJ
  176.     "\u0133":"ij", // LATIN SMALL LIGATURE IJ
  177.     "\u0138":"k", // LATIN SMALL LETTER KRA
  178.     "\u0149":"'n", // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
  179.     "\u014A":"{\\NG}", // LATIN CAPITAL LETTER ENG
  180.     "\u014B":"{\\ng}", // LATIN SMALL LETTER ENG
  181.     "\u0152":"{\\OE}", // LATIN CAPITAL LIGATURE OE
  182.     "\u0153":"{\\oe}", // LATIN SMALL LIGATURE OE
  183.     "\u017F":"s", // LATIN SMALL LETTER LONG S
  184.     "\u02B9":"'", // MODIFIER LETTER PRIME
  185.     "\u02BB":"'", // MODIFIER LETTER TURNED COMMA
  186.     "\u02BC":"'", // MODIFIER LETTER APOSTROPHE
  187.     "\u02BD":"'", // MODIFIER LETTER REVERSED COMMA
  188.     "\u02C6":"{\\textasciicircum}", // MODIFIER LETTER CIRCUMFLEX ACCENT
  189.     "\u02C8":"'", // MODIFIER LETTER VERTICAL LINE
  190.     "\u02C9":"-", // MODIFIER LETTER MACRON
  191.     "\u02CC":",", // MODIFIER LETTER LOW VERTICAL LINE
  192.     "\u02D0":":", // MODIFIER LETTER TRIANGULAR COLON
  193.     "\u02DA":"o", // RING ABOVE
  194.     "\u02DC":"\\~{}", // SMALL TILDE
  195.     "\u02DD":"{\\textacutedbl}", // DOUBLE ACUTE ACCENT
  196.     "\u0374":"'", // GREEK NUMERAL SIGN
  197.     "\u0375":",", // GREEK LOWER NUMERAL SIGN
  198.     "\u037E":";", // GREEK QUESTION MARK
  199.     "\u2000":" ", // EN QUAD
  200.     "\u2001":"  ", // EM QUAD
  201.     "\u2002":" ", // EN SPACE
  202.     "\u2003":"  ", // EM SPACE
  203.     "\u2004":" ", // THREE-PER-EM SPACE
  204.     "\u2005":" ", // FOUR-PER-EM SPACE
  205.     "\u2006":" ", // SIX-PER-EM SPACE
  206.     "\u2007":" ", // FIGURE SPACE
  207.     "\u2008":" ", // PUNCTUATION SPACE
  208.     "\u2009":" ", // THIN SPACE
  209.     "\u2010":"-", // HYPHEN
  210.     "\u2011":"-", // NON-BREAKING HYPHEN
  211.     "\u2012":"-", // FIGURE DASH
  212.     "\u2013":"{\\textendash}", // EN DASH
  213.     "\u2014":"{\\textemdash}", // EM DASH
  214.     "\u2015":"{\\textemdash}", // HORIZONTAL BAR or QUOTATION DASH (not in LaTeX -- use EM DASH)
  215.     "\u2016":"{\\textbardbl}", // DOUBLE VERTICAL LINE
  216.     "\u2017":"{\\textunderscore}", // DOUBLE LOW LINE
  217.     "\u2018":"{\\textquoteleft}", // LEFT SINGLE QUOTATION MARK
  218.     "\u2019":"{\\textquoteright}", // RIGHT SINGLE QUOTATION MARK
  219.     "`" : "\u2018", // LEFT SINGLE QUOTATION MARK
  220.     "'" : "\u2019", // RIGHT SINGLE QUOTATION MARK
  221.     "\u201A":"{\\quotesinglbase}", // SINGLE LOW-9 QUOTATION MARK
  222.     "\u201B":"'", // SINGLE HIGH-REVERSED-9 QUOTATION MARK
  223.     "\u201C":"{\\textquotedblleft}", // LEFT DOUBLE QUOTATION MARK
  224.     "\u201D":"{\\textquotedblright}", // RIGHT DOUBLE QUOTATION MARK
  225.     "\u201E":"{\\quotedblbase}", // DOUBLE LOW-9 QUOTATION MARK
  226.     "\u201F":"{\\quotedblbase}", // DOUBLE HIGH-REVERSED-9 QUOTATION MARK
  227.     "\u2020":"{\\textdagger}", // DAGGER
  228.     "\u2021":"{\\textdaggerdbl}", // DOUBLE DAGGER
  229.     "\u2022":"{\\textbullet}", // BULLET
  230.     "\u2023":">", // TRIANGULAR BULLET
  231.     "\u2024":".", // ONE DOT LEADER
  232.     "\u2025":"..", // TWO DOT LEADER
  233.     "\u2026":"{\\textellipsis}", // HORIZONTAL ELLIPSIS
  234.     "\u2027":"-", // HYPHENATION POINT
  235.     "\u202F":" ", // NARROW NO-BREAK SPACE
  236.     "\u2030":"{\\textperthousand}", // PER MILLE SIGN
  237.     "\u2032":"'", // PRIME
  238.     "\u2033":"'", // DOUBLE PRIME
  239.     "\u2034":"'''", // TRIPLE PRIME
  240.     "\u2035":"`", // REVERSED PRIME
  241.     "\u2036":"``", // REVERSED DOUBLE PRIME
  242.     "\u2037":"```", // REVERSED TRIPLE PRIME
  243.     "\u2039":"{\\guilsinglleft}", // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
  244.     "\u203A":"{\\guilsinglright}", // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
  245.     "\u203C":"!!", // DOUBLE EXCLAMATION MARK
  246.     "\u203E":"-", // OVERLINE
  247.     "\u2043":"-", // HYPHEN BULLET
  248.     "\u2044":"{\\textfractionsolidus}", // FRACTION SLASH
  249.     "\u2048":"?!", // QUESTION EXCLAMATION MARK
  250.     "\u2049":"!?", // EXCLAMATION QUESTION MARK
  251.     "\u204A":"7", // TIRONIAN SIGN ET
  252.     "\u2070":"$^{0}$", // SUPERSCRIPT ZERO
  253.     "\u2074":"$^{4}$", // SUPERSCRIPT FOUR
  254.     "\u2075":"$^{5}$", // SUPERSCRIPT FIVE
  255.     "\u2076":"$^{6}$", // SUPERSCRIPT SIX
  256.     "\u2077":"$^{7}$", // SUPERSCRIPT SEVEN
  257.     "\u2078":"$^{8}$", // SUPERSCRIPT EIGHT
  258.     "\u2079":"$^{9}$", // SUPERSCRIPT NINE
  259.     "\u207A":"$^{+}$", // SUPERSCRIPT PLUS SIGN
  260.     "\u207B":"$^{-}$", // SUPERSCRIPT MINUS
  261.     "\u207C":"$^{=}$", // SUPERSCRIPT EQUALS SIGN
  262.     "\u207D":"$^{(}$", // SUPERSCRIPT LEFT PARENTHESIS
  263.     "\u207E":"$^{)}$", // SUPERSCRIPT RIGHT PARENTHESIS
  264.     "\u207F":"$^{n}$", // SUPERSCRIPT LATIN SMALL LETTER N
  265.     "\u2080":"$_{0}$", // SUBSCRIPT ZERO
  266.     "\u2081":"$_{1}$", // SUBSCRIPT ONE
  267.     "\u2082":"$_{2}$", // SUBSCRIPT TWO
  268.     "\u2083":"$_{3}$", // SUBSCRIPT THREE
  269.     "\u2084":"$_{4}$", // SUBSCRIPT FOUR
  270.     "\u2085":"$_{5}$", // SUBSCRIPT FIVE
  271.     "\u2086":"$_{6}$", // SUBSCRIPT SIX
  272.     "\u2087":"$_{7}$", // SUBSCRIPT SEVEN
  273.     "\u2088":"$_{8}$", // SUBSCRIPT EIGHT
  274.     "\u2089":"$_{9}$", // SUBSCRIPT NINE
  275.     "\u208A":"$_{+}$", // SUBSCRIPT PLUS SIGN
  276.     "\u208B":"$_{-}$", // SUBSCRIPT MINUS
  277.     "\u208C":"$_{=}$", // SUBSCRIPT EQUALS SIGN
  278.     "\u208D":"$_{(}$", // SUBSCRIPT LEFT PARENTHESIS
  279.     "\u208E":"$_{)}$", // SUBSCRIPT RIGHT PARENTHESIS
  280.     "\u20AC":"{\\texteuro}", // EURO SIGN
  281.     "\u2100":"a/c", // ACCOUNT OF
  282.     "\u2101":"a/s", // ADDRESSED TO THE SUBJECT
  283.     "\u2103":"{\\textcelsius}", // DEGREE CELSIUS
  284.     "\u2105":"c/o", // CARE OF
  285.     "\u2106":"c/u", // CADA UNA
  286.     "\u2109":"F", // DEGREE FAHRENHEIT
  287.     "\u2113":"l", // SCRIPT SMALL L
  288.     "\u2116":"{\\textnumero}", // NUMERO SIGN
  289.     "\u2117":"{\\textcircledP}", // SOUND RECORDING COPYRIGHT
  290.     "\u2120":"{\\textservicemark}", // SERVICE MARK
  291.     "\u2121":"TEL", // TELEPHONE SIGN
  292.     "\u2122":"{\\texttrademark}", // TRADE MARK SIGN
  293.     "\u2126":"{\\textohm}", // OHM SIGN
  294.     "\u212A":"K", // KELVIN SIGN
  295.     "\u212B":"A", // ANGSTROM SIGN
  296.     "\u212E":"{\\textestimated}", // ESTIMATED SYMBOL
  297.     "\u2153":" 1/3", // VULGAR FRACTION ONE THIRD
  298.     "\u2154":" 2/3", // VULGAR FRACTION TWO THIRDS
  299.     "\u2155":" 1/5", // VULGAR FRACTION ONE FIFTH
  300.     "\u2156":" 2/5", // VULGAR FRACTION TWO FIFTHS
  301.     "\u2157":" 3/5", // VULGAR FRACTION THREE FIFTHS
  302.     "\u2158":" 4/5", // VULGAR FRACTION FOUR FIFTHS
  303.     "\u2159":" 1/6", // VULGAR FRACTION ONE SIXTH
  304.     "\u215A":" 5/6", // VULGAR FRACTION FIVE SIXTHS
  305.     "\u215B":" 1/8", // VULGAR FRACTION ONE EIGHTH
  306.     "\u215C":" 3/8", // VULGAR FRACTION THREE EIGHTHS
  307.     "\u215D":" 5/8", // VULGAR FRACTION FIVE EIGHTHS
  308.     "\u215E":" 7/8", // VULGAR FRACTION SEVEN EIGHTHS
  309.     "\u215F":" 1/", // FRACTION NUMERATOR ONE
  310.     "\u2160":"I", // ROMAN NUMERAL ONE
  311.     "\u2161":"II", // ROMAN NUMERAL TWO
  312.     "\u2162":"III", // ROMAN NUMERAL THREE
  313.     "\u2163":"IV", // ROMAN NUMERAL FOUR
  314.     "\u2164":"V", // ROMAN NUMERAL FIVE
  315.     "\u2165":"VI", // ROMAN NUMERAL SIX
  316.     "\u2166":"VII", // ROMAN NUMERAL SEVEN
  317.     "\u2167":"VIII", // ROMAN NUMERAL EIGHT
  318.     "\u2168":"IX", // ROMAN NUMERAL NINE
  319.     "\u2169":"X", // ROMAN NUMERAL TEN
  320.     "\u216A":"XI", // ROMAN NUMERAL ELEVEN
  321.     "\u216B":"XII", // ROMAN NUMERAL TWELVE
  322.     "\u216C":"L", // ROMAN NUMERAL FIFTY
  323.     "\u216D":"C", // ROMAN NUMERAL ONE HUNDRED
  324.     "\u216E":"D", // ROMAN NUMERAL FIVE HUNDRED
  325.     "\u216F":"M", // ROMAN NUMERAL ONE THOUSAND
  326.     "\u2170":"i", // SMALL ROMAN NUMERAL ONE
  327.     "\u2171":"ii", // SMALL ROMAN NUMERAL TWO
  328.     "\u2172":"iii", // SMALL ROMAN NUMERAL THREE
  329.     "\u2173":"iv", // SMALL ROMAN NUMERAL FOUR
  330.     "\u2174":"v", // SMALL ROMAN NUMERAL FIVE
  331.     "\u2175":"vi", // SMALL ROMAN NUMERAL SIX
  332.     "\u2176":"vii", // SMALL ROMAN NUMERAL SEVEN
  333.     "\u2177":"viii", // SMALL ROMAN NUMERAL EIGHT
  334.     "\u2178":"ix", // SMALL ROMAN NUMERAL NINE
  335.     "\u2179":"x", // SMALL ROMAN NUMERAL TEN
  336.     "\u217A":"xi", // SMALL ROMAN NUMERAL ELEVEN
  337.     "\u217B":"xii", // SMALL ROMAN NUMERAL TWELVE
  338.     "\u217C":"l", // SMALL ROMAN NUMERAL FIFTY
  339.     "\u217D":"c", // SMALL ROMAN NUMERAL ONE HUNDRED
  340.     "\u217E":"d", // SMALL ROMAN NUMERAL FIVE HUNDRED
  341.     "\u217F":"m", // SMALL ROMAN NUMERAL ONE THOUSAND
  342.     "\u2190":"{\\textleftarrow}", // LEFTWARDS ARROW
  343.     "\u2191":"{\\textuparrow}", // UPWARDS ARROW
  344.     "\u2192":"{\\textrightarrow}", // RIGHTWARDS ARROW
  345.     "\u2193":"{\\textdownarrow}", // DOWNWARDS ARROW
  346.     "\u2194":"<->", // LEFT RIGHT ARROW
  347.     "\u21D0":"<=", // LEFTWARDS DOUBLE ARROW
  348.     "\u21D2":"=>", // RIGHTWARDS DOUBLE ARROW
  349.     "\u21D4":"<=>", // LEFT RIGHT DOUBLE ARROW
  350.     "\u2212":"-", // MINUS SIGN
  351.     "\u2215":"/", // DIVISION SLASH
  352.     "\u2216":"\\", // SET MINUS
  353.     "\u2217":"*", // ASTERISK OPERATOR
  354.     "\u2218":"o", // RING OPERATOR
  355.     "\u2219":".", // BULLET OPERATOR
  356.     "\u221E":"$\\infty$", // INFINITY
  357.     "\u2223":"|", // DIVIDES
  358.     "\u2225":"||", // PARALLEL TO
  359.     "\u2236":":", // RATIO
  360.     "\u223C":"\\~{}", // TILDE OPERATOR
  361.     "\u2260":"/=", // NOT EQUAL TO
  362.     "\u2261":"=", // IDENTICAL TO
  363.     "\u2264":"<=", // LESS-THAN OR EQUAL TO
  364.     "\u2265":">=", // GREATER-THAN OR EQUAL TO
  365.     "\u226A":"<<", // MUCH LESS-THAN
  366.     "\u226B":">>", // MUCH GREATER-THAN
  367.     "\u2295":"(+)", // CIRCLED PLUS
  368.     "\u2296":"(-)", // CIRCLED MINUS
  369.     "\u2297":"(x)", // CIRCLED TIMES
  370.     "\u2298":"(/)", // CIRCLED DIVISION SLASH
  371.     "\u22A2":"|-", // RIGHT TACK
  372.     "\u22A3":"-|", // LEFT TACK
  373.     "\u22A6":"|-", // ASSERTION
  374.     "\u22A7":"|=", // MODELS
  375.     "\u22A8":"|=", // TRUE
  376.     "\u22A9":"||-", // FORCES
  377.     "\u22C5":".", // DOT OPERATOR
  378.     "\u22C6":"*", // STAR OPERATOR
  379.     "\u22D5":"$\\#$", // EQUAL AND PARALLEL TO
  380.     "\u22D8":"<<<", // VERY MUCH LESS-THAN
  381.     "\u22D9":">>>", // VERY MUCH GREATER-THAN
  382.     "\u2329":"{\\textlangle}", // LEFT-POINTING ANGLE BRACKET
  383.     "\u232A":"{\\textrangle}", // RIGHT-POINTING ANGLE BRACKET
  384.     "\u2400":"NUL", // SYMBOL FOR NULL
  385.     "\u2401":"SOH", // SYMBOL FOR START OF HEADING
  386.     "\u2402":"STX", // SYMBOL FOR START OF TEXT
  387.     "\u2403":"ETX", // SYMBOL FOR END OF TEXT
  388.     "\u2404":"EOT", // SYMBOL FOR END OF TRANSMISSION
  389.     "\u2405":"ENQ", // SYMBOL FOR ENQUIRY
  390.     "\u2406":"ACK", // SYMBOL FOR ACKNOWLEDGE
  391.     "\u2407":"BEL", // SYMBOL FOR BELL
  392.     "\u2408":"BS", // SYMBOL FOR BACKSPACE
  393.     "\u2409":"HT", // SYMBOL FOR HORIZONTAL TABULATION
  394.     "\u240A":"LF", // SYMBOL FOR LINE FEED
  395.     "\u240B":"VT", // SYMBOL FOR VERTICAL TABULATION
  396.     "\u240C":"FF", // SYMBOL FOR FORM FEED
  397.     "\u240D":"CR", // SYMBOL FOR CARRIAGE RETURN
  398.     "\u240E":"SO", // SYMBOL FOR SHIFT OUT
  399.     "\u240F":"SI", // SYMBOL FOR SHIFT IN
  400.     "\u2410":"DLE", // SYMBOL FOR DATA LINK ESCAPE
  401.     "\u2411":"DC1", // SYMBOL FOR DEVICE CONTROL ONE
  402.     "\u2412":"DC2", // SYMBOL FOR DEVICE CONTROL TWO
  403.     "\u2413":"DC3", // SYMBOL FOR DEVICE CONTROL THREE
  404.     "\u2414":"DC4", // SYMBOL FOR DEVICE CONTROL FOUR
  405.     "\u2415":"NAK", // SYMBOL FOR NEGATIVE ACKNOWLEDGE
  406.     "\u2416":"SYN", // SYMBOL FOR SYNCHRONOUS IDLE
  407.     "\u2417":"ETB", // SYMBOL FOR END OF TRANSMISSION BLOCK
  408.     "\u2418":"CAN", // SYMBOL FOR CANCEL
  409.     "\u2419":"EM", // SYMBOL FOR END OF MEDIUM
  410.     "\u241A":"SUB", // SYMBOL FOR SUBSTITUTE
  411.     "\u241B":"ESC", // SYMBOL FOR ESCAPE
  412.     "\u241C":"FS", // SYMBOL FOR FILE SEPARATOR
  413.     "\u241D":"GS", // SYMBOL FOR GROUP SEPARATOR
  414.     "\u241E":"RS", // SYMBOL FOR RECORD SEPARATOR
  415.     "\u241F":"US", // SYMBOL FOR UNIT SEPARATOR
  416.     "\u2420":"SP", // SYMBOL FOR SPACE
  417.     "\u2421":"DEL", // SYMBOL FOR DELETE
  418.     "\u2423":"{\\textvisiblespace}", // OPEN BOX
  419.     "\u2424":"NL", // SYMBOL FOR NEWLINE
  420.     "\u2425":"///", // SYMBOL FOR DELETE FORM TWO
  421.     "\u2426":"?", // SYMBOL FOR SUBSTITUTE FORM TWO
  422.     "\u2460":"(1)", // CIRCLED DIGIT ONE
  423.     "\u2461":"(2)", // CIRCLED DIGIT TWO
  424.     "\u2462":"(3)", // CIRCLED DIGIT THREE
  425.     "\u2463":"(4)", // CIRCLED DIGIT FOUR
  426.     "\u2464":"(5)", // CIRCLED DIGIT FIVE
  427.     "\u2465":"(6)", // CIRCLED DIGIT SIX
  428.     "\u2466":"(7)", // CIRCLED DIGIT SEVEN
  429.     "\u2467":"(8)", // CIRCLED DIGIT EIGHT
  430.     "\u2468":"(9)", // CIRCLED DIGIT NINE
  431.     "\u2469":"(10)", // CIRCLED NUMBER TEN
  432.     "\u246A":"(11)", // CIRCLED NUMBER ELEVEN
  433.     "\u246B":"(12)", // CIRCLED NUMBER TWELVE
  434.     "\u246C":"(13)", // CIRCLED NUMBER THIRTEEN
  435.     "\u246D":"(14)", // CIRCLED NUMBER FOURTEEN
  436.     "\u246E":"(15)", // CIRCLED NUMBER FIFTEEN
  437.     "\u246F":"(16)", // CIRCLED NUMBER SIXTEEN
  438.     "\u2470":"(17)", // CIRCLED NUMBER SEVENTEEN
  439.     "\u2471":"(18)", // CIRCLED NUMBER EIGHTEEN
  440.     "\u2472":"(19)", // CIRCLED NUMBER NINETEEN
  441.     "\u2473":"(20)", // CIRCLED NUMBER TWENTY
  442.     "\u2474":"(1)", // PARENTHESIZED DIGIT ONE
  443.     "\u2475":"(2)", // PARENTHESIZED DIGIT TWO
  444.     "\u2476":"(3)", // PARENTHESIZED DIGIT THREE
  445.     "\u2477":"(4)", // PARENTHESIZED DIGIT FOUR
  446.     "\u2478":"(5)", // PARENTHESIZED DIGIT FIVE
  447.     "\u2479":"(6)", // PARENTHESIZED DIGIT SIX
  448.     "\u247A":"(7)", // PARENTHESIZED DIGIT SEVEN
  449.     "\u247B":"(8)", // PARENTHESIZED DIGIT EIGHT
  450.     "\u247C":"(9)", // PARENTHESIZED DIGIT NINE
  451.     "\u247D":"(10)", // PARENTHESIZED NUMBER TEN
  452.     "\u247E":"(11)", // PARENTHESIZED NUMBER ELEVEN
  453.     "\u247F":"(12)", // PARENTHESIZED NUMBER TWELVE
  454.     "\u2480":"(13)", // PARENTHESIZED NUMBER THIRTEEN
  455.     "\u2481":"(14)", // PARENTHESIZED NUMBER FOURTEEN
  456.     "\u2482":"(15)", // PARENTHESIZED NUMBER FIFTEEN
  457.     "\u2483":"(16)", // PARENTHESIZED NUMBER SIXTEEN
  458.     "\u2484":"(17)", // PARENTHESIZED NUMBER SEVENTEEN
  459.     "\u2485":"(18)", // PARENTHESIZED NUMBER EIGHTEEN
  460.     "\u2486":"(19)", // PARENTHESIZED NUMBER NINETEEN
  461.     "\u2487":"(20)", // PARENTHESIZED NUMBER TWENTY
  462.     "\u2488":"1.", // DIGIT ONE FULL STOP
  463.     "\u2489":"2.", // DIGIT TWO FULL STOP
  464.     "\u248A":"3.", // DIGIT THREE FULL STOP
  465.     "\u248B":"4.", // DIGIT FOUR FULL STOP
  466.     "\u248C":"5.", // DIGIT FIVE FULL STOP
  467.     "\u248D":"6.", // DIGIT SIX FULL STOP
  468.     "\u248E":"7.", // DIGIT SEVEN FULL STOP
  469.     "\u248F":"8.", // DIGIT EIGHT FULL STOP
  470.     "\u2490":"9.", // DIGIT NINE FULL STOP
  471.     "\u2491":"10.", // NUMBER TEN FULL STOP
  472.     "\u2492":"11.", // NUMBER ELEVEN FULL STOP
  473.     "\u2493":"12.", // NUMBER TWELVE FULL STOP
  474.     "\u2494":"13.", // NUMBER THIRTEEN FULL STOP
  475.     "\u2495":"14.", // NUMBER FOURTEEN FULL STOP
  476.     "\u2496":"15.", // NUMBER FIFTEEN FULL STOP
  477.     "\u2497":"16.", // NUMBER SIXTEEN FULL STOP
  478.     "\u2498":"17.", // NUMBER SEVENTEEN FULL STOP
  479.     "\u2499":"18.", // NUMBER EIGHTEEN FULL STOP
  480.     "\u249A":"19.", // NUMBER NINETEEN FULL STOP
  481.     "\u249B":"20.", // NUMBER TWENTY FULL STOP
  482.     "\u249C":"(a)", // PARENTHESIZED LATIN SMALL LETTER A
  483.     "\u249D":"(b)", // PARENTHESIZED LATIN SMALL LETTER B
  484.     "\u249E":"(c)", // PARENTHESIZED LATIN SMALL LETTER C
  485.     "\u249F":"(d)", // PARENTHESIZED LATIN SMALL LETTER D
  486.     "\u24A0":"(e)", // PARENTHESIZED LATIN SMALL LETTER E
  487.     "\u24A1":"(f)", // PARENTHESIZED LATIN SMALL LETTER F
  488.     "\u24A2":"(g)", // PARENTHESIZED LATIN SMALL LETTER G
  489.     "\u24A3":"(h)", // PARENTHESIZED LATIN SMALL LETTER H
  490.     "\u24A4":"(i)", // PARENTHESIZED LATIN SMALL LETTER I
  491.     "\u24A5":"(j)", // PARENTHESIZED LATIN SMALL LETTER J
  492.     "\u24A6":"(k)", // PARENTHESIZED LATIN SMALL LETTER K
  493.     "\u24A7":"(l)", // PARENTHESIZED LATIN SMALL LETTER L
  494.     "\u24A8":"(m)", // PARENTHESIZED LATIN SMALL LETTER M
  495.     "\u24A9":"(n)", // PARENTHESIZED LATIN SMALL LETTER N
  496.     "\u24AA":"(o)", // PARENTHESIZED LATIN SMALL LETTER O
  497.     "\u24AB":"(p)", // PARENTHESIZED LATIN SMALL LETTER P
  498.     "\u24AC":"(q)", // PARENTHESIZED LATIN SMALL LETTER Q
  499.     "\u24AD":"(r)", // PARENTHESIZED LATIN SMALL LETTER R
  500.     "\u24AE":"(s)", // PARENTHESIZED LATIN SMALL LETTER S
  501.     "\u24AF":"(t)", // PARENTHESIZED LATIN SMALL LETTER T
  502.     "\u24B0":"(u)", // PARENTHESIZED LATIN SMALL LETTER U
  503.     "\u24B1":"(v)", // PARENTHESIZED LATIN SMALL LETTER V
  504.     "\u24B2":"(w)", // PARENTHESIZED LATIN SMALL LETTER W
  505.     "\u24B3":"(x)", // PARENTHESIZED LATIN SMALL LETTER X
  506.     "\u24B4":"(y)", // PARENTHESIZED LATIN SMALL LETTER Y
  507.     "\u24B5":"(z)", // PARENTHESIZED LATIN SMALL LETTER Z
  508.     "\u24B6":"(A)", // CIRCLED LATIN CAPITAL LETTER A
  509.     "\u24B7":"(B)", // CIRCLED LATIN CAPITAL LETTER B
  510.     "\u24B8":"(C)", // CIRCLED LATIN CAPITAL LETTER C
  511.     "\u24B9":"(D)", // CIRCLED LATIN CAPITAL LETTER D
  512.     "\u24BA":"(E)", // CIRCLED LATIN CAPITAL LETTER E
  513.     "\u24BB":"(F)", // CIRCLED LATIN CAPITAL LETTER F
  514.     "\u24BC":"(G)", // CIRCLED LATIN CAPITAL LETTER G
  515.     "\u24BD":"(H)", // CIRCLED LATIN CAPITAL LETTER H
  516.     "\u24BE":"(I)", // CIRCLED LATIN CAPITAL LETTER I
  517.     "\u24BF":"(J)", // CIRCLED LATIN CAPITAL LETTER J
  518.     "\u24C0":"(K)", // CIRCLED LATIN CAPITAL LETTER K
  519.     "\u24C1":"(L)", // CIRCLED LATIN CAPITAL LETTER L
  520.     "\u24C2":"(M)", // CIRCLED LATIN CAPITAL LETTER M
  521.     "\u24C3":"(N)", // CIRCLED LATIN CAPITAL LETTER N
  522.     "\u24C4":"(O)", // CIRCLED LATIN CAPITAL LETTER O
  523.     "\u24C5":"(P)", // CIRCLED LATIN CAPITAL LETTER P
  524.     "\u24C6":"(Q)", // CIRCLED LATIN CAPITAL LETTER Q
  525.     "\u24C7":"(R)", // CIRCLED LATIN CAPITAL LETTER R
  526.     "\u24C8":"(S)", // CIRCLED LATIN CAPITAL LETTER S
  527.     "\u24C9":"(T)", // CIRCLED LATIN CAPITAL LETTER T
  528.     "\u24CA":"(U)", // CIRCLED LATIN CAPITAL LETTER U
  529.     "\u24CB":"(V)", // CIRCLED LATIN CAPITAL LETTER V
  530.     "\u24CC":"(W)", // CIRCLED LATIN CAPITAL LETTER W
  531.     "\u24CD":"(X)", // CIRCLED LATIN CAPITAL LETTER X
  532.     "\u24CE":"(Y)", // CIRCLED LATIN CAPITAL LETTER Y
  533.     "\u24CF":"(Z)", // CIRCLED LATIN CAPITAL LETTER Z
  534.     "\u24D0":"(a)", // CIRCLED LATIN SMALL LETTER A
  535.     "\u24D1":"(b)", // CIRCLED LATIN SMALL LETTER B
  536.     "\u24D2":"(c)", // CIRCLED LATIN SMALL LETTER C
  537.     "\u24D3":"(d)", // CIRCLED LATIN SMALL LETTER D
  538.     "\u24D4":"(e)", // CIRCLED LATIN SMALL LETTER E
  539.     "\u24D5":"(f)", // CIRCLED LATIN SMALL LETTER F
  540.     "\u24D6":"(g)", // CIRCLED LATIN SMALL LETTER G
  541.     "\u24D7":"(h)", // CIRCLED LATIN SMALL LETTER H
  542.     "\u24D8":"(i)", // CIRCLED LATIN SMALL LETTER I
  543.     "\u24D9":"(j)", // CIRCLED LATIN SMALL LETTER J
  544.     "\u24DA":"(k)", // CIRCLED LATIN SMALL LETTER K
  545.     "\u24DB":"(l)", // CIRCLED LATIN SMALL LETTER L
  546.     "\u24DC":"(m)", // CIRCLED LATIN SMALL LETTER M
  547.     "\u24DD":"(n)", // CIRCLED LATIN SMALL LETTER N
  548.     "\u24DE":"(o)", // CIRCLED LATIN SMALL LETTER O
  549.     "\u24DF":"(p)", // CIRCLED LATIN SMALL LETTER P
  550.     "\u24E0":"(q)", // CIRCLED LATIN SMALL LETTER Q
  551.     "\u24E1":"(r)", // CIRCLED LATIN SMALL LETTER R
  552.     "\u24E2":"(s)", // CIRCLED LATIN SMALL LETTER S
  553.     "\u24E3":"(t)", // CIRCLED LATIN SMALL LETTER T
  554.     "\u24E4":"(u)", // CIRCLED LATIN SMALL LETTER U
  555.     "\u24E5":"(v)", // CIRCLED LATIN SMALL LETTER V
  556.     "\u24E6":"(w)", // CIRCLED LATIN SMALL LETTER W
  557.     "\u24E7":"(x)", // CIRCLED LATIN SMALL LETTER X
  558.     "\u24E8":"(y)", // CIRCLED LATIN SMALL LETTER Y
  559.     "\u24E9":"(z)", // CIRCLED LATIN SMALL LETTER Z
  560.     "\u24EA":"(0)", // CIRCLED DIGIT ZERO
  561.     "\u2500":"-", // BOX DRAWINGS LIGHT HORIZONTAL
  562.     "\u2501":"=", // BOX DRAWINGS HEAVY HORIZONTAL
  563.     "\u2502":"|", // BOX DRAWINGS LIGHT VERTICAL
  564.     "\u2503":"|", // BOX DRAWINGS HEAVY VERTICAL
  565.     "\u2504":"-", // BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
  566.     "\u2505":"=", // BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
  567.     "\u2506":"|", // BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
  568.     "\u2507":"|", // BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
  569.     "\u2508":"-", // BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
  570.     "\u2509":"=", // BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
  571.     "\u250A":"|", // BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
  572.     "\u250B":"|", // BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
  573.     "\u250C":"+", // BOX DRAWINGS LIGHT DOWN AND RIGHT
  574.     "\u250D":"+", // BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
  575.     "\u250E":"+", // BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
  576.     "\u250F":"+", // BOX DRAWINGS HEAVY DOWN AND RIGHT
  577.     "\u2510":"+", // BOX DRAWINGS LIGHT DOWN AND LEFT
  578.     "\u2511":"+", // BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
  579.     "\u2512":"+", // BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
  580.     "\u2513":"+", // BOX DRAWINGS HEAVY DOWN AND LEFT
  581.     "\u2514":"+", // BOX DRAWINGS LIGHT UP AND RIGHT
  582.     "\u2515":"+", // BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
  583.     "\u2516":"+", // BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
  584.     "\u2517":"+", // BOX DRAWINGS HEAVY UP AND RIGHT
  585.     "\u2518":"+", // BOX DRAWINGS LIGHT UP AND LEFT
  586.     "\u2519":"+", // BOX DRAWINGS UP LIGHT AND LEFT HEAVY
  587.     "\u251A":"+", // BOX DRAWINGS UP HEAVY AND LEFT LIGHT
  588.     "\u251B":"+", // BOX DRAWINGS HEAVY UP AND LEFT
  589.     "\u251C":"+", // BOX DRAWINGS LIGHT VERTICAL AND RIGHT
  590.     "\u251D":"+", // BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
  591.     "\u251E":"+", // BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
  592.     "\u251F":"+", // BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
  593.     "\u2520":"+", // BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
  594.     "\u2521":"+", // BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
  595.     "\u2522":"+", // BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
  596.     "\u2523":"+", // BOX DRAWINGS HEAVY VERTICAL AND RIGHT
  597.     "\u2524":"+", // BOX DRAWINGS LIGHT VERTICAL AND LEFT
  598.     "\u2525":"+", // BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
  599.     "\u2526":"+", // BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
  600.     "\u2527":"+", // BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
  601.     "\u2528":"+", // BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
  602.     "\u2529":"+", // BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
  603.     "\u252A":"+", // BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
  604.     "\u252B":"+", // BOX DRAWINGS HEAVY VERTICAL AND LEFT
  605.     "\u252C":"+", // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
  606.     "\u252D":"+", // BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
  607.     "\u252E":"+", // BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
  608.     "\u252F":"+", // BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
  609.     "\u2530":"+", // BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
  610.     "\u2531":"+", // BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
  611.     "\u2532":"+", // BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
  612.     "\u2533":"+", // BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
  613.     "\u2534":"+", // BOX DRAWINGS LIGHT UP AND HORIZONTAL
  614.     "\u2535":"+", // BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
  615.     "\u2536":"+", // BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
  616.     "\u2537":"+", // BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
  617.     "\u2538":"+", // BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
  618.     "\u2539":"+", // BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
  619.     "\u253A":"+", // BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
  620.     "\u253B":"+", // BOX DRAWINGS HEAVY UP AND HORIZONTAL
  621.     "\u253C":"+", // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
  622.     "\u253D":"+", // BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
  623.     "\u253E":"+", // BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
  624.     "\u253F":"+", // BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
  625.     "\u2540":"+", // BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
  626.     "\u2541":"+", // BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
  627.     "\u2542":"+", // BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
  628.     "\u2543":"+", // BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
  629.     "\u2544":"+", // BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
  630.     "\u2545":"+", // BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
  631.     "\u2546":"+", // BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
  632.     "\u2547":"+", // BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
  633.     "\u2548":"+", // BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
  634.     "\u2549":"+", // BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
  635.     "\u254A":"+", // BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
  636.     "\u254B":"+", // BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
  637.     "\u254C":"-", // BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
  638.     "\u254D":"=", // BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL
  639.     "\u254E":"|", // BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL
  640.     "\u254F":"|", // BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
  641.     "\u2550":"=", // BOX DRAWINGS DOUBLE HORIZONTAL
  642.     "\u2551":"|", // BOX DRAWINGS DOUBLE VERTICAL
  643.     "\u2552":"+", // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
  644.     "\u2553":"+", // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
  645.     "\u2554":"+", // BOX DRAWINGS DOUBLE DOWN AND RIGHT
  646.     "\u2555":"+", // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
  647.     "\u2556":"+", // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
  648.     "\u2557":"+", // BOX DRAWINGS DOUBLE DOWN AND LEFT
  649.     "\u2558":"+", // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
  650.     "\u2559":"+", // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
  651.     "\u255A":"+", // BOX DRAWINGS DOUBLE UP AND RIGHT
  652.     "\u255B":"+", // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
  653.     "\u255C":"+", // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
  654.     "\u255D":"+", // BOX DRAWINGS DOUBLE UP AND LEFT
  655.     "\u255E":"+", // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
  656.     "\u255F":"+", // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
  657.     "\u2560":"+", // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
  658.     "\u2561":"+", // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
  659.     "\u2562":"+", // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
  660.     "\u2563":"+", // BOX DRAWINGS DOUBLE VERTICAL AND LEFT
  661.     "\u2564":"+", // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
  662.     "\u2565":"+", // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
  663.     "\u2566":"+", // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
  664.     "\u2567":"+", // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
  665.     "\u2568":"+", // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
  666.     "\u2569":"+", // BOX DRAWINGS DOUBLE UP AND HORIZONTAL
  667.     "\u256A":"+", // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
  668.     "\u256B":"+", // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
  669.     "\u256C":"+", // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
  670.     "\u256D":"+", // BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
  671.     "\u256E":"+", // BOX DRAWINGS LIGHT ARC DOWN AND LEFT
  672.     "\u256F":"+", // BOX DRAWINGS LIGHT ARC UP AND LEFT
  673.     "\u2570":"+", // BOX DRAWINGS LIGHT ARC UP AND RIGHT
  674.     "\u2571":"/", // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
  675.     "\u2572":"\\", // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
  676.     "\u2573":"X", // BOX DRAWINGS LIGHT DIAGONAL CROSS
  677.     "\u257C":"-", // BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT
  678.     "\u257D":"|", // BOX DRAWINGS LIGHT UP AND HEAVY DOWN
  679.     "\u257E":"-", // BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT
  680.     "\u257F":"|", // BOX DRAWINGS HEAVY UP AND LIGHT DOWN
  681.     "\u25CB":"o", // WHITE CIRCLE
  682.     "\u25E6":"{\\textopenbullet}", // WHITE BULLET
  683.     "\u2605":"*", // BLACK STAR
  684.     "\u2606":"*", // WHITE STAR
  685.     "\u2612":"X", // BALLOT BOX WITH X
  686.     "\u2613":"X", // SALTIRE
  687.     "\u2639":":-(", // WHITE FROWNING FACE
  688.     "\u263A":":-)", // WHITE SMILING FACE
  689.     "\u263B":"(-:", // BLACK SMILING FACE
  690.     "\u266D":"b", // MUSIC FLAT SIGN
  691.     "\u266F":"$\\#$", // MUSIC SHARP SIGN
  692.     "\u2701":"$\\%<$", // UPPER BLADE SCISSORS
  693.     "\u2702":"$\\%<$", // BLACK SCISSORS
  694.     "\u2703":"$\\%<$", // LOWER BLADE SCISSORS
  695.     "\u2704":"$\\%<$", // WHITE SCISSORS
  696.     "\u270C":"V", // VICTORY HAND
  697.     "\u2713":"v", // CHECK MARK
  698.     "\u2714":"V", // HEAVY CHECK MARK
  699.     "\u2715":"x", // MULTIPLICATION X
  700.     "\u2716":"x", // HEAVY MULTIPLICATION X
  701.     "\u2717":"X", // BALLOT X
  702.     "\u2718":"X", // HEAVY BALLOT X
  703.     "\u2719":"+", // OUTLINED GREEK CROSS
  704.     "\u271A":"+", // HEAVY GREEK CROSS
  705.     "\u271B":"+", // OPEN CENTRE CROSS
  706.     "\u271C":"+", // HEAVY OPEN CENTRE CROSS
  707.     "\u271D":"+", // LATIN CROSS
  708.     "\u271E":"+", // SHADOWED WHITE LATIN CROSS
  709.     "\u271F":"+", // OUTLINED LATIN CROSS
  710.     "\u2720":"+", // MALTESE CROSS
  711.     "\u2721":"*", // STAR OF DAVID
  712.     "\u2722":"+", // FOUR TEARDROP-SPOKED ASTERISK
  713.     "\u2723":"+", // FOUR BALLOON-SPOKED ASTERISK
  714.     "\u2724":"+", // HEAVY FOUR BALLOON-SPOKED ASTERISK
  715.     "\u2725":"+", // FOUR CLUB-SPOKED ASTERISK
  716.     "\u2726":"+", // BLACK FOUR POINTED STAR
  717.     "\u2727":"+", // WHITE FOUR POINTED STAR
  718.     "\u2729":"*", // STRESS OUTLINED WHITE STAR
  719.     "\u272A":"*", // CIRCLED WHITE STAR
  720.     "\u272B":"*", // OPEN CENTRE BLACK STAR
  721.     "\u272C":"*", // BLACK CENTRE WHITE STAR
  722.     "\u272D":"*", // OUTLINED BLACK STAR
  723.     "\u272E":"*", // HEAVY OUTLINED BLACK STAR
  724.     "\u272F":"*", // PINWHEEL STAR
  725.     "\u2730":"*", // SHADOWED WHITE STAR
  726.     "\u2731":"*", // HEAVY ASTERISK
  727.     "\u2732":"*", // OPEN CENTRE ASTERISK
  728.     "\u2733":"*", // EIGHT SPOKED ASTERISK
  729.     "\u2734":"*", // EIGHT POINTED BLACK STAR
  730.     "\u2735":"*", // EIGHT POINTED PINWHEEL STAR
  731.     "\u2736":"*", // SIX POINTED BLACK STAR
  732.     "\u2737":"*", // EIGHT POINTED RECTILINEAR BLACK STAR
  733.     "\u2738":"*", // HEAVY EIGHT POINTED RECTILINEAR BLACK STAR
  734.     "\u2739":"*", // TWELVE POINTED BLACK STAR
  735.     "\u273A":"*", // SIXTEEN POINTED ASTERISK
  736.     "\u273B":"*", // TEARDROP-SPOKED ASTERISK
  737.     "\u273C":"*", // OPEN CENTRE TEARDROP-SPOKED ASTERISK
  738.     "\u273D":"*", // HEAVY TEARDROP-SPOKED ASTERISK
  739.     "\u273E":"*", // SIX PETALLED BLACK AND WHITE FLORETTE
  740.     "\u273F":"*", // BLACK FLORETTE
  741.     "\u2740":"*", // WHITE FLORETTE
  742.     "\u2741":"*", // EIGHT PETALLED OUTLINED BLACK FLORETTE
  743.     "\u2742":"*", // CIRCLED OPEN CENTRE EIGHT POINTED STAR
  744.     "\u2743":"*", // HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK
  745.     "\u2744":"*", // SNOWFLAKE
  746.     "\u2745":"*", // TIGHT TRIFOLIATE SNOWFLAKE
  747.     "\u2746":"*", // HEAVY CHEVRON SNOWFLAKE
  748.     "\u2747":"*", // SPARKLE
  749.     "\u2748":"*", // HEAVY SPARKLE
  750.     "\u2749":"*", // BALLOON-SPOKED ASTERISK
  751.     "\u274A":"*", // EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
  752.     "\u274B":"*", // HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
  753.     "\uFB00":"ff", // LATIN SMALL LIGATURE FF
  754.     "\uFB01":"fi", // LATIN SMALL LIGATURE FI
  755.     "\uFB02":"fl", // LATIN SMALL LIGATURE FL
  756.     "\uFB03":"ffi", // LATIN SMALL LIGATURE FFI
  757.     "\uFB04":"ffl", // LATIN SMALL LIGATURE FFL
  758.     "\uFB05":"st", // LATIN SMALL LIGATURE LONG S T
  759.     "\uFB06":"st", // LATIN SMALL LIGATURE ST
  760. /* Derived accented characters */
  761.     "\u00C0":"\\`{A}", // LATIN CAPITAL LETTER A WITH GRAVE
  762.     "\u00C1":"\\'{A}", // LATIN CAPITAL LETTER A WITH ACUTE
  763.     "\u00C2":"\\^{A}", // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  764.     "\u00C3":"\\~{A}", // LATIN CAPITAL LETTER A WITH TILDE
  765.     "\u00C4":"\\\"{A}", // LATIN CAPITAL LETTER A WITH DIAERESIS
  766.     "\u00C5":"\\r{A}", // LATIN CAPITAL LETTER A WITH RING ABOVE
  767.     "\u00C7":"\\c{C}", // LATIN CAPITAL LETTER C WITH CEDILLA
  768.     "\u00C8":"\\`{E}", // LATIN CAPITAL LETTER E WITH GRAVE
  769.     "\u00C9":"\\'{E}", // LATIN CAPITAL LETTER E WITH ACUTE
  770.     "\u00CA":"\\^{E}", // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
  771.     "\u00CB":"\\\"{E}", // LATIN CAPITAL LETTER E WITH DIAERESIS
  772.     "\u00CC":"\\`{I}", // LATIN CAPITAL LETTER I WITH GRAVE
  773.     "\u00CD":"\\'{I}", // LATIN CAPITAL LETTER I WITH ACUTE
  774.     "\u00CE":"\\^{I}", // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
  775.     "\u00CF":"\\\"{I}", // LATIN CAPITAL LETTER I WITH DIAERESIS
  776.     "\u00D1":"\\~{N}", // LATIN CAPITAL LETTER N WITH TILDE
  777.     "\u00D2":"\\`{O}", // LATIN CAPITAL LETTER O WITH GRAVE
  778.     "\u00D3":"\\'{O}", // LATIN CAPITAL LETTER O WITH ACUTE
  779.     "\u00D4":"\\^{O}", // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
  780.     "\u00D5":"\\~{O}", // LATIN CAPITAL LETTER O WITH TILDE
  781.     "\u00D6":"\\\"{O}", // LATIN CAPITAL LETTER O WITH DIAERESIS
  782.     "\u00D9":"\\`{U}", // LATIN CAPITAL LETTER U WITH GRAVE
  783.     "\u00DA":"\\'{U}", // LATIN CAPITAL LETTER U WITH ACUTE
  784.     "\u00DB":"\\^{U}", // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
  785.     "\u00DC":"\\\"{U}", // LATIN CAPITAL LETTER U WITH DIAERESIS
  786.     "\u00DD":"\\'{Y}", // LATIN CAPITAL LETTER Y WITH ACUTE
  787.     "\u00E0":"\\`{a}", // LATIN SMALL LETTER A WITH GRAVE
  788.     "\u00E1":"\\'{a}", // LATIN SMALL LETTER A WITH ACUTE
  789.     "\u00E2":"\\^{a}", // LATIN SMALL LETTER A WITH CIRCUMFLEX
  790.     "\u00E3":"\\~{a}", // LATIN SMALL LETTER A WITH TILDE
  791.     "\u00E4":"\\\"{a}", // LATIN SMALL LETTER A WITH DIAERESIS
  792.     "\u00E5":"\\r{a}", // LATIN SMALL LETTER A WITH RING ABOVE
  793.     "\u00E7":"\\c{c}", // LATIN SMALL LETTER C WITH CEDILLA
  794.     "\u00E8":"\\`{e}", // LATIN SMALL LETTER E WITH GRAVE
  795.     "\u00E9":"\\'{e}", // LATIN SMALL LETTER E WITH ACUTE
  796.     "\u00EA":"\\^{e}", // LATIN SMALL LETTER E WITH CIRCUMFLEX
  797.     "\u00EB":"\\\"{e}", // LATIN SMALL LETTER E WITH DIAERESIS
  798.     "\u00EC":"\\`{i}", // LATIN SMALL LETTER I WITH GRAVE
  799.     "\u00ED":"\\'{i}", // LATIN SMALL LETTER I WITH ACUTE
  800.     "\u00EE":"\\^{i}", // LATIN SMALL LETTER I WITH CIRCUMFLEX
  801.     "\u00EF":"\\\"{i}", // LATIN SMALL LETTER I WITH DIAERESIS
  802.     "\u00F1":"\\~{n}", // LATIN SMALL LETTER N WITH TILDE
  803.     "\u00F2":"\\`{o}", // LATIN SMALL LETTER O WITH GRAVE
  804.     "\u00F3":"\\'{o}", // LATIN SMALL LETTER O WITH ACUTE
  805.     "\u00F4":"\\^{o}", // LATIN SMALL LETTER O WITH CIRCUMFLEX
  806.     "\u00F5":"\\~{o}", // LATIN SMALL LETTER O WITH TILDE
  807.     "\u00F6":"\\\"{o}", // LATIN SMALL LETTER O WITH DIAERESIS
  808.     "\u00F9":"\\`{u}", // LATIN SMALL LETTER U WITH GRAVE
  809.     "\u00FA":"\\'{u}", // LATIN SMALL LETTER U WITH ACUTE
  810.     "\u00FB":"\\^{u}", // LATIN SMALL LETTER U WITH CIRCUMFLEX
  811.     "\u00FC":"\\\"{u}", // LATIN SMALL LETTER U WITH DIAERESIS
  812.     "\u00FD":"\\'{y}", // LATIN SMALL LETTER Y WITH ACUTE
  813.     "\u00FF":"\\\"{y}", // LATIN SMALL LETTER Y WITH DIAERESIS
  814.     "\u0100":"\\={A}", // LATIN CAPITAL LETTER A WITH MACRON
  815.     "\u0101":"\\={a}", // LATIN SMALL LETTER A WITH MACRON
  816.     "\u0102":"\\u{A}", // LATIN CAPITAL LETTER A WITH BREVE
  817.     "\u0103":"\\u{a}", // LATIN SMALL LETTER A WITH BREVE
  818.     "\u0104":"\\k{A}", // LATIN CAPITAL LETTER A WITH OGONEK
  819.     "\u0105":"\\k{a}", // LATIN SMALL LETTER A WITH OGONEK
  820.     "\u0106":"\\'{C}", // LATIN CAPITAL LETTER C WITH ACUTE
  821.     "\u0107":"\\'{c}", // LATIN SMALL LETTER C WITH ACUTE
  822.     "\u0108":"\\^{C}", // LATIN CAPITAL LETTER C WITH CIRCUMFLEX
  823.     "\u0109":"\\^{c}", // LATIN SMALL LETTER C WITH CIRCUMFLEX
  824.     "\u010A":"\\.{C}", // LATIN CAPITAL LETTER C WITH DOT ABOVE
  825.     "\u010B":"\\.{c}", // LATIN SMALL LETTER C WITH DOT ABOVE
  826.     "\u010C":"\\v{C}", // LATIN CAPITAL LETTER C WITH CARON
  827.     "\u010D":"\\v{c}", // LATIN SMALL LETTER C WITH CARON
  828.     "\u010E":"\\v{D}", // LATIN CAPITAL LETTER D WITH CARON
  829.     "\u010F":"\\v{d}", // LATIN SMALL LETTER D WITH CARON
  830.     "\u0112":"\\={E}", // LATIN CAPITAL LETTER E WITH MACRON
  831.     "\u0113":"\\={e}", // LATIN SMALL LETTER E WITH MACRON
  832.     "\u0114":"\\u{E}", // LATIN CAPITAL LETTER E WITH BREVE
  833.     "\u0115":"\\u{e}", // LATIN SMALL LETTER E WITH BREVE
  834.     "\u0116":"\\.{E}", // LATIN CAPITAL LETTER E WITH DOT ABOVE
  835.     "\u0117":"\\.{e}", // LATIN SMALL LETTER E WITH DOT ABOVE
  836.     "\u0118":"\\k{E}", // LATIN CAPITAL LETTER E WITH OGONEK
  837.     "\u0119":"\\k{e}", // LATIN SMALL LETTER E WITH OGONEK
  838.     "\u011A":"\\v{E}", // LATIN CAPITAL LETTER E WITH CARON
  839.     "\u011B":"\\v{e}", // LATIN SMALL LETTER E WITH CARON
  840.     "\u011C":"\\^{G}", // LATIN CAPITAL LETTER G WITH CIRCUMFLEX
  841.     "\u011D":"\\^{g}", // LATIN SMALL LETTER G WITH CIRCUMFLEX
  842.     "\u011E":"\\u{G}", // LATIN CAPITAL LETTER G WITH BREVE
  843.     "\u011F":"\\u{g}", // LATIN SMALL LETTER G WITH BREVE
  844.     "\u0120":"\\.{G}", // LATIN CAPITAL LETTER G WITH DOT ABOVE
  845.     "\u0121":"\\.{g}", // LATIN SMALL LETTER G WITH DOT ABOVE
  846.     "\u0122":"\\c{G}", // LATIN CAPITAL LETTER G WITH CEDILLA
  847.     "\u0123":"\\c{g}", // LATIN SMALL LETTER G WITH CEDILLA
  848.     "\u0124":"\\^{H}", // LATIN CAPITAL LETTER H WITH CIRCUMFLEX
  849.     "\u0125":"\\^{h}", // LATIN SMALL LETTER H WITH CIRCUMFLEX
  850.     "\u0128":"\\~{I}", // LATIN CAPITAL LETTER I WITH TILDE
  851.     "\u0129":"\\~{i}", // LATIN SMALL LETTER I WITH TILDE
  852.     "\u012A":"\\={I}", // LATIN CAPITAL LETTER I WITH MACRON
  853.     "\u012B":"\\={i}", // LATIN SMALL LETTER I WITH MACRON
  854.     "\u012C":"\\u{I}", // LATIN CAPITAL LETTER I WITH BREVE
  855.     "\u012D":"\\u{i}", // LATIN SMALL LETTER I WITH BREVE
  856.     "\u012E":"\\k{I}", // LATIN CAPITAL LETTER I WITH OGONEK
  857.     "\u012F":"\\k{i}", // LATIN SMALL LETTER I WITH OGONEK
  858.     "\u0130":"\\.{I}", // LATIN CAPITAL LETTER I WITH DOT ABOVE
  859.     "\u0134":"\\^{J}", // LATIN CAPITAL LETTER J WITH CIRCUMFLEX
  860.     "\u0135":"\\^{j}", // LATIN SMALL LETTER J WITH CIRCUMFLEX
  861.     "\u0136":"\\c{K}", // LATIN CAPITAL LETTER K WITH CEDILLA
  862.     "\u0137":"\\c{k}", // LATIN SMALL LETTER K WITH CEDILLA
  863.     "\u0139":"\\'{L}", // LATIN CAPITAL LETTER L WITH ACUTE
  864.     "\u013A":"\\'{l}", // LATIN SMALL LETTER L WITH ACUTE
  865.     "\u013B":"\\c{L}", // LATIN CAPITAL LETTER L WITH CEDILLA
  866.     "\u013C":"\\c{l}", // LATIN SMALL LETTER L WITH CEDILLA
  867.     "\u013D":"\\v{L}", // LATIN CAPITAL LETTER L WITH CARON
  868.     "\u013E":"\\v{l}", // LATIN SMALL LETTER L WITH CARON
  869.     "\u0141":"\\L{}", //LATIN CAPITAL LETTER L WITH STROKE
  870.     "\u0142":"\\l{}", //LATIN SMALL LETTER L WITH STROKE
  871.     "\u0143":"\\'{N}", // LATIN CAPITAL LETTER N WITH ACUTE
  872.     "\u0144":"\\'{n}", // LATIN SMALL LETTER N WITH ACUTE
  873.     "\u0145":"\\c{N}", // LATIN CAPITAL LETTER N WITH CEDILLA
  874.     "\u0146":"\\c{n}", // LATIN SMALL LETTER N WITH CEDILLA
  875.     "\u0147":"\\v{N}", // LATIN CAPITAL LETTER N WITH CARON
  876.     "\u0148":"\\v{n}", // LATIN SMALL LETTER N WITH CARON
  877.     "\u014C":"\\={O}", // LATIN CAPITAL LETTER O WITH MACRON
  878.     "\u014D":"\\={o}", // LATIN SMALL LETTER O WITH MACRON
  879.     "\u014E":"\\u{O}", // LATIN CAPITAL LETTER O WITH BREVE
  880.     "\u014F":"\\u{o}", // LATIN SMALL LETTER O WITH BREVE
  881.     "\u0150":"\\H{O}", // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
  882.     "\u0151":"\\H{o}", // LATIN SMALL LETTER O WITH DOUBLE ACUTE
  883.     "\u0154":"\\'{R}", // LATIN CAPITAL LETTER R WITH ACUTE
  884.     "\u0155":"\\'{r}", // LATIN SMALL LETTER R WITH ACUTE
  885.     "\u0156":"\\c{R}", // LATIN CAPITAL LETTER R WITH CEDILLA
  886.     "\u0157":"\\c{r}", // LATIN SMALL LETTER R WITH CEDILLA
  887.     "\u0158":"\\v{R}", // LATIN CAPITAL LETTER R WITH CARON
  888.     "\u0159":"\\v{r}", // LATIN SMALL LETTER R WITH CARON
  889.     "\u015A":"\\'{S}", // LATIN CAPITAL LETTER S WITH ACUTE
  890.     "\u015B":"\\'{s}", // LATIN SMALL LETTER S WITH ACUTE
  891.     "\u015C":"\\^{S}", // LATIN CAPITAL LETTER S WITH CIRCUMFLEX
  892.     "\u015D":"\\^{s}", // LATIN SMALL LETTER S WITH CIRCUMFLEX
  893.     "\u015E":"\\c{S}", // LATIN CAPITAL LETTER S WITH CEDILLA
  894.     "\u015F":"\\c{s}", // LATIN SMALL LETTER S WITH CEDILLA
  895.     "\u0160":"\\v{S}", // LATIN CAPITAL LETTER S WITH CARON
  896.     "\u0161":"\\v{s}", // LATIN SMALL LETTER S WITH CARON
  897.     "\u0162":"\\c{T}", // LATIN CAPITAL LETTER T WITH CEDILLA
  898.     "\u0163":"\\c{t}", // LATIN SMALL LETTER T WITH CEDILLA
  899.     "\u0164":"\\v{T}", // LATIN CAPITAL LETTER T WITH CARON
  900.     "\u0165":"\\v{t}", // LATIN SMALL LETTER T WITH CARON
  901.     "\u0168":"\\~{U}", // LATIN CAPITAL LETTER U WITH TILDE
  902.     "\u0169":"\\~{u}", // LATIN SMALL LETTER U WITH TILDE
  903.     "\u016A":"\\={U}", // LATIN CAPITAL LETTER U WITH MACRON
  904.     "\u016B":"\\={u}", // LATIN SMALL LETTER U WITH MACRON
  905.     "\u016C":"\\u{U}", // LATIN CAPITAL LETTER U WITH BREVE
  906.     "\u016D":"\\u{u}", // LATIN SMALL LETTER U WITH BREVE
  907.     "\u0170":"\\H{U}", // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
  908.     "\u0171":"\\H{u}", // LATIN SMALL LETTER U WITH DOUBLE ACUTE
  909.     "\u0172":"\\k{U}", // LATIN CAPITAL LETTER U WITH OGONEK
  910.     "\u0173":"\\k{u}", // LATIN SMALL LETTER U WITH OGONEK
  911.     "\u0174":"\\^{W}", // LATIN CAPITAL LETTER W WITH CIRCUMFLEX
  912.     "\u0175":"\\^{w}", // LATIN SMALL LETTER W WITH CIRCUMFLEX
  913.     "\u0176":"\\^{Y}", // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
  914.     "\u0177":"\\^{y}", // LATIN SMALL LETTER Y WITH CIRCUMFLEX
  915.     "\u0178":"\\\"{Y}", // LATIN CAPITAL LETTER Y WITH DIAERESIS
  916.     "\u0179":"\\'{Z}", // LATIN CAPITAL LETTER Z WITH ACUTE
  917.     "\u017A":"\\'{z}", // LATIN SMALL LETTER Z WITH ACUTE
  918.     "\u017B":"\\.{Z}", // LATIN CAPITAL LETTER Z WITH DOT ABOVE
  919.     "\u017C":"\\.{z}", // LATIN SMALL LETTER Z WITH DOT ABOVE
  920.     "\u017D":"\\v{Z}", // LATIN CAPITAL LETTER Z WITH CARON
  921.     "\u017E":"\\v{z}", // LATIN SMALL LETTER Z WITH CARON
  922.     "\u01CD":"\\v{A}", // LATIN CAPITAL LETTER A WITH CARON
  923.     "\u01CE":"\\v{a}", // LATIN SMALL LETTER A WITH CARON
  924.     "\u01CF":"\\v{I}", // LATIN CAPITAL LETTER I WITH CARON
  925.     "\u01D0":"\\v{i}", // LATIN SMALL LETTER I WITH CARON
  926.     "\u01D1":"\\v{O}", // LATIN CAPITAL LETTER O WITH CARON
  927.     "\u01D2":"\\v{o}", // LATIN SMALL LETTER O WITH CARON
  928.     "\u01D3":"\\v{U}", // LATIN CAPITAL LETTER U WITH CARON
  929.     "\u01D4":"\\v{u}", // LATIN SMALL LETTER U WITH CARON
  930.     "\u01E6":"\\v{G}", // LATIN CAPITAL LETTER G WITH CARON
  931.     "\u01E7":"\\v{g}", // LATIN SMALL LETTER G WITH CARON
  932.     "\u01E8":"\\v{K}", // LATIN CAPITAL LETTER K WITH CARON
  933.     "\u01E9":"\\v{k}", // LATIN SMALL LETTER K WITH CARON
  934.     "\u01EA":"\\k{O}", // LATIN CAPITAL LETTER O WITH OGONEK
  935.     "\u01EB":"\\k{o}", // LATIN SMALL LETTER O WITH OGONEK
  936.     "\u01F0":"\\v{j}", // LATIN SMALL LETTER J WITH CARON
  937.     "\u01F4":"\\'{G}", // LATIN CAPITAL LETTER G WITH ACUTE
  938.     "\u01F5":"\\'{g}", // LATIN SMALL LETTER G WITH ACUTE
  939.     "\u1E02":"\\.{B}", // LATIN CAPITAL LETTER B WITH DOT ABOVE
  940.     "\u1E03":"\\.{b}", // LATIN SMALL LETTER B WITH DOT ABOVE
  941.     "\u1E04":"\\d{B}", // LATIN CAPITAL LETTER B WITH DOT BELOW
  942.     "\u1E05":"\\d{b}", // LATIN SMALL LETTER B WITH DOT BELOW
  943.     "\u1E06":"\\b{B}", // LATIN CAPITAL LETTER B WITH LINE BELOW
  944.     "\u1E07":"\\b{b}", // LATIN SMALL LETTER B WITH LINE BELOW
  945.     "\u1E0A":"\\.{D}", // LATIN CAPITAL LETTER D WITH DOT ABOVE
  946.     "\u1E0B":"\\.{d}", // LATIN SMALL LETTER D WITH DOT ABOVE
  947.     "\u1E0C":"\\d{D}", // LATIN CAPITAL LETTER D WITH DOT BELOW
  948.     "\u1E0D":"\\d{d}", // LATIN SMALL LETTER D WITH DOT BELOW
  949.     "\u1E0E":"\\b{D}", // LATIN CAPITAL LETTER D WITH LINE BELOW
  950.     "\u1E0F":"\\b{d}", // LATIN SMALL LETTER D WITH LINE BELOW
  951.     "\u1E10":"\\c{D}", // LATIN CAPITAL LETTER D WITH CEDILLA
  952.     "\u1E11":"\\c{d}", // LATIN SMALL LETTER D WITH CEDILLA
  953.     "\u1E1E":"\\.{F}", // LATIN CAPITAL LETTER F WITH DOT ABOVE
  954.     "\u1E1F":"\\.{f}", // LATIN SMALL LETTER F WITH DOT ABOVE
  955.     "\u1E20":"\\={G}", // LATIN CAPITAL LETTER G WITH MACRON
  956.     "\u1E21":"\\={g}", // LATIN SMALL LETTER G WITH MACRON
  957.     "\u1E22":"\\.{H}", // LATIN CAPITAL LETTER H WITH DOT ABOVE
  958.     "\u1E23":"\\.{h}", // LATIN SMALL LETTER H WITH DOT ABOVE
  959.     "\u1E24":"\\d{H}", // LATIN CAPITAL LETTER H WITH DOT BELOW
  960.     "\u1E25":"\\d{h}", // LATIN SMALL LETTER H WITH DOT BELOW
  961.     "\u1E26":"\\\"{H}", // LATIN CAPITAL LETTER H WITH DIAERESIS
  962.     "\u1E27":"\\\"{h}", // LATIN SMALL LETTER H WITH DIAERESIS
  963.     "\u1E28":"\\c{H}", // LATIN CAPITAL LETTER H WITH CEDILLA
  964.     "\u1E29":"\\c{h}", // LATIN SMALL LETTER H WITH CEDILLA
  965.     "\u1E30":"\\'{K}", // LATIN CAPITAL LETTER K WITH ACUTE
  966.     "\u1E31":"\\'{k}", // LATIN SMALL LETTER K WITH ACUTE
  967.     "\u1E32":"\\d{K}", // LATIN CAPITAL LETTER K WITH DOT BELOW
  968.     "\u1E33":"\\d{k}", // LATIN SMALL LETTER K WITH DOT BELOW
  969.     "\u1E34":"\\b{K}", // LATIN CAPITAL LETTER K WITH LINE BELOW
  970.     "\u1E35":"\\b{k}", // LATIN SMALL LETTER K WITH LINE BELOW
  971.     "\u1E36":"\\d{L}", // LATIN CAPITAL LETTER L WITH DOT BELOW
  972.     "\u1E37":"\\d{l}", // LATIN SMALL LETTER L WITH DOT BELOW
  973.     "\u1E3A":"\\b{L}", // LATIN CAPITAL LETTER L WITH LINE BELOW
  974.     "\u1E3B":"\\b{l}", // LATIN SMALL LETTER L WITH LINE BELOW
  975.     "\u1E3E":"\\'{M}", // LATIN CAPITAL LETTER M WITH ACUTE
  976.     "\u1E3F":"\\'{m}", // LATIN SMALL LETTER M WITH ACUTE
  977.     "\u1E40":"\\.{M}", // LATIN CAPITAL LETTER M WITH DOT ABOVE
  978.     "\u1E41":"\\.{m}", // LATIN SMALL LETTER M WITH DOT ABOVE
  979.     "\u1E42":"\\d{M}", // LATIN CAPITAL LETTER M WITH DOT BELOW
  980.     "\u1E43":"\\d{m}", // LATIN SMALL LETTER M WITH DOT BELOW
  981.     "\u1E44":"\\.{N}", // LATIN CAPITAL LETTER N WITH DOT ABOVE
  982.     "\u1E45":"\\.{n}", // LATIN SMALL LETTER N WITH DOT ABOVE
  983.     "\u1E46":"\\d{N}", // LATIN CAPITAL LETTER N WITH DOT BELOW
  984.     "\u1E47":"\\d{n}", // LATIN SMALL LETTER N WITH DOT BELOW
  985.     "\u1E48":"\\b{N}", // LATIN CAPITAL LETTER N WITH LINE BELOW
  986.     "\u1E49":"\\b{n}", // LATIN SMALL LETTER N WITH LINE BELOW
  987.     "\u1E54":"\\'{P}", // LATIN CAPITAL LETTER P WITH ACUTE
  988.     "\u1E55":"\\'{p}", // LATIN SMALL LETTER P WITH ACUTE
  989.     "\u1E56":"\\.{P}", // LATIN CAPITAL LETTER P WITH DOT ABOVE
  990.     "\u1E57":"\\.{p}", // LATIN SMALL LETTER P WITH DOT ABOVE
  991.     "\u1E58":"\\.{R}", // LATIN CAPITAL LETTER R WITH DOT ABOVE
  992.     "\u1E59":"\\.{r}", // LATIN SMALL LETTER R WITH DOT ABOVE
  993.     "\u1E5A":"\\d{R}", // LATIN CAPITAL LETTER R WITH DOT BELOW
  994.     "\u1E5B":"\\d{r}", // LATIN SMALL LETTER R WITH DOT BELOW
  995.     "\u1E5E":"\\b{R}", // LATIN CAPITAL LETTER R WITH LINE BELOW
  996.     "\u1E5F":"\\b{r}", // LATIN SMALL LETTER R WITH LINE BELOW
  997.     "\u1E60":"\\.{S}", // LATIN CAPITAL LETTER S WITH DOT ABOVE
  998.     "\u1E61":"\\.{s}", // LATIN SMALL LETTER S WITH DOT ABOVE
  999.     "\u1E62":"\\d{S}", // LATIN CAPITAL LETTER S WITH DOT BELOW
  1000.     "\u1E63":"\\d{s}", // LATIN SMALL LETTER S WITH DOT BELOW
  1001.     "\u1E6A":"\\.{T}", // LATIN CAPITAL LETTER T WITH DOT ABOVE
  1002.     "\u1E6B":"\\.{t}", // LATIN SMALL LETTER T WITH DOT ABOVE
  1003.     "\u1E6C":"\\d{T}", // LATIN CAPITAL LETTER T WITH DOT BELOW
  1004.     "\u1E6D":"\\d{t}", // LATIN SMALL LETTER T WITH DOT BELOW
  1005.     "\u1E6E":"\\b{T}", // LATIN CAPITAL LETTER T WITH LINE BELOW
  1006.     "\u1E6F":"\\b{t}", // LATIN SMALL LETTER T WITH LINE BELOW
  1007.     "\u1E7C":"\\~{V}", // LATIN CAPITAL LETTER V WITH TILDE
  1008.     "\u1E7D":"\\~{v}", // LATIN SMALL LETTER V WITH TILDE
  1009.     "\u1E7E":"\\d{V}", // LATIN CAPITAL LETTER V WITH DOT BELOW
  1010.     "\u1E7F":"\\d{v}", // LATIN SMALL LETTER V WITH DOT BELOW
  1011.     "\u1E80":"\\`{W}", // LATIN CAPITAL LETTER W WITH GRAVE
  1012.     "\u1E81":"\\`{w}", // LATIN SMALL LETTER W WITH GRAVE
  1013.     "\u1E82":"\\'{W}", // LATIN CAPITAL LETTER W WITH ACUTE
  1014.     "\u1E83":"\\'{w}", // LATIN SMALL LETTER W WITH ACUTE
  1015.     "\u1E84":"\\\"{W}", // LATIN CAPITAL LETTER W WITH DIAERESIS
  1016.     "\u1E85":"\\\"{w}", // LATIN SMALL LETTER W WITH DIAERESIS
  1017.     "\u1E86":"\\.{W}", // LATIN CAPITAL LETTER W WITH DOT ABOVE
  1018.     "\u1E87":"\\.{w}", // LATIN SMALL LETTER W WITH DOT ABOVE
  1019.     "\u1E88":"\\d{W}", // LATIN CAPITAL LETTER W WITH DOT BELOW
  1020.     "\u1E89":"\\d{w}", // LATIN SMALL LETTER W WITH DOT BELOW
  1021.     "\u1E8A":"\\.{X}", // LATIN CAPITAL LETTER X WITH DOT ABOVE
  1022.     "\u1E8B":"\\.{x}", // LATIN SMALL LETTER X WITH DOT ABOVE
  1023.     "\u1E8C":"\\\"{X}", // LATIN CAPITAL LETTER X WITH DIAERESIS
  1024.     "\u1E8D":"\\\"{x}", // LATIN SMALL LETTER X WITH DIAERESIS
  1025.     "\u1E8E":"\\.{Y}", // LATIN CAPITAL LETTER Y WITH DOT ABOVE
  1026.     "\u1E8F":"\\.{y}", // LATIN SMALL LETTER Y WITH DOT ABOVE
  1027.     "\u1E90":"\\^{Z}", // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
  1028.     "\u1E91":"\\^{z}", // LATIN SMALL LETTER Z WITH CIRCUMFLEX
  1029.     "\u1E92":"\\d{Z}", // LATIN CAPITAL LETTER Z WITH DOT BELOW
  1030.     "\u1E93":"\\d{z}", // LATIN SMALL LETTER Z WITH DOT BELOW
  1031.     "\u1E94":"\\b{Z}", // LATIN CAPITAL LETTER Z WITH LINE BELOW
  1032.     "\u1E95":"\\b{z}", // LATIN SMALL LETTER Z WITH LINE BELOW
  1033.     "\u1E96":"\\b{h}", // LATIN SMALL LETTER H WITH LINE BELOW
  1034.     "\u1E97":"\\\"{t}", // LATIN SMALL LETTER T WITH DIAERESIS
  1035.     "\u1EA0":"\\d{A}", // LATIN CAPITAL LETTER A WITH DOT BELOW
  1036.     "\u1EA1":"\\d{a}", // LATIN SMALL LETTER A WITH DOT BELOW
  1037.     "\u1EB8":"\\d{E}", // LATIN CAPITAL LETTER E WITH DOT BELOW
  1038.     "\u1EB9":"\\d{e}", // LATIN SMALL LETTER E WITH DOT BELOW
  1039.     "\u1EBC":"\\~{E}", // LATIN CAPITAL LETTER E WITH TILDE
  1040.     "\u1EBD":"\\~{e}", // LATIN SMALL LETTER E WITH TILDE
  1041.     "\u1ECA":"\\d{I}", // LATIN CAPITAL LETTER I WITH DOT BELOW
  1042.     "\u1ECB":"\\d{i}", // LATIN SMALL LETTER I WITH DOT BELOW
  1043.     "\u1ECC":"\\d{O}", // LATIN CAPITAL LETTER O WITH DOT BELOW
  1044.     "\u1ECD":"\\d{o}", // LATIN SMALL LETTER O WITH DOT BELOW
  1045.     "\u1EE4":"\\d{U}", // LATIN CAPITAL LETTER U WITH DOT BELOW
  1046.     "\u1EE5":"\\d{u}", // LATIN SMALL LETTER U WITH DOT BELOW
  1047.     "\u1EF2":"\\`{Y}", // LATIN CAPITAL LETTER Y WITH GRAVE
  1048.     "\u1EF3":"\\`{y}", // LATIN SMALL LETTER Y WITH GRAVE
  1049.     "\u1EF4":"\\d{Y}", // LATIN CAPITAL LETTER Y WITH DOT BELOW
  1050.     "\u1EF5":"\\d{y}", // LATIN SMALL LETTER Y WITH DOT BELOW
  1051.     "\u1EF8":"\\~{Y}", // LATIN CAPITAL LETTER Y WITH TILDE
  1052.     "\u1EF9":"\\~{y}" // LATIN SMALL LETTER Y WITH TILDE
  1053. };
  1054.  
  1055. /* unfortunately the mapping isn't reversible - hence this second table - sigh! */
  1056. var reversemappingTable = {
  1057.     "\\url"                           : "",       // strip 'url'
  1058.     "\\href"                          : "",       // strip 'href'
  1059.     "~"                               : "\u00A0", // NO-BREAK SPACE
  1060.     "{\\textexclamdown}"              : "\u00A1", // INVERTED EXCLAMATION MARK
  1061.     "{\\textcent}"                    : "\u00A2", // CENT SIGN
  1062.     "{\\textsterling}"                : "\u00A3", // POUND SIGN
  1063.     "{\\textyen}"                     : "\u00A5", // YEN SIGN
  1064.     "{\\textbrokenbar}"               : "\u00A6", // BROKEN BAR
  1065.     "{\\textsection}"                 : "\u00A7", // SECTION SIGN
  1066.     "{\\textasciidieresis}"           : "\u00A8", // DIAERESIS
  1067.     "{\\textcopyright}"               : "\u00A9", // COPYRIGHT SIGN
  1068.     "{\\textordfeminine}"             : "\u00AA", // FEMININE ORDINAL INDICATOR
  1069.     "{\\guillemotleft}"               : "\u00AB", // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
  1070.     "{\\textlnot}"                    : "\u00AC", // NOT SIGN
  1071.     "{\\textregistered}"              : "\u00AE", // REGISTERED SIGN
  1072.     "{\\textasciimacron}"             : "\u00AF", // MACRON
  1073.     "{\\textdegree}"                  : "\u00B0", // DEGREE SIGN
  1074.     "{\\textpm}"                      : "\u00B1", // PLUS-MINUS SIGN
  1075.     "{\\texttwosuperior}"             : "\u00B2", // SUPERSCRIPT TWO
  1076.     "{\\textthreesuperior}"           : "\u00B3", // SUPERSCRIPT THREE
  1077.     "{\\textasciiacute}"              : "\u00B4", // ACUTE ACCENT
  1078.     "{\\textmu}"                      : "\u00B5", // MICRO SIGN
  1079.     "{\\textparagraph}"               : "\u00B6", // PILCROW SIGN
  1080.     "{\\textperiodcentered}"          : "\u00B7", // MIDDLE DOT
  1081.     "{\\c\\ }"                        : "\u00B8", // CEDILLA
  1082.     "{\\textonesuperior}"             : "\u00B9", // SUPERSCRIPT ONE
  1083.     "{\\textordmasculine}"            : "\u00BA", // MASCULINE ORDINAL INDICATOR
  1084.     "{\\guillemotright}"              : "\u00BB", // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
  1085.     "{\\textonequarter}"              : "\u00BC", // VULGAR FRACTION ONE QUARTER
  1086.     "{\\textonehalf}"                 : "\u00BD", // VULGAR FRACTION ONE HALF
  1087.     "{\\textthreequarters}"           : "\u00BE", // VULGAR FRACTION THREE QUARTERS
  1088.     "{\\textquestiondown}"            : "\u00BF", // INVERTED QUESTION MARK
  1089.     "{\\AE}"                          : "\u00C6", // LATIN CAPITAL LETTER AE
  1090.     "{\\DH}"                          : "\u00D0", // LATIN CAPITAL LETTER ETH
  1091.     "{\\texttimes}"                   : "\u00D7", // MULTIPLICATION SIGN
  1092.     "{\\TH}"                          : "\u00DE", // LATIN CAPITAL LETTER THORN
  1093.     "{\\ss}"                          : "\u00DF", // LATIN SMALL LETTER SHARP S
  1094.     "{\\ae}"                          : "\u00E6", // LATIN SMALL LETTER AE
  1095.     "{\\dh}"                          : "\u00F0", // LATIN SMALL LETTER ETH
  1096.     "{\\textdiv}"                     : "\u00F7", // DIVISION SIGN
  1097.     "{\\th}"                          : "\u00FE", // LATIN SMALL LETTER THORN
  1098.     "{\\i}"                           : "\u0131", // LATIN SMALL LETTER DOTLESS I
  1099.     "'n"                              : "\u0149", // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
  1100.     "{\\NG}"                          : "\u014A", // LATIN CAPITAL LETTER ENG
  1101.     "{\\ng}"                          : "\u014B", // LATIN SMALL LETTER ENG
  1102.     "{\\OE}"                          : "\u0152", // LATIN CAPITAL LIGATURE OE
  1103.     "{\\oe}"                          : "\u0153", // LATIN SMALL LIGATURE OE
  1104.     "{\\textasciicircum}"             : "\u02C6", // MODIFIER LETTER CIRCUMFLEX ACCENT
  1105. //    "\\~{}"                           : "\u02DC", // SMALL TILDE
  1106.     "{\\textacutedbl}"                : "\u02DD", // DOUBLE ACUTE ACCENT
  1107.     "{\\textendash}"                  : "\u2013", // EN DASH
  1108.     "{\\textemdash}"                  : "\u2014", // EM DASH
  1109.     "---"                             : "\u2014", // EM DASH
  1110.     "--"                              : "\u2013", // EN DASH
  1111.     "{\\textbardbl}"                  : "\u2016", // DOUBLE VERTICAL LINE
  1112.     "{\\textunderscore}"              : "\u2017", // DOUBLE LOW LINE
  1113.     "{\\textquoteleft}"               : "\u2018", // LEFT SINGLE QUOTATION MARK
  1114.     "{\\textquoteright}"              : "\u2019", // RIGHT SINGLE QUOTATION MARK
  1115.     "{\\quotesinglbase}"              : "\u201A", // SINGLE LOW-9 QUOTATION MARK
  1116.     "{\\textquotedblleft}"            : "\u201C", // LEFT DOUBLE QUOTATION MARK
  1117.     "{\\textquotedblright}"           : "\u201D", // RIGHT DOUBLE QUOTATION MARK
  1118.     "{\\quotedblbase}"                : "\u201E", // DOUBLE LOW-9 QUOTATION MARK
  1119. //    "{\\quotedblbase}"                : "\u201F", // DOUBLE HIGH-REVERSED-9 QUOTATION MARK
  1120.     "{\\textdagger}"                  : "\u2020", // DAGGER
  1121.     "{\\textdaggerdbl}"               : "\u2021", // DOUBLE DAGGER
  1122.     "{\\textbullet}"                  : "\u2022", // BULLET
  1123.     "{\\textellipsis}"                : "\u2026", // HORIZONTAL ELLIPSIS
  1124.     "{\\textperthousand}"             : "\u2030", // PER MILLE SIGN
  1125.     "'''"                             : "\u2034", // TRIPLE PRIME
  1126.     "''"                              : "\u201D", // RIGHT DOUBLE QUOTATION MARK (could be a double prime)
  1127.     "``"                              : "\u201C", // LEFT DOUBLE QUOTATION MARK (could be a reversed double prime)
  1128.     "```"                             : "\u2037", // REVERSED TRIPLE PRIME
  1129.     "{\\guilsinglleft}"               : "\u2039", // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
  1130.     "{\\guilsinglright}"              : "\u203A", // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
  1131.     "!!"                              : "\u203C", // DOUBLE EXCLAMATION MARK
  1132.     "{\\textfractionsolidus}"         : "\u2044", // FRACTION SLASH
  1133.     "?!"                              : "\u2048", // QUESTION EXCLAMATION MARK
  1134.     "!?"                              : "\u2049", // EXCLAMATION QUESTION MARK
  1135.     "$^{0}$"                          : "\u2070", // SUPERSCRIPT ZERO
  1136.     "$^{4}$"                          : "\u2074", // SUPERSCRIPT FOUR
  1137.     "$^{5}$"                          : "\u2075", // SUPERSCRIPT FIVE
  1138.     "$^{6}$"                          : "\u2076", // SUPERSCRIPT SIX
  1139.     "$^{7}$"                          : "\u2077", // SUPERSCRIPT SEVEN
  1140.     "$^{8}$"                          : "\u2078", // SUPERSCRIPT EIGHT
  1141.     "$^{9}$"                          : "\u2079", // SUPERSCRIPT NINE
  1142.     "$^{+}$"                          : "\u207A", // SUPERSCRIPT PLUS SIGN
  1143.     "$^{-}$"                          : "\u207B", // SUPERSCRIPT MINUS
  1144.     "$^{=}$"                          : "\u207C", // SUPERSCRIPT EQUALS SIGN
  1145.     "$^{(}$"                          : "\u207D", // SUPERSCRIPT LEFT PARENTHESIS
  1146.     "$^{)}$"                          : "\u207E", // SUPERSCRIPT RIGHT PARENTHESIS
  1147.     "$^{n}$"                          : "\u207F", // SUPERSCRIPT LATIN SMALL LETTER N
  1148.     "$_{0}$"                          : "\u2080", // SUBSCRIPT ZERO
  1149.     "$_{1}$"                          : "\u2081", // SUBSCRIPT ONE
  1150.     "$_{2}$"                          : "\u2082", // SUBSCRIPT TWO
  1151.     "$_{3}$"                          : "\u2083", // SUBSCRIPT THREE
  1152.     "$_{4}$"                          : "\u2084", // SUBSCRIPT FOUR
  1153.     "$_{5}$"                          : "\u2085", // SUBSCRIPT FIVE
  1154.     "$_{6}$"                          : "\u2086", // SUBSCRIPT SIX
  1155.     "$_{7}$"                          : "\u2087", // SUBSCRIPT SEVEN
  1156.     "$_{8}$"                          : "\u2088", // SUBSCRIPT EIGHT
  1157.     "$_{9}$"                          : "\u2089", // SUBSCRIPT NINE
  1158.     "$_{+}$"                          : "\u208A", // SUBSCRIPT PLUS SIGN
  1159.     "$_{-}$"                          : "\u208B", // SUBSCRIPT MINUS
  1160.     "$_{=}$"                          : "\u208C", // SUBSCRIPT EQUALS SIGN
  1161.     "$_{(}$"                          : "\u208D", // SUBSCRIPT LEFT PARENTHESIS
  1162.     "$_{)}$"                          : "\u208E", // SUBSCRIPT RIGHT PARENTHESIS
  1163.     "{\\texteuro}"                    : "\u20AC", // EURO SIGN
  1164.     "a/c"                             : "\u2100", // ACCOUNT OF
  1165.     "a/s"                             : "\u2101", // ADDRESSED TO THE SUBJECT
  1166.     "{\\textcelsius}"                 : "\u2103", // DEGREE CELSIUS
  1167.     "c/o"                             : "\u2105", // CARE OF
  1168.     "c/u"                             : "\u2106", // CADA UNA
  1169.     "{\\textnumero}"                  : "\u2116", // NUMERO SIGN
  1170.     "{\\textcircledP}"                : "\u2117", // SOUND RECORDING COPYRIGHT
  1171.     "{\\textservicemark}"             : "\u2120", // SERVICE MARK
  1172.     "{TEL}"                           : "\u2121", // TELEPHONE SIGN
  1173.     "{\\texttrademark}"               : "\u2122", // TRADE MARK SIGN
  1174.     "{\\textohm}"                     : "\u2126", // OHM SIGN
  1175.     "{\\textestimated}"               : "\u212E", // ESTIMATED SYMBOL
  1176.     " 1/3"                            : "\u2153", // VULGAR FRACTION ONE THIRD
  1177.     " 2/3"                            : "\u2154", // VULGAR FRACTION TWO THIRDS
  1178.     " 1/5"                            : "\u2155", // VULGAR FRACTION ONE FIFTH
  1179.     " 2/5"                            : "\u2156", // VULGAR FRACTION TWO FIFTHS
  1180.     " 3/5"                            : "\u2157", // VULGAR FRACTION THREE FIFTHS
  1181.     " 4/5"                            : "\u2158", // VULGAR FRACTION FOUR FIFTHS
  1182.     " 1/6"                            : "\u2159", // VULGAR FRACTION ONE SIXTH
  1183.     " 5/6"                            : "\u215A", // VULGAR FRACTION FIVE SIXTHS
  1184.     " 1/8"                            : "\u215B", // VULGAR FRACTION ONE EIGHTH
  1185.     " 3/8"                            : "\u215C", // VULGAR FRACTION THREE EIGHTHS
  1186.     " 5/8"                            : "\u215D", // VULGAR FRACTION FIVE EIGHTHS
  1187.     " 7/8"                            : "\u215E", // VULGAR FRACTION SEVEN EIGHTHS
  1188.     " 1/"                             : "\u215F", // FRACTION NUMERATOR ONE
  1189.     "{\\textleftarrow}"               : "\u2190", // LEFTWARDS ARROW
  1190.     "{\\textuparrow}"                 : "\u2191", // UPWARDS ARROW
  1191.     "{\\textrightarrow}"              : "\u2192", // RIGHTWARDS ARROW
  1192.     "{\\textdownarrow}"               : "\u2193", // DOWNWARDS ARROW
  1193.     "<->"                             : "\u2194", // LEFT RIGHT ARROW
  1194.     "<="                              : "\u21D0", // LEFTWARDS DOUBLE ARROW
  1195.     "=>"                              : "\u21D2", // RIGHTWARDS DOUBLE ARROW
  1196.     "<=>"                             : "\u21D4", // LEFT RIGHT DOUBLE ARROW
  1197.     "$\\infty$"                       : "\u221E", // INFINITY
  1198.     "||"                              : "\u2225", // PARALLEL TO
  1199.     "\\~{}"                           : "\u223C", // TILDE OPERATOR
  1200.     "/="                              : "\u2260", // NOT EQUAL TO
  1201. //    "<="                              : "\u2264", // LESS-THAN OR EQUAL TO
  1202.     ">="                              : "\u2265", // GREATER-THAN OR EQUAL TO
  1203.     "<<"                              : "\u226A", // MUCH LESS-THAN
  1204.     ">>"                              : "\u226B", // MUCH GREATER-THAN
  1205.     "(+)"                             : "\u2295", // CIRCLED PLUS
  1206.     "(-)"                             : "\u2296", // CIRCLED MINUS
  1207.     "(x)"                             : "\u2297", // CIRCLED TIMES
  1208.     "(/)"                             : "\u2298", // CIRCLED DIVISION SLASH
  1209.     "|-"                              : "\u22A2", // RIGHT TACK
  1210.     "-|"                              : "\u22A3", // LEFT TACK
  1211. //    "|-"                              : "\u22A6", // ASSERTION
  1212.     "|="                              : "\u22A7", // MODELS
  1213. //    "|="                              : "\u22A8", // TRUE
  1214.     "||-"                             : "\u22A9", // FORCES
  1215.     "$\\#$"                           : "\u22D5", // EQUAL AND PARALLEL TO
  1216.     "<<<"                             : "\u22D8", // VERY MUCH LESS-THAN
  1217.     ">>>"                             : "\u22D9", // VERY MUCH GREATER-THAN
  1218.     "{\\textlangle}"                  : "\u2329", // LEFT-POINTING ANGLE BRACKET
  1219.     "{\\textrangle}"                  : "\u232A", // RIGHT-POINTING ANGLE BRACKET
  1220.     "{\\textvisiblespace}"            : "\u2423", // OPEN BOX
  1221.     "///"                             : "\u2425", // SYMBOL FOR DELETE FORM TWO
  1222.     "{\\textopenbullet}"              : "\u25E6", // WHITE BULLET
  1223.     ":-("                             : "\u2639", // WHITE FROWNING FACE
  1224.     ":-)"                             : "\u263A", // WHITE SMILING FACE
  1225.     "(-: "                            : "\u263B", // BLACK SMILING FACE
  1226. //    "$\\#$"                           : "\u266F", // MUSIC SHARP SIGN
  1227.     "$\\%<$"                          : "\u2701", // UPPER BLADE SCISSORS
  1228. /*    "$\\%<$"                          : "\u2702", // BLACK SCISSORS
  1229.     "$\\%<$"                          : "\u2703", // LOWER BLADE SCISSORS
  1230.     "$\\%<$"                          : "\u2704", // WHITE SCISSORS */
  1231. /* Derived accented characters */
  1232.     "\\`{A}"                          : "\u00C0", // LATIN CAPITAL LETTER A WITH GRAVE
  1233.     "\\'{A}"                          : "\u00C1", // LATIN CAPITAL LETTER A WITH ACUTE
  1234.     "\\^{A}"                          : "\u00C2", // LATIN CAPITAL LETTER A WITH CIRCUMFLEX
  1235.     "\\~{A}"                          : "\u00C3", // LATIN CAPITAL LETTER A WITH TILDE
  1236.     "\\\"{A}"                         : "\u00C4", // LATIN CAPITAL LETTER A WITH DIAERESIS
  1237.     "\\r{A}"                          : "\u00C5", // LATIN CAPITAL LETTER A WITH RING ABOVE
  1238.     "\\c{C}"                          : "\u00C7", // LATIN CAPITAL LETTER C WITH CEDILLA
  1239.     "\\`{E}"                          : "\u00C8", // LATIN CAPITAL LETTER E WITH GRAVE
  1240.     "\\'{E}"                          : "\u00C9", // LATIN CAPITAL LETTER E WITH ACUTE
  1241.     "\\^{E}"                          : "\u00CA", // LATIN CAPITAL LETTER E WITH CIRCUMFLEX
  1242.     "\\\"{E}"                         : "\u00CB", // LATIN CAPITAL LETTER E WITH DIAERESIS
  1243.     "\\`{I}"                          : "\u00CC", // LATIN CAPITAL LETTER I WITH GRAVE
  1244.     "\\'{I}"                          : "\u00CD", // LATIN CAPITAL LETTER I WITH ACUTE
  1245.     "\\^{I}"                          : "\u00CE", // LATIN CAPITAL LETTER I WITH CIRCUMFLEX
  1246.     "\\\"{I}"                         : "\u00CF", // LATIN CAPITAL LETTER I WITH DIAERESIS
  1247.     "\\~{N}"                          : "\u00D1", // LATIN CAPITAL LETTER N WITH TILDE
  1248.     "\\`{O}"                          : "\u00D2", // LATIN CAPITAL LETTER O WITH GRAVE
  1249.     "\\'{O}"                          : "\u00D3", // LATIN CAPITAL LETTER O WITH ACUTE
  1250.     "\\^{O}"                          : "\u00D4", // LATIN CAPITAL LETTER O WITH CIRCUMFLEX
  1251.     "\\~{O}"                          : "\u00D5", // LATIN CAPITAL LETTER O WITH TILDE
  1252.     "\\\"{O}"                         : "\u00D6", // LATIN CAPITAL LETTER O WITH DIAERESIS
  1253.     "\\`{U}"                          : "\u00D9", // LATIN CAPITAL LETTER U WITH GRAVE
  1254.     "\\'{U}"                          : "\u00DA", // LATIN CAPITAL LETTER U WITH ACUTE
  1255.     "\\^{U}"                          : "\u00DB", // LATIN CAPITAL LETTER U WITH CIRCUMFLEX
  1256.     "\\\"{U}"                         : "\u00DC", // LATIN CAPITAL LETTER U WITH DIAERESIS
  1257.     "\\'{Y}"                          : "\u00DD", // LATIN CAPITAL LETTER Y WITH ACUTE
  1258.     "\\`{a}"                          : "\u00E0", // LATIN SMALL LETTER A WITH GRAVE
  1259.     "\\'{a}"                          : "\u00E1", // LATIN SMALL LETTER A WITH ACUTE
  1260.     "\\^{a}"                          : "\u00E2", // LATIN SMALL LETTER A WITH CIRCUMFLEX
  1261.     "\\~{a}"                          : "\u00E3", // LATIN SMALL LETTER A WITH TILDE
  1262.     "\\\"{a}"                         : "\u00E4", // LATIN SMALL LETTER A WITH DIAERESIS
  1263.     "\\r{a}"                          : "\u00E5", // LATIN SMALL LETTER A WITH RING ABOVE
  1264.     "\\c{c}"                          : "\u00E7", // LATIN SMALL LETTER C WITH CEDILLA
  1265.     "\\`{e}"                          : "\u00E8", // LATIN SMALL LETTER E WITH GRAVE
  1266.     "\\'{e}"                          : "\u00E9", // LATIN SMALL LETTER E WITH ACUTE
  1267.     "\\^{e}"                          : "\u00EA", // LATIN SMALL LETTER E WITH CIRCUMFLEX
  1268.     "\\\"{e}"                         : "\u00EB", // LATIN SMALL LETTER E WITH DIAERESIS
  1269.     "\\`{i}"                          : "\u00EC", // LATIN SMALL LETTER I WITH GRAVE
  1270.     "\\'{i}"                          : "\u00ED", // LATIN SMALL LETTER I WITH ACUTE
  1271.     "\\^{i}"                          : "\u00EE", // LATIN SMALL LETTER I WITH CIRCUMFLEX
  1272.     "\\\"{i}"                         : "\u00EF", // LATIN SMALL LETTER I WITH DIAERESIS
  1273.     "\\~{n}"                          : "\u00F1", // LATIN SMALL LETTER N WITH TILDE
  1274.     "\\`{o}"                          : "\u00F2", // LATIN SMALL LETTER O WITH GRAVE
  1275.     "\\'{o}"                          : "\u00F3", // LATIN SMALL LETTER O WITH ACUTE
  1276.     "\\^{o}"                          : "\u00F4", // LATIN SMALL LETTER O WITH CIRCUMFLEX
  1277.     "\\~{o}"                          : "\u00F5", // LATIN SMALL LETTER O WITH TILDE
  1278.     "\\\"{o}"                         : "\u00F6", // LATIN SMALL LETTER O WITH DIAERESIS
  1279.     "\\`{u}"                          : "\u00F9", // LATIN SMALL LETTER U WITH GRAVE
  1280.     "\\'{u}"                          : "\u00FA", // LATIN SMALL LETTER U WITH ACUTE
  1281.     "\\^{u}"                          : "\u00FB", // LATIN SMALL LETTER U WITH CIRCUMFLEX
  1282.     "\\\"{u}"                         : "\u00FC", // LATIN SMALL LETTER U WITH DIAERESIS
  1283.     "\\'{y}"                          : "\u00FD", // LATIN SMALL LETTER Y WITH ACUTE
  1284.     "\\\"{y}"                         : "\u00FF", // LATIN SMALL LETTER Y WITH DIAERESIS
  1285.     "\\={A}"                          : "\u0100", // LATIN CAPITAL LETTER A WITH MACRON
  1286.     "\\={a}"                          : "\u0101", // LATIN SMALL LETTER A WITH MACRON
  1287.     "\\u{A}"                          : "\u0102", // LATIN CAPITAL LETTER A WITH BREVE
  1288.     "\\u{a}"                          : "\u0103", // LATIN SMALL LETTER A WITH BREVE
  1289.     "\\k{A}"                          : "\u0104", // LATIN CAPITAL LETTER A WITH OGONEK
  1290.     "\\k{a}"                          : "\u0105", // LATIN SMALL LETTER A WITH OGONEK
  1291.     "\\'{C}"                          : "\u0106", // LATIN CAPITAL LETTER C WITH ACUTE
  1292.     "\\'{c}"                          : "\u0107", // LATIN SMALL LETTER C WITH ACUTE
  1293.     "\\^{C}"                          : "\u0108", // LATIN CAPITAL LETTER C WITH CIRCUMFLEX
  1294.     "\\^{c}"                          : "\u0109", // LATIN SMALL LETTER C WITH CIRCUMFLEX
  1295.     "\\.{C}"                          : "\u010A", // LATIN CAPITAL LETTER C WITH DOT ABOVE
  1296.     "\\.{c}"                          : "\u010B", // LATIN SMALL LETTER C WITH DOT ABOVE
  1297.     "\\v{C}"                          : "\u010C", // LATIN CAPITAL LETTER C WITH CARON
  1298.     "\\v{c}"                          : "\u010D", // LATIN SMALL LETTER C WITH CARON
  1299.     "\\v{D}"                          : "\u010E", // LATIN CAPITAL LETTER D WITH CARON
  1300.     "\\v{d}"                          : "\u010F", // LATIN SMALL LETTER D WITH CARON
  1301.     "\\={E}"                          : "\u0112", // LATIN CAPITAL LETTER E WITH MACRON
  1302.     "\\={e}"                          : "\u0113", // LATIN SMALL LETTER E WITH MACRON
  1303.     "\\u{E}"                          : "\u0114", // LATIN CAPITAL LETTER E WITH BREVE
  1304.     "\\u{e}"                          : "\u0115", // LATIN SMALL LETTER E WITH BREVE
  1305.     "\\.{E}"                          : "\u0116", // LATIN CAPITAL LETTER E WITH DOT ABOVE
  1306.     "\\.{e}"                          : "\u0117", // LATIN SMALL LETTER E WITH DOT ABOVE
  1307.     "\\k{E}"                          : "\u0118", // LATIN CAPITAL LETTER E WITH OGONEK
  1308.     "\\k{e}"                          : "\u0119", // LATIN SMALL LETTER E WITH OGONEK
  1309.     "\\v{E}"                          : "\u011A", // LATIN CAPITAL LETTER E WITH CARON
  1310.     "\\v{e}"                          : "\u011B", // LATIN SMALL LETTER E WITH CARON
  1311.     "\\^{G}"                          : "\u011C", // LATIN CAPITAL LETTER G WITH CIRCUMFLEX
  1312.     "\\^{g}"                          : "\u011D", // LATIN SMALL LETTER G WITH CIRCUMFLEX
  1313.     "\\u{G}"                          : "\u011E", // LATIN CAPITAL LETTER G WITH BREVE
  1314.     "\\u{g}"                          : "\u011F", // LATIN SMALL LETTER G WITH BREVE
  1315.     "\\.{G}"                          : "\u0120", // LATIN CAPITAL LETTER G WITH DOT ABOVE
  1316.     "\\.{g}"                          : "\u0121", // LATIN SMALL LETTER G WITH DOT ABOVE
  1317.     "\\c{G}"                          : "\u0122", // LATIN CAPITAL LETTER G WITH CEDILLA
  1318.     "\\c{g}"                          : "\u0123", // LATIN SMALL LETTER G WITH CEDILLA
  1319.     "\\^{H}"                          : "\u0124", // LATIN CAPITAL LETTER H WITH CIRCUMFLEX
  1320.     "\\^{h}"                          : "\u0125", // LATIN SMALL LETTER H WITH CIRCUMFLEX
  1321.     "\\~{I}"                          : "\u0128", // LATIN CAPITAL LETTER I WITH TILDE
  1322.     "\\~{i}"                          : "\u0129", // LATIN SMALL LETTER I WITH TILDE
  1323.     "\\={I}"                          : "\u012A", // LATIN CAPITAL LETTER I WITH MACRON
  1324.     "\\={i}"                          : "\u012B", // LATIN SMALL LETTER I WITH MACRON
  1325.     "\\u{I}"                          : "\u012C", // LATIN CAPITAL LETTER I WITH BREVE
  1326.     "\\u{i}"                          : "\u012D", // LATIN SMALL LETTER I WITH BREVE
  1327.     "\\k{I}"                          : "\u012E", // LATIN CAPITAL LETTER I WITH OGONEK
  1328.     "\\k{i}"                          : "\u012F", // LATIN SMALL LETTER I WITH OGONEK
  1329.     "\\.{I}"                          : "\u0130", // LATIN CAPITAL LETTER I WITH DOT ABOVE
  1330.     "\\^{J}"                          : "\u0134", // LATIN CAPITAL LETTER J WITH CIRCUMFLEX
  1331.     "\\^{j}"                          : "\u0135", // LATIN SMALL LETTER J WITH CIRCUMFLEX
  1332.     "\\c{K}"                          : "\u0136", // LATIN CAPITAL LETTER K WITH CEDILLA
  1333.     "\\c{k}"                          : "\u0137", // LATIN SMALL LETTER K WITH CEDILLA
  1334.     "\\'{L}"                          : "\u0139", // LATIN CAPITAL LETTER L WITH ACUTE
  1335.     "\\'{l}"                          : "\u013A", // LATIN SMALL LETTER L WITH ACUTE
  1336.     "\\c{L}"                          : "\u013B", // LATIN CAPITAL LETTER L WITH CEDILLA
  1337.     "\\c{l}"                          : "\u013C", // LATIN SMALL LETTER L WITH CEDILLA
  1338.     "\\v{L}"                          : "\u013D", // LATIN CAPITAL LETTER L WITH CARON
  1339.     "\\v{l}"                          : "\u013E", // LATIN SMALL LETTER L WITH CARON
  1340.     "\\L{}"                           : "\u0141", //LATIN CAPITAL LETTER L WITH STROKE
  1341.     "\\l{}"                           : "\u0142", //LATIN SMALL LETTER L WITH STROKE
  1342.     "\\'{N}"                          : "\u0143", // LATIN CAPITAL LETTER N WITH ACUTE
  1343.     "\\'{n}"                          : "\u0144", // LATIN SMALL LETTER N WITH ACUTE
  1344.     "\\c{N}"                          : "\u0145", // LATIN CAPITAL LETTER N WITH CEDILLA
  1345.     "\\c{n}"                          : "\u0146", // LATIN SMALL LETTER N WITH CEDILLA
  1346.     "\\v{N}"                          : "\u0147", // LATIN CAPITAL LETTER N WITH CARON
  1347.     "\\v{n}"                          : "\u0148", // LATIN SMALL LETTER N WITH CARON
  1348.     "\\={O}"                          : "\u014C", // LATIN CAPITAL LETTER O WITH MACRON
  1349.     "\\={o}"                          : "\u014D", // LATIN SMALL LETTER O WITH MACRON
  1350.     "\\u{O}"                          : "\u014E", // LATIN CAPITAL LETTER O WITH BREVE
  1351.     "\\u{o}"                          : "\u014F", // LATIN SMALL LETTER O WITH BREVE
  1352.     "\\H{O}"                          : "\u0150", // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
  1353.     "\\H{o}"                          : "\u0151", // LATIN SMALL LETTER O WITH DOUBLE ACUTE
  1354.     "\\'{R}"                          : "\u0154", // LATIN CAPITAL LETTER R WITH ACUTE
  1355.     "\\'{r}"                          : "\u0155", // LATIN SMALL LETTER R WITH ACUTE
  1356.     "\\c{R}"                          : "\u0156", // LATIN CAPITAL LETTER R WITH CEDILLA
  1357.     "\\c{r}"                          : "\u0157", // LATIN SMALL LETTER R WITH CEDILLA
  1358.     "\\v{R}"                          : "\u0158", // LATIN CAPITAL LETTER R WITH CARON
  1359.     "\\v{r}"                          : "\u0159", // LATIN SMALL LETTER R WITH CARON
  1360.     "\\'{S}"                          : "\u015A", // LATIN CAPITAL LETTER S WITH ACUTE
  1361.     "\\'{s}"                          : "\u015B", // LATIN SMALL LETTER S WITH ACUTE
  1362.     "\\^{S}"                          : "\u015C", // LATIN CAPITAL LETTER S WITH CIRCUMFLEX
  1363.     "\\^{s}"                          : "\u015D", // LATIN SMALL LETTER S WITH CIRCUMFLEX
  1364.     "\\c{S}"                          : "\u015E", // LATIN CAPITAL LETTER S WITH CEDILLA
  1365.     "\\c{s}"                          : "\u015F", // LATIN SMALL LETTER S WITH CEDILLA
  1366.     "\\v{S}"                          : "\u0160", // LATIN CAPITAL LETTER S WITH CARON
  1367.     "\\v{s}"                          : "\u0161", // LATIN SMALL LETTER S WITH CARON
  1368.     "\\c{T}"                          : "\u0162", // LATIN CAPITAL LETTER T WITH CEDILLA
  1369.     "\\c{t}"                          : "\u0163", // LATIN SMALL LETTER T WITH CEDILLA
  1370.     "\\v{T}"                          : "\u0164", // LATIN CAPITAL LETTER T WITH CARON
  1371.     "\\v{t}"                          : "\u0165", // LATIN SMALL LETTER T WITH CARON
  1372.     "\\~{U}"                          : "\u0168", // LATIN CAPITAL LETTER U WITH TILDE
  1373.     "\\~{u}"                          : "\u0169", // LATIN SMALL LETTER U WITH TILDE
  1374.     "\\={U}"                          : "\u016A", // LATIN CAPITAL LETTER U WITH MACRON
  1375.     "\\={u}"                          : "\u016B", // LATIN SMALL LETTER U WITH MACRON
  1376.     "\\u{U}"                          : "\u016C", // LATIN CAPITAL LETTER U WITH BREVE
  1377.     "\\u{u}"                          : "\u016D", // LATIN SMALL LETTER U WITH BREVE
  1378.     "\\H{U}"                          : "\u0170", // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
  1379.     "\\H{u}"                          : "\u0171", // LATIN SMALL LETTER U WITH DOUBLE ACUTE
  1380.     "\\k{U}"                          : "\u0172", // LATIN CAPITAL LETTER U WITH OGONEK
  1381.     "\\k{u}"                          : "\u0173", // LATIN SMALL LETTER U WITH OGONEK
  1382.     "\\^{W}"                          : "\u0174", // LATIN CAPITAL LETTER W WITH CIRCUMFLEX
  1383.     "\\^{w}"                          : "\u0175", // LATIN SMALL LETTER W WITH CIRCUMFLEX
  1384.     "\\^{Y}"                          : "\u0176", // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
  1385.     "\\^{y}"                          : "\u0177", // LATIN SMALL LETTER Y WITH CIRCUMFLEX
  1386.     "\\\"{Y}"                         : "\u0178", // LATIN CAPITAL LETTER Y WITH DIAERESIS
  1387.     "\\'{Z}"                          : "\u0179", // LATIN CAPITAL LETTER Z WITH ACUTE
  1388.     "\\'{z}"                          : "\u017A", // LATIN SMALL LETTER Z WITH ACUTE
  1389.     "\\.{Z}"                          : "\u017B", // LATIN CAPITAL LETTER Z WITH DOT ABOVE
  1390.     "\\.{z}"                          : "\u017C", // LATIN SMALL LETTER Z WITH DOT ABOVE
  1391.     "\\v{Z}"                          : "\u017D", // LATIN CAPITAL LETTER Z WITH CARON
  1392.     "\\v{z}"                          : "\u017E", // LATIN SMALL LETTER Z WITH CARON
  1393.     "\\v{A}"                          : "\u01CD", // LATIN CAPITAL LETTER A WITH CARON
  1394.     "\\v{a}"                          : "\u01CE", // LATIN SMALL LETTER A WITH CARON
  1395.     "\\v{I}"                          : "\u01CF", // LATIN CAPITAL LETTER I WITH CARON
  1396.     "\\v{i}"                          : "\u01D0", // LATIN SMALL LETTER I WITH CARON
  1397.     "\\v{O}"                          : "\u01D1", // LATIN CAPITAL LETTER O WITH CARON
  1398.     "\\v{o}"                          : "\u01D2", // LATIN SMALL LETTER O WITH CARON
  1399.     "\\v{U}"                          : "\u01D3", // LATIN CAPITAL LETTER U WITH CARON
  1400.     "\\v{u}"                          : "\u01D4", // LATIN SMALL LETTER U WITH CARON
  1401.     "\\v{G}"                          : "\u01E6", // LATIN CAPITAL LETTER G WITH CARON
  1402.     "\\v{g}"                          : "\u01E7", // LATIN SMALL LETTER G WITH CARON
  1403.     "\\v{K}"                          : "\u01E8", // LATIN CAPITAL LETTER K WITH CARON
  1404.     "\\v{k}"                          : "\u01E9", // LATIN SMALL LETTER K WITH CARON
  1405.     "\\k{O}"                          : "\u01EA", // LATIN CAPITAL LETTER O WITH OGONEK
  1406.     "\\k{o}"                          : "\u01EB", // LATIN SMALL LETTER O WITH OGONEK
  1407.     "\\v{j}"                          : "\u01F0", // LATIN SMALL LETTER J WITH CARON
  1408.     "\\'{G}"                          : "\u01F4", // LATIN CAPITAL LETTER G WITH ACUTE
  1409.     "\\'{g}"                          : "\u01F5", // LATIN SMALL LETTER G WITH ACUTE
  1410.     "\\.{B}"                          : "\u1E02", // LATIN CAPITAL LETTER B WITH DOT ABOVE
  1411.     "\\.{b}"                          : "\u1E03", // LATIN SMALL LETTER B WITH DOT ABOVE
  1412.     "\\d{B}"                          : "\u1E04", // LATIN CAPITAL LETTER B WITH DOT BELOW
  1413.     "\\d{b}"                          : "\u1E05", // LATIN SMALL LETTER B WITH DOT BELOW
  1414.     "\\b{B}"                          : "\u1E06", // LATIN CAPITAL LETTER B WITH LINE BELOW
  1415.     "\\b{b}"                          : "\u1E07", // LATIN SMALL LETTER B WITH LINE BELOW
  1416.     "\\.{D}"                          : "\u1E0A", // LATIN CAPITAL LETTER D WITH DOT ABOVE
  1417.     "\\.{d}"                          : "\u1E0B", // LATIN SMALL LETTER D WITH DOT ABOVE
  1418.     "\\d{D}"                          : "\u1E0C", // LATIN CAPITAL LETTER D WITH DOT BELOW
  1419.     "\\d{d}"                          : "\u1E0D", // LATIN SMALL LETTER D WITH DOT BELOW
  1420.     "\\b{D}"                          : "\u1E0E", // LATIN CAPITAL LETTER D WITH LINE BELOW
  1421.     "\\b{d}"                          : "\u1E0F", // LATIN SMALL LETTER D WITH LINE BELOW
  1422.     "\\c{D}"                          : "\u1E10", // LATIN CAPITAL LETTER D WITH CEDILLA
  1423.     "\\c{d}"                          : "\u1E11", // LATIN SMALL LETTER D WITH CEDILLA
  1424.     "\\.{F}"                          : "\u1E1E", // LATIN CAPITAL LETTER F WITH DOT ABOVE
  1425.     "\\.{f}"                          : "\u1E1F", // LATIN SMALL LETTER F WITH DOT ABOVE
  1426.     "\\={G}"                          : "\u1E20", // LATIN CAPITAL LETTER G WITH MACRON
  1427.     "\\={g}"                          : "\u1E21", // LATIN SMALL LETTER G WITH MACRON
  1428.     "\\.{H}"                          : "\u1E22", // LATIN CAPITAL LETTER H WITH DOT ABOVE
  1429.     "\\.{h}"                          : "\u1E23", // LATIN SMALL LETTER H WITH DOT ABOVE
  1430.     "\\d{H}"                          : "\u1E24", // LATIN CAPITAL LETTER H WITH DOT BELOW
  1431.     "\\d{h}"                          : "\u1E25", // LATIN SMALL LETTER H WITH DOT BELOW
  1432.     "\\\"{H}"                         : "\u1E26", // LATIN CAPITAL LETTER H WITH DIAERESIS
  1433.     "\\\"{h}"                         : "\u1E27", // LATIN SMALL LETTER H WITH DIAERESIS
  1434.     "\\c{H}"                          : "\u1E28", // LATIN CAPITAL LETTER H WITH CEDILLA
  1435.     "\\c{h}"                          : "\u1E29", // LATIN SMALL LETTER H WITH CEDILLA
  1436.     "\\'{K}"                          : "\u1E30", // LATIN CAPITAL LETTER K WITH ACUTE
  1437.     "\\'{k}"                          : "\u1E31", // LATIN SMALL LETTER K WITH ACUTE
  1438.     "\\d{K}"                          : "\u1E32", // LATIN CAPITAL LETTER K WITH DOT BELOW
  1439.     "\\d{k}"                          : "\u1E33", // LATIN SMALL LETTER K WITH DOT BELOW
  1440.     "\\b{K}"                          : "\u1E34", // LATIN CAPITAL LETTER K WITH LINE BELOW
  1441.     "\\b{k}"                          : "\u1E35", // LATIN SMALL LETTER K WITH LINE BELOW
  1442.     "\\d{L}"                          : "\u1E36", // LATIN CAPITAL LETTER L WITH DOT BELOW
  1443.     "\\d{l}"                          : "\u1E37", // LATIN SMALL LETTER L WITH DOT BELOW
  1444.     "\\b{L}"                          : "\u1E3A", // LATIN CAPITAL LETTER L WITH LINE BELOW
  1445.     "\\b{l}"                          : "\u1E3B", // LATIN SMALL LETTER L WITH LINE BELOW
  1446.     "\\'{M}"                          : "\u1E3E", // LATIN CAPITAL LETTER M WITH ACUTE
  1447.     "\\'{m}"                          : "\u1E3F", // LATIN SMALL LETTER M WITH ACUTE
  1448.     "\\.{M}"                          : "\u1E40", // LATIN CAPITAL LETTER M WITH DOT ABOVE
  1449.     "\\.{m}"                          : "\u1E41", // LATIN SMALL LETTER M WITH DOT ABOVE
  1450.     "\\d{M}"                          : "\u1E42", // LATIN CAPITAL LETTER M WITH DOT BELOW
  1451.     "\\d{m}"                          : "\u1E43", // LATIN SMALL LETTER M WITH DOT BELOW
  1452.     "\\.{N}"                          : "\u1E44", // LATIN CAPITAL LETTER N WITH DOT ABOVE
  1453.     "\\.{n}"                          : "\u1E45", // LATIN SMALL LETTER N WITH DOT ABOVE
  1454.     "\\d{N}"                          : "\u1E46", // LATIN CAPITAL LETTER N WITH DOT BELOW
  1455.     "\\d{n}"                          : "\u1E47", // LATIN SMALL LETTER N WITH DOT BELOW
  1456.     "\\b{N}"                          : "\u1E48", // LATIN CAPITAL LETTER N WITH LINE BELOW
  1457.     "\\b{n}"                          : "\u1E49", // LATIN SMALL LETTER N WITH LINE BELOW
  1458.     "\\'{P}"                          : "\u1E54", // LATIN CAPITAL LETTER P WITH ACUTE
  1459.     "\\'{p}"                          : "\u1E55", // LATIN SMALL LETTER P WITH ACUTE
  1460.     "\\.{P}"                          : "\u1E56", // LATIN CAPITAL LETTER P WITH DOT ABOVE
  1461.     "\\.{p}"                          : "\u1E57", // LATIN SMALL LETTER P WITH DOT ABOVE
  1462.     "\\.{R}"                          : "\u1E58", // LATIN CAPITAL LETTER R WITH DOT ABOVE
  1463.     "\\.{r}"                          : "\u1E59", // LATIN SMALL LETTER R WITH DOT ABOVE
  1464.     "\\d{R}"                          : "\u1E5A", // LATIN CAPITAL LETTER R WITH DOT BELOW
  1465.     "\\d{r}"                          : "\u1E5B", // LATIN SMALL LETTER R WITH DOT BELOW
  1466.     "\\b{R}"                          : "\u1E5E", // LATIN CAPITAL LETTER R WITH LINE BELOW
  1467.     "\\b{r}"                          : "\u1E5F", // LATIN SMALL LETTER R WITH LINE BELOW
  1468.     "\\.{S}"                          : "\u1E60", // LATIN CAPITAL LETTER S WITH DOT ABOVE
  1469.     "\\.{s}"                          : "\u1E61", // LATIN SMALL LETTER S WITH DOT ABOVE
  1470.     "\\d{S}"                          : "\u1E62", // LATIN CAPITAL LETTER S WITH DOT BELOW
  1471.     "\\d{s}"                          : "\u1E63", // LATIN SMALL LETTER S WITH DOT BELOW
  1472.     "\\.{T}"                          : "\u1E6A", // LATIN CAPITAL LETTER T WITH DOT ABOVE
  1473.     "\\.{t}"                          : "\u1E6B", // LATIN SMALL LETTER T WITH DOT ABOVE
  1474.     "\\d{T}"                          : "\u1E6C", // LATIN CAPITAL LETTER T WITH DOT BELOW
  1475.     "\\d{t}"                          : "\u1E6D", // LATIN SMALL LETTER T WITH DOT BELOW
  1476.     "\\b{T}"                          : "\u1E6E", // LATIN CAPITAL LETTER T WITH LINE BELOW
  1477.     "\\b{t}"                          : "\u1E6F", // LATIN SMALL LETTER T WITH LINE BELOW
  1478.     "\\~{V}"                          : "\u1E7C", // LATIN CAPITAL LETTER V WITH TILDE
  1479.     "\\~{v}"                          : "\u1E7D", // LATIN SMALL LETTER V WITH TILDE
  1480.     "\\d{V}"                          : "\u1E7E", // LATIN CAPITAL LETTER V WITH DOT BELOW
  1481.     "\\d{v}"                          : "\u1E7F", // LATIN SMALL LETTER V WITH DOT BELOW
  1482.     "\\`{W}"                          : "\u1E80", // LATIN CAPITAL LETTER W WITH GRAVE
  1483.     "\\`{w}"                          : "\u1E81", // LATIN SMALL LETTER W WITH GRAVE
  1484.     "\\'{W}"                          : "\u1E82", // LATIN CAPITAL LETTER W WITH ACUTE
  1485.     "\\'{w}"                          : "\u1E83", // LATIN SMALL LETTER W WITH ACUTE
  1486.     "\\\"{W}"                         : "\u1E84", // LATIN CAPITAL LETTER W WITH DIAERESIS
  1487.     "\\\"{w}"                         : "\u1E85", // LATIN SMALL LETTER W WITH DIAERESIS
  1488.     "\\.{W}"                          : "\u1E86", // LATIN CAPITAL LETTER W WITH DOT ABOVE
  1489.     "\\.{w}"                          : "\u1E87", // LATIN SMALL LETTER W WITH DOT ABOVE
  1490.     "\\d{W}"                          : "\u1E88", // LATIN CAPITAL LETTER W WITH DOT BELOW
  1491.     "\\d{w}"                          : "\u1E89", // LATIN SMALL LETTER W WITH DOT BELOW
  1492.     "\\.{X}"                          : "\u1E8A", // LATIN CAPITAL LETTER X WITH DOT ABOVE
  1493.     "\\.{x}"                          : "\u1E8B", // LATIN SMALL LETTER X WITH DOT ABOVE
  1494.     "\\\"{X}"                         : "\u1E8C", // LATIN CAPITAL LETTER X WITH DIAERESIS
  1495.     "\\\"{x}"                         : "\u1E8D", // LATIN SMALL LETTER X WITH DIAERESIS
  1496.     "\\.{Y}"                          : "\u1E8E", // LATIN CAPITAL LETTER Y WITH DOT ABOVE
  1497.     "\\.{y}"                          : "\u1E8F", // LATIN SMALL LETTER Y WITH DOT ABOVE
  1498.     "\\^{Z}"                          : "\u1E90", // LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
  1499.     "\\^{z}"                          : "\u1E91", // LATIN SMALL LETTER Z WITH CIRCUMFLEX
  1500.     "\\d{Z}"                          : "\u1E92", // LATIN CAPITAL LETTER Z WITH DOT BELOW
  1501.     "\\d{z}"                          : "\u1E93", // LATIN SMALL LETTER Z WITH DOT BELOW
  1502.     "\\b{Z}"                          : "\u1E94", // LATIN CAPITAL LETTER Z WITH LINE BELOW
  1503.     "\\b{z}"                          : "\u1E95", // LATIN SMALL LETTER Z WITH LINE BELOW
  1504.     "\\b{h}"                          : "\u1E96", // LATIN SMALL LETTER H WITH LINE BELOW
  1505.     "\\\"{t}"                         : "\u1E97", // LATIN SMALL LETTER T WITH DIAERESIS
  1506.     "\\d{A}"                          : "\u1EA0", // LATIN CAPITAL LETTER A WITH DOT BELOW
  1507.     "\\d{a}"                          : "\u1EA1", // LATIN SMALL LETTER A WITH DOT BELOW
  1508.     "\\d{E}"                          : "\u1EB8", // LATIN CAPITAL LETTER E WITH DOT BELOW
  1509.     "\\d{e}"                          : "\u1EB9", // LATIN SMALL LETTER E WITH DOT BELOW
  1510.     "\\~{E}"                          : "\u1EBC", // LATIN CAPITAL LETTER E WITH TILDE
  1511.     "\\~{e}"                          : "\u1EBD", // LATIN SMALL LETTER E WITH TILDE
  1512.     "\\d{I}"                          : "\u1ECA", // LATIN CAPITAL LETTER I WITH DOT BELOW
  1513.     "\\d{i}"                          : "\u1ECB", // LATIN SMALL LETTER I WITH DOT BELOW
  1514.     "\\d{O}"                          : "\u1ECC", // LATIN CAPITAL LETTER O WITH DOT BELOW
  1515.     "\\d{o}"                          : "\u1ECD", // LATIN SMALL LETTER O WITH DOT BELOW
  1516.     "\\d{U}"                          : "\u1EE4", // LATIN CAPITAL LETTER U WITH DOT BELOW
  1517.     "\\d{u}"                          : "\u1EE5", // LATIN SMALL LETTER U WITH DOT BELOW
  1518.     "\\`{Y}"                          : "\u1EF2", // LATIN CAPITAL LETTER Y WITH GRAVE
  1519.     "\\`{y}"                          : "\u1EF3", // LATIN SMALL LETTER Y WITH GRAVE
  1520.     "\\d{Y}"                          : "\u1EF4", // LATIN CAPITAL LETTER Y WITH DOT BELOW
  1521.     "\\d{y}"                          : "\u1EF5", // LATIN SMALL LETTER Y WITH DOT BELOW
  1522.     "\\~{Y}"                          : "\u1EF8", // LATIN CAPITAL LETTER Y WITH TILDE
  1523.     "\\~{y}"                          : "\u1EF9" // LATIN SMALL LETTER Y WITH TILDE
  1524. };
  1525.  
  1526. var alwaysMap = {
  1527.     "|":"{\\textbar}",
  1528.     "<":"{\\textless}",
  1529.     ">":"{\\textgreater}",
  1530.     "~":"{\\textasciitilde}",
  1531.     "^":"{\\textasciicircum}",
  1532.     "\\":"{\\textbackslash}"
  1533. };
  1534.  
  1535. var strings = {};
  1536. var keyRe = /[a-zA-Z0-9\-]/;
  1537.  
  1538. function processField(item, field, value) {
  1539.     if(Zotero.Utilities.trim(value) == '') return null;
  1540.     if(fieldMap[field]) {
  1541.         item[fieldMap[field]] = value;
  1542.     } else if(inputFieldMap[field]) {
  1543.         item[inputFieldMap[field]] = value;
  1544.     } else if(field == "journal") {
  1545.         if(item.publicationTitle) {
  1546.             item.journalAbbreviation = value;
  1547.         } else {
  1548.             item.publicationTitle = value;
  1549.         }
  1550.     } else if(field == "fjournal") {
  1551.         if(item.publicationTitle) {
  1552.             // move publicationTitle to abbreviation
  1553.             item.journalAbbreviation = value;
  1554.         }
  1555.         item.publicationTitle = value;
  1556.     } else if(field == "author" || field == "editor" || field == "translator") {
  1557.         // parse authors/editors/translators
  1558.         var names = value.split(/ and /i); // now case insensitive
  1559.         for each(var name in names) {
  1560.             // skip empty names
  1561.             if (Zotero.Utilities.trim(name) == '') {
  1562.                 continue;
  1563.             }
  1564.             item.creators.push(Zotero.Utilities.cleanAuthor(name, field,
  1565.                                               (name.indexOf(",") != -1)));
  1566.         }
  1567.     } else if(field == "institution" || field == "organization") {
  1568.         item.backupPublisher = value;
  1569.     } else if(field == "number"){ // fix for techreport
  1570.         if (item.itemType == "report") {
  1571.             item.reportNumber = value;
  1572.         } else if (item.itemType == "book" || item.itemType == "bookSection") {
  1573.             item.seriesNumber = value;
  1574.         } else {
  1575.             item.issue = value;
  1576.         }
  1577.     } else if(field == "month") {
  1578.         var monthIndex = months.indexOf(value.toLowerCase());
  1579.         if(monthIndex != -1) {
  1580.             value = Zotero.Utilities.formatDate({month:monthIndex});
  1581.         } else {
  1582.             value += " ";
  1583.         }
  1584.        
  1585.         if(item.date) {
  1586.             if(value.indexOf(item.date) != -1) {
  1587.                 // value contains year and more
  1588.                 item.date = value;
  1589.             } else {
  1590.                 item.date = value+item.date;
  1591.             }
  1592.         } else {
  1593.             item.date = value;
  1594.         }
  1595.     } else if(field == "year") {
  1596.         if(item.date) {
  1597.             if(item.date.indexOf(value) == -1) {
  1598.                 // date does not already contain year
  1599.                 item.date += value;
  1600.             }
  1601.         } else {
  1602.             item.date = value;
  1603.         }
  1604.     } else if(field == "pages") {
  1605.         if (item.itemType == "book" || item.itemType == "thesis" || item.itemType == "manuscript") {
  1606.             item.numPages = value;
  1607.         }
  1608.         else {
  1609.             item.pages = value.replace(/--/g, "-");
  1610.         }
  1611.     } else if(field == "note") {
  1612.         item.extra += "\n"+value;
  1613.     } else if(field == "howpublished") {
  1614.         if(value.length >= 7) {
  1615.             var str = value.substr(0, 7);
  1616.             if(str == "http://" || str == "https:/" || str == "mailto:") {
  1617.                 item.url = value;
  1618.             } else {
  1619.                 item.extra += "\nPublished: "+value;
  1620.             }
  1621.         }
  1622.     } else if(field == "keywords") {
  1623.         if(value.indexOf(",") == -1) {
  1624.             // keywords/tags
  1625.             item.tags = value.split(" ");
  1626.         } else {
  1627.             item.tags = value.split(/, ?/g);
  1628.         }
  1629.     } else if (field == "comment" || field == "annote" || field == "review") {
  1630.         item.notes.push({note:value});
  1631.     } else if (field == "pdf") {
  1632.         if (/:\/\//.test(value)) { // a full uri is given
  1633.             item.attachments = [{url:value, mimeType:"application/pdf", downloadable:true}];
  1634.         } else { // if no uri is given, assume that it is an absolute path to the PDF
  1635.             item.attachments = [{url:"file://"+value, mimeType:"application/pdf"}];
  1636.         }
  1637.     } else if (field == "sentelink") { // the reference manager 'Sente' has a unique file scheme in exported BibTeX
  1638.             item.attachments = [{url:value.split(",")[0], mimeType:"application/pdf", downloadable:true}];
  1639.     } else if (field == "file") {
  1640.         for each(var attachment in value.split(";")){
  1641.             var [filetitle, filepath, filetype] = attachment.split(":");
  1642.             if (filetitle.length == 0) {
  1643.                 filetitle = "Attachment";
  1644.             }
  1645.             if (filetype.match(/pdf/i)) {
  1646.                 item.attachments.push({url:"file://"+filepath, mimeType:"application/pdf", title:filetitle, downloadable:true});
  1647.             } else {
  1648.                 item.attachments.push({url:"file://"+filepath, title:filetitle, downloadable:true});
  1649.             }
  1650.         }
  1651.     }
  1652. }
  1653.  
  1654. function getFieldValue(read) {
  1655.     var value = "";
  1656.     // now, we have the first character of the field
  1657.     if(read == "{") {
  1658.         // character is a brace
  1659.         var openBraces = 1;
  1660.         while(read = Zotero.read(1)) {
  1661.             if(read == "{" && value[value.length-1] != "\\") {
  1662.                 openBraces++;
  1663.                 value += "{";
  1664.             } else if(read == "}" && value[value.length-1] != "\\") {
  1665.                 openBraces--;
  1666.                 if(openBraces == 0) {
  1667.                     break;
  1668.                 } else {
  1669.                     value += "}";
  1670.                 }
  1671.             } else {
  1672.                 value += read;
  1673.             }
  1674.         }
  1675.     } else if(read == '"') {
  1676.         var openBraces = 0;
  1677.         while(read = Zotero.read(1)) {
  1678.             if(read == "{" && value[value.length-1] != "\\") {
  1679.                 openBraces++;
  1680.                 value += "{";
  1681.             } else if(read == "}" && value[value.length-1] != "\\") {
  1682.                 openBraces--;
  1683.                 value += "}";
  1684.             } else if(read == '"' && openBraces == 0) {
  1685.                 break;
  1686.             } else {
  1687.                 value += read;
  1688.             }
  1689.         }
  1690.     }
  1691.    
  1692.     if(value.length > 1) {
  1693.         // replace accented characters (yucky slow)
  1694.         value = value.replace(/{?(\\[`"'^~=a-z]){?\\?([A-Za-z])}/g, "$1{$2}");
  1695.         for (var mapped in reversemappingTable) { // really really slow!
  1696.             var unicode = reversemappingTable[mapped];
  1697.             if (value.indexOf(mapped) != -1) {
  1698.                 Zotero.debug("Replace " + mapped + " in " + value + " with " + unicode);
  1699.                 value = value.replace(mapped, unicode, "g");
  1700.             }
  1701.             mapped = mapped.replace(/[{}]/g, "");
  1702.             if (value.indexOf(mapped) != -1) {
  1703.                 Zotero.debug("Replace(2) " + mapped + " in " + value + " with " + unicode);
  1704.                 value = value.replace(mapped, unicode, "g");
  1705.             }
  1706.         }
  1707.        
  1708.         // kill braces
  1709.         value = value.replace(/([^\\])[{}]+/g, "$1");
  1710.         if(value[0] == "{") {
  1711.             value = value.substr(1);
  1712.         }
  1713.        
  1714.         // chop off backslashes
  1715.         value = value.replace(/([^\\])\\([#$%&~_^\\{}])/g, "$1$2");
  1716.         value = value.replace(/([^\\])\\([#$%&~_^\\{}])/g, "$1$2");
  1717.         if(value[0] == "\\" && "#$%&~_^\\{}".indexOf(value[1]) != -1) {
  1718.             value = value.substr(1);
  1719.         }
  1720.         if(value[value.length-1] == "\\" && "#$%&~_^\\{}".indexOf(value[value.length-2]) != -1) {
  1721.             value = value.substr(0, value.length-1);
  1722.         }
  1723.         value = value.replace(/\\\\/g, "\\");
  1724.         value = value.replace(/\s+/g, " ");
  1725.     }
  1726.    
  1727.     return value;
  1728. }
  1729.  
  1730. function beginRecord(type, closeChar) {
  1731.     type = Zotero.Utilities.trimInternal(type.toLowerCase());
  1732.     if(type != "string") {
  1733.         var zoteroType = bibtex2zoteroTypeMap[type];
  1734.         if (!zoteroType) {
  1735.             Zotero.debug("discarded item from BibTeX; type was "+type);
  1736.         }
  1737.         var item = new Zotero.Item(zoteroType);
  1738.        
  1739.         item.extra = "";
  1740.     }
  1741.    
  1742.     var field = "";
  1743.    
  1744.     // by setting dontRead to true, we can skip a read on the next iteration
  1745.     // of this loop. this is useful after we read past the end of a string.
  1746.     var dontRead = false;
  1747.    
  1748.     while(dontRead || (read = Zotero.read(1))) {
  1749.         dontRead = false;
  1750.        
  1751.         if(read == "=") {                               // equals begin a field
  1752.         // read whitespace
  1753.             var read = Zotero.read(1);
  1754.             while(" \n\r\t".indexOf(read) != -1) {
  1755.                 read = Zotero.read(1);
  1756.             }
  1757.            
  1758.             if(keyRe.test(read)) {
  1759.                 // read numeric data here, since we might get an end bracket
  1760.                 // that we should care about
  1761.                 value = "";
  1762.                 value += read;
  1763.                
  1764.                 // character is a number
  1765.                 while((read = Zotero.read(1)) && keyRe.test(read)) {
  1766.                     value += read;
  1767.                 }
  1768.                
  1769.                 // don't read the next char; instead, process the character
  1770.                 // we already read past the end of the string
  1771.                 dontRead = true;
  1772.                
  1773.                 // see if there's a defined string
  1774.                 if(strings[value]) value = strings[value];
  1775.             } else {
  1776.                 var value = getFieldValue(read);
  1777.             }
  1778.            
  1779.             if(item) {
  1780.                 processField(item, field.toLowerCase(), value);
  1781.             } else if(type == "string") {
  1782.                 strings[field] = value;
  1783.             }
  1784.             field = "";
  1785.         } else if(read == ",") {                        // commas reset
  1786.             field = "";
  1787.         } else if(read == closeChar) {
  1788.             if(item) {
  1789.                 if(item.extra) item.extra = item.extra.substr(1); // chop \n
  1790.                 item.complete();
  1791.             }
  1792.             return;
  1793.         } else if(" \n\r\t".indexOf(read) == -1) {      // skip whitespace
  1794.             field += read;
  1795.         }
  1796.     }
  1797. }
  1798.  
  1799. function doImport() {
  1800.     var read = "", text = "", recordCloseElement = false;
  1801.     var type = false;
  1802.    
  1803.     while(read = Zotero.read(1)) {
  1804.         if(read == "@") {
  1805.             type = "";
  1806.         } else if(type !== false) {
  1807.             if(type == "comment") {
  1808.                 type = false;
  1809.             } else if(read == "{") {        // possible open character
  1810.                 beginRecord(type, "}");
  1811.                 type = false;
  1812.             } else if(read == "(") {        // possible open character
  1813.                 beginRecord(type, ")");
  1814.                 type = false;
  1815.             } else {
  1816.                 type += read;
  1817.             }
  1818.         }
  1819.     }
  1820. }
  1821.  
  1822. // some fields are, in fact, macros.  If that is the case then we should not put the
  1823. // data in the braces as it will cause the macros to not expand properly
  1824. function writeField(field, value, isMacro) {
  1825.     if(!value && typeof value != "number") return;
  1826.     value = value + ""; // convert integers to strings
  1827.     Zotero.write(",\n\t"+field+" = ");
  1828.     if(!isMacro) Zotero.write("{");
  1829.     // url field is preserved, for use with \href and \url
  1830.     // Other fields (DOI?) may need similar treatment
  1831.     if(!((field == "url") || (field == "doi") | (field == "file"))) {
  1832.         // I hope these are all the escape characters!
  1833.         value = value.replace(/[|\<\>\~\^\\]/g, mapEscape).replace(/([\#\$\%\&\_])/g, "\\$1");
  1834.         // Case of words with uppercase characters in non-initial positions is preserved with braces.
  1835.         if(!isMacro&&field != "pages") value = value.replace(/([^\s]+[A-Z][^\s]*)/g, "{$1}");
  1836.     }
  1837.     if (Zotero.getOption("exportCharset") != "UTF-8") {
  1838.         value = value.replace(/[\u0080-\uFFFF]/g, mapAccent);
  1839.     }
  1840.     Zotero.write(value);
  1841.     if(!isMacro) Zotero.write("}");
  1842. }
  1843.  
  1844. function mapEscape(character) {
  1845.     return alwaysMap[character];
  1846. }
  1847.  
  1848. function mapAccent(character) {
  1849.     return (mappingTable[character] ? mappingTable[character] : "?");
  1850. }
  1851.  
  1852. // a little substitution function for BibTeX keys, where we don't want LaTeX
  1853. // escaping, but we do want to preserve the base characters
  1854.  
  1855. function tidyAccents(s) {
  1856.                         var r=s.toLowerCase();
  1857.                         r = r.replace(new RegExp("[ä]", 'g'),"ae");
  1858.                         r = r.replace(new RegExp("[ö]", 'g'),"oe");
  1859.                         r = r.replace(new RegExp("[ü]", 'g'),"ue");
  1860.                         r = r.replace(new RegExp("[àáâãå]", 'g'),"a");
  1861.                         r = r.replace(new RegExp("æ", 'g'),"ae");
  1862.                         r = r.replace(new RegExp("ç", 'g'),"c");
  1863.                         r = r.replace(new RegExp("[èéêë]", 'g'),"e");
  1864.                         r = r.replace(new RegExp("[ìíîï]", 'g'),"i");
  1865.                         r = r.replace(new RegExp("ñ", 'g'),"n");                            
  1866.                         r = r.replace(new RegExp("[òóôõ]", 'g'),"o");
  1867.                         r = r.replace(new RegExp("œ", 'g'),"oe");
  1868.                         r = r.replace(new RegExp("[ùúû]", 'g'),"u");
  1869.                         r = r.replace(new RegExp("[ýÿ]", 'g'),"y");
  1870.                         return r;
  1871.                 };
  1872.  
  1873. var numberRe = /^[0-9]+/;
  1874. // Below is a list of words that should not appear as part of the citation key
  1875. // in includes the indefinite articles of English, German, French and Spanish, as well as a small set of English prepositions whose
  1876. // force is more grammatical than lexical, i.e. which are likely to strike many as 'insignificant'.
  1877. // The assumption is that most who want a title word in their key would prefer the first word of significance.
  1878. var citeKeyTitleBannedRe = /\b(a|an|the|some|from|on|in|to|of|do|with|der|die|das|ein|eine|einer|eines|einem|einen|un|une|la|le|l\'|el|las|los|al|uno|una|unos|unas|de|des|del|d\')(\s+|\b)/g;
  1879. var citeKeyConversionsRe = /%([a-zA-Z])/;
  1880. var citeKeyCleanRe = /[^a-z0-9\!\$\&\*\+\-\.\/\:\;\<\>\?\[\]\^\_\`\|]+/g;
  1881.  
  1882. var citeKeyConversions = {
  1883.     "a":function (flags, item) {
  1884.         if(item.creators && item.creators[0] && item.creators[0].lastName) {
  1885.             return item.creators[0].lastName.toLowerCase().replace(/ /g,"_").replace(/,/g,"");
  1886.         }
  1887.         return "";
  1888.     },
  1889.     "t":function (flags, item) {
  1890.         if (item["title"]) {
  1891.             return item["title"].toLowerCase().replace(citeKeyTitleBannedRe, "").split(/\s+/g)[0];
  1892.         }
  1893.         return "";
  1894.     },
  1895.     "y":function (flags, item) {
  1896.         if(item.date) {
  1897.             var date = Zotero.Utilities.strToDate(item.date);
  1898.             if(date.year && numberRe.test(date.year)) {
  1899.                 return date.year;
  1900.             }
  1901.         }
  1902.         return "????";
  1903.     }
  1904. }
  1905.  
  1906.  
  1907. function buildCiteKey (item,citekeys) {
  1908.     var basekey = "";
  1909.     var counter = 0;
  1910.     citeKeyFormatRemaining = citeKeyFormat;
  1911.     while (citeKeyConversionsRe.test(citeKeyFormatRemaining)) {
  1912.         if (counter > 100) {
  1913.             Zotero.debug("Pathological BibTeX format: " + citeKeyFormat);
  1914.             break;
  1915.         }
  1916.         var m = citeKeyFormatRemaining.match(citeKeyConversionsRe);
  1917.         if (m.index > 0) {
  1918.             //add data before the conversion match to basekey
  1919.             basekey = basekey + citeKeyFormatRemaining.substr(0, m.index);
  1920.         }
  1921.         var flags = ""; // for now
  1922.         var f = citeKeyConversions[m[1]];
  1923.         if (typeof(f) == "function") {
  1924.             var value = f(flags, item);
  1925.             Zotero.debug("Got value " + value + " for %" + m[1]);
  1926.             //add conversion to basekey
  1927.             basekey = basekey + value;
  1928.         }
  1929.         citeKeyFormatRemaining = citeKeyFormatRemaining.substr(m.index + m.length);
  1930.         counter++;
  1931.     }
  1932.     if (citeKeyFormatRemaining.length > 0) {
  1933.         basekey = basekey + citeKeyFormatRemaining;
  1934.     }
  1935.  
  1936.     // for now, remove any characters not explicitly known to be allowed;
  1937.     // we might want to allow UTF-8 citation keys in the future, depending
  1938.     // on implementation support.
  1939.     //
  1940.     // no matter what, we want to make sure we exclude
  1941.     // " # % ' ( ) , = { } ~ and backslash
  1942.     // however, we want to keep the base characters
  1943.  
  1944.     basekey = tidyAccents(basekey);
  1945.     basekey = basekey.replace(citeKeyCleanRe, "");
  1946.     var citekey = basekey;
  1947.     var i = 0;
  1948.     while(citekeys[citekey]) {
  1949.         i++;
  1950.         citekey = basekey + "-" + i;
  1951.     }
  1952.     citekeys[citekey] = true;
  1953.     return citekey;
  1954. }
  1955.  
  1956. function doExport() {
  1957.     //Zotero.write("% BibTeX export generated by Zotero "+Zotero.Utilities.getVersion());
  1958.     // to make sure the BOM gets ignored
  1959.     Zotero.write("\\citep{");
  1960.    
  1961.     var first = true;
  1962.     var citekeys = new Object();
  1963.     var item;
  1964.     while(item = Zotero.nextItem()) {
  1965.         // determine type
  1966.         var type = zotero2bibtexTypeMap[item.itemType];
  1967.         if (typeof(type) == "function") { type = type(item); }
  1968.         if(!type) type = "misc";
  1969.        
  1970.         // create a unique citation key
  1971.         var citekey = buildCiteKey(item, citekeys);
  1972.        
  1973.         // write citation key
  1974.         Zotero.write((first ? "" : ",") + citekey);
  1975.         first = false;     
  1976.     }
  1977.     Zotero.write("}");
  1978. }