From bfa0ac00448d7099a5ac87e230e1b0456280c8dc Mon Sep 17 00:00:00 2001 From: Loren Segal Date: Mon, 4 May 2026 16:21:44 -0700 Subject: [PATCH] Support all valid HTML entities in HybridMarkdown Fixes #1680 --- lib/yard/autoload.rb | 1 + .../templates/helpers/markup/html_entities.rb | 2140 +++++++++++++++++ .../helpers/markup/hybrid_markdown.rb | 20 +- .../helpers/markup/hybrid_markdown_spec.rb | 24 + 4 files changed, 2167 insertions(+), 18 deletions(-) create mode 100644 lib/yard/templates/helpers/markup/html_entities.rb diff --git a/lib/yard/autoload.rb b/lib/yard/autoload.rb index 7294e6efd..ebe8eea0e 100644 --- a/lib/yard/autoload.rb +++ b/lib/yard/autoload.rb @@ -287,6 +287,7 @@ module Tags # Namespace for Tag components module Templates module Helpers # Namespace for template helpers module Markup # Namespace for markup providers + autoload :HtmlEntities, __p('templates/helpers/markup/html_entities') autoload :HybridMarkdown, __p('templates/helpers/markup/hybrid_markdown') autoload :RDocMarkup, __p('templates/helpers/markup/rdoc_markup') autoload :RDocMarkdown, __p('templates/helpers/markup/rdoc_markdown') diff --git a/lib/yard/templates/helpers/markup/html_entities.rb b/lib/yard/templates/helpers/markup/html_entities.rb new file mode 100644 index 000000000..f9b150521 --- /dev/null +++ b/lib/yard/templates/helpers/markup/html_entities.rb @@ -0,0 +1,2140 @@ +# frozen_string_literal: true + +module YARD + module Templates + module Helpers + module Markup + module HtmlEntities + # HTML named character references from WHATWG entities.json. + ENTITIES = { + 'aacute' => [0xE1].pack('U'), + 'Aacute' => [0xC1].pack('U'), + 'Abreve' => [0x102].pack('U'), + 'abreve' => [0x103].pack('U'), + 'ac' => [0x223E].pack('U'), + 'acd' => [0x223F].pack('U'), + 'acE' => [0x223E, 0x333].pack('U*'), + 'Acirc' => [0xC2].pack('U'), + 'acirc' => [0xE2].pack('U'), + 'acute' => [0xB4].pack('U'), + 'acy' => [0x430].pack('U'), + 'Acy' => [0x410].pack('U'), + 'aelig' => [0xE6].pack('U'), + 'AElig' => [0xC6].pack('U'), + 'af' => [0x2061].pack('U'), + 'Afr' => [0x1D504].pack('U'), + 'afr' => [0x1D51E].pack('U'), + 'agrave' => [0xE0].pack('U'), + 'Agrave' => [0xC0].pack('U'), + 'alefsym' => [0x2135].pack('U'), + 'aleph' => [0x2135].pack('U'), + 'alpha' => [0x3B1].pack('U'), + 'Alpha' => [0x391].pack('U'), + 'Amacr' => [0x100].pack('U'), + 'amacr' => [0x101].pack('U'), + 'amalg' => [0x2A3F].pack('U'), + 'amp' => [0x26].pack('U'), + 'AMP' => [0x26].pack('U'), + 'And' => [0x2A53].pack('U'), + 'and' => [0x2227].pack('U'), + 'andand' => [0x2A55].pack('U'), + 'andd' => [0x2A5C].pack('U'), + 'andslope' => [0x2A58].pack('U'), + 'andv' => [0x2A5A].pack('U'), + 'ang' => [0x2220].pack('U'), + 'ange' => [0x29A4].pack('U'), + 'angle' => [0x2220].pack('U'), + 'angmsd' => [0x2221].pack('U'), + 'angmsdaa' => [0x29A8].pack('U'), + 'angmsdab' => [0x29A9].pack('U'), + 'angmsdac' => [0x29AA].pack('U'), + 'angmsdad' => [0x29AB].pack('U'), + 'angmsdae' => [0x29AC].pack('U'), + 'angmsdaf' => [0x29AD].pack('U'), + 'angmsdag' => [0x29AE].pack('U'), + 'angmsdah' => [0x29AF].pack('U'), + 'angrt' => [0x221F].pack('U'), + 'angrtvb' => [0x22BE].pack('U'), + 'angrtvbd' => [0x299D].pack('U'), + 'angsph' => [0x2222].pack('U'), + 'angst' => [0xC5].pack('U'), + 'angzarr' => [0x237C].pack('U'), + 'Aogon' => [0x104].pack('U'), + 'aogon' => [0x105].pack('U'), + 'aopf' => [0x1D552].pack('U'), + 'Aopf' => [0x1D538].pack('U'), + 'ap' => [0x2248].pack('U'), + 'apacir' => [0x2A6F].pack('U'), + 'ape' => [0x224A].pack('U'), + 'apE' => [0x2A70].pack('U'), + 'apid' => [0x224B].pack('U'), + 'apos' => [0x27].pack('U'), + 'ApplyFunction' => [0x2061].pack('U'), + 'approx' => [0x2248].pack('U'), + 'approxeq' => [0x224A].pack('U'), + 'aring' => [0xE5].pack('U'), + 'Aring' => [0xC5].pack('U'), + 'ascr' => [0x1D4B6].pack('U'), + 'Ascr' => [0x1D49C].pack('U'), + 'Assign' => [0x2254].pack('U'), + 'ast' => [0x2A].pack('U'), + 'asymp' => [0x2248].pack('U'), + 'asympeq' => [0x224D].pack('U'), + 'Atilde' => [0xC3].pack('U'), + 'atilde' => [0xE3].pack('U'), + 'Auml' => [0xC4].pack('U'), + 'auml' => [0xE4].pack('U'), + 'awconint' => [0x2233].pack('U'), + 'awint' => [0x2A11].pack('U'), + 'backcong' => [0x224C].pack('U'), + 'backepsilon' => [0x3F6].pack('U'), + 'backprime' => [0x2035].pack('U'), + 'backsim' => [0x223D].pack('U'), + 'backsimeq' => [0x22CD].pack('U'), + 'Backslash' => [0x2216].pack('U'), + 'Barv' => [0x2AE7].pack('U'), + 'barvee' => [0x22BD].pack('U'), + 'barwed' => [0x2305].pack('U'), + 'Barwed' => [0x2306].pack('U'), + 'barwedge' => [0x2305].pack('U'), + 'bbrk' => [0x23B5].pack('U'), + 'bbrktbrk' => [0x23B6].pack('U'), + 'bcong' => [0x224C].pack('U'), + 'bcy' => [0x431].pack('U'), + 'Bcy' => [0x411].pack('U'), + 'bdquo' => [0x201E].pack('U'), + 'becaus' => [0x2235].pack('U'), + 'because' => [0x2235].pack('U'), + 'Because' => [0x2235].pack('U'), + 'bemptyv' => [0x29B0].pack('U'), + 'bepsi' => [0x3F6].pack('U'), + 'bernou' => [0x212C].pack('U'), + 'Bernoullis' => [0x212C].pack('U'), + 'Beta' => [0x392].pack('U'), + 'beta' => [0x3B2].pack('U'), + 'beth' => [0x2136].pack('U'), + 'between' => [0x226C].pack('U'), + 'bfr' => [0x1D51F].pack('U'), + 'Bfr' => [0x1D505].pack('U'), + 'bigcap' => [0x22C2].pack('U'), + 'bigcirc' => [0x25EF].pack('U'), + 'bigcup' => [0x22C3].pack('U'), + 'bigodot' => [0x2A00].pack('U'), + 'bigoplus' => [0x2A01].pack('U'), + 'bigotimes' => [0x2A02].pack('U'), + 'bigsqcup' => [0x2A06].pack('U'), + 'bigstar' => [0x2605].pack('U'), + 'bigtriangledown' => [0x25BD].pack('U'), + 'bigtriangleup' => [0x25B3].pack('U'), + 'biguplus' => [0x2A04].pack('U'), + 'bigvee' => [0x22C1].pack('U'), + 'bigwedge' => [0x22C0].pack('U'), + 'bkarow' => [0x290D].pack('U'), + 'blacklozenge' => [0x29EB].pack('U'), + 'blacksquare' => [0x25AA].pack('U'), + 'blacktriangle' => [0x25B4].pack('U'), + 'blacktriangledown' => [0x25BE].pack('U'), + 'blacktriangleleft' => [0x25C2].pack('U'), + 'blacktriangleright' => [0x25B8].pack('U'), + 'blank' => [0x2423].pack('U'), + 'blk12' => [0x2592].pack('U'), + 'blk14' => [0x2591].pack('U'), + 'blk34' => [0x2593].pack('U'), + 'block' => [0x2588].pack('U'), + 'bne' => [0x3D, 0x20E5].pack('U*'), + 'bnequiv' => [0x2261, 0x20E5].pack('U*'), + 'bNot' => [0x2AED].pack('U'), + 'bnot' => [0x2310].pack('U'), + 'Bopf' => [0x1D539].pack('U'), + 'bopf' => [0x1D553].pack('U'), + 'bot' => [0x22A5].pack('U'), + 'bottom' => [0x22A5].pack('U'), + 'bowtie' => [0x22C8].pack('U'), + 'boxbox' => [0x29C9].pack('U'), + 'boxdL' => [0x2555].pack('U'), + 'boxDL' => [0x2557].pack('U'), + 'boxdl' => [0x2510].pack('U'), + 'boxDl' => [0x2556].pack('U'), + 'boxDr' => [0x2553].pack('U'), + 'boxdr' => [0x250C].pack('U'), + 'boxdR' => [0x2552].pack('U'), + 'boxDR' => [0x2554].pack('U'), + 'boxh' => [0x2500].pack('U'), + 'boxH' => [0x2550].pack('U'), + 'boxhd' => [0x252C].pack('U'), + 'boxhD' => [0x2565].pack('U'), + 'boxHd' => [0x2564].pack('U'), + 'boxHD' => [0x2566].pack('U'), + 'boxhu' => [0x2534].pack('U'), + 'boxHu' => [0x2567].pack('U'), + 'boxhU' => [0x2568].pack('U'), + 'boxHU' => [0x2569].pack('U'), + 'boxminus' => [0x229F].pack('U'), + 'boxplus' => [0x229E].pack('U'), + 'boxtimes' => [0x22A0].pack('U'), + 'boxuL' => [0x255B].pack('U'), + 'boxUl' => [0x255C].pack('U'), + 'boxUL' => [0x255D].pack('U'), + 'boxul' => [0x2518].pack('U'), + 'boxuR' => [0x2558].pack('U'), + 'boxur' => [0x2514].pack('U'), + 'boxUr' => [0x2559].pack('U'), + 'boxUR' => [0x255A].pack('U'), + 'boxv' => [0x2502].pack('U'), + 'boxV' => [0x2551].pack('U'), + 'boxVh' => [0x256B].pack('U'), + 'boxVH' => [0x256C].pack('U'), + 'boxvh' => [0x253C].pack('U'), + 'boxvH' => [0x256A].pack('U'), + 'boxvl' => [0x2524].pack('U'), + 'boxVL' => [0x2563].pack('U'), + 'boxvL' => [0x2561].pack('U'), + 'boxVl' => [0x2562].pack('U'), + 'boxVr' => [0x255F].pack('U'), + 'boxVR' => [0x2560].pack('U'), + 'boxvr' => [0x251C].pack('U'), + 'boxvR' => [0x255E].pack('U'), + 'bprime' => [0x2035].pack('U'), + 'Breve' => [0x2D8].pack('U'), + 'breve' => [0x2D8].pack('U'), + 'brvbar' => [0xA6].pack('U'), + 'bscr' => [0x1D4B7].pack('U'), + 'Bscr' => [0x212C].pack('U'), + 'bsemi' => [0x204F].pack('U'), + 'bsim' => [0x223D].pack('U'), + 'bsime' => [0x22CD].pack('U'), + 'bsol' => [0x5C].pack('U'), + 'bsolb' => [0x29C5].pack('U'), + 'bsolhsub' => [0x27C8].pack('U'), + 'bull' => [0x2022].pack('U'), + 'bullet' => [0x2022].pack('U'), + 'bump' => [0x224E].pack('U'), + 'bumpe' => [0x224F].pack('U'), + 'bumpE' => [0x2AAE].pack('U'), + 'bumpeq' => [0x224F].pack('U'), + 'Bumpeq' => [0x224E].pack('U'), + 'cacute' => [0x107].pack('U'), + 'Cacute' => [0x106].pack('U'), + 'Cap' => [0x22D2].pack('U'), + 'cap' => [0x2229].pack('U'), + 'capand' => [0x2A44].pack('U'), + 'capbrcup' => [0x2A49].pack('U'), + 'capcap' => [0x2A4B].pack('U'), + 'capcup' => [0x2A47].pack('U'), + 'capdot' => [0x2A40].pack('U'), + 'CapitalDifferentialD' => [0x2145].pack('U'), + 'caps' => [0x2229, 0xFE00].pack('U*'), + 'caret' => [0x2041].pack('U'), + 'caron' => [0x2C7].pack('U'), + 'Cayleys' => [0x212D].pack('U'), + 'ccaps' => [0x2A4D].pack('U'), + 'Ccaron' => [0x10C].pack('U'), + 'ccaron' => [0x10D].pack('U'), + 'Ccedil' => [0xC7].pack('U'), + 'ccedil' => [0xE7].pack('U'), + 'ccirc' => [0x109].pack('U'), + 'Ccirc' => [0x108].pack('U'), + 'Cconint' => [0x2230].pack('U'), + 'ccups' => [0x2A4C].pack('U'), + 'ccupssm' => [0x2A50].pack('U'), + 'Cdot' => [0x10A].pack('U'), + 'cdot' => [0x10B].pack('U'), + 'cedil' => [0xB8].pack('U'), + 'Cedilla' => [0xB8].pack('U'), + 'cemptyv' => [0x29B2].pack('U'), + 'cent' => [0xA2].pack('U'), + 'centerdot' => [0xB7].pack('U'), + 'CenterDot' => [0xB7].pack('U'), + 'cfr' => [0x1D520].pack('U'), + 'Cfr' => [0x212D].pack('U'), + 'chcy' => [0x447].pack('U'), + 'CHcy' => [0x427].pack('U'), + 'check' => [0x2713].pack('U'), + 'checkmark' => [0x2713].pack('U'), + 'Chi' => [0x3A7].pack('U'), + 'chi' => [0x3C7].pack('U'), + 'cir' => [0x25CB].pack('U'), + 'circ' => [0x2C6].pack('U'), + 'circeq' => [0x2257].pack('U'), + 'circlearrowleft' => [0x21BA].pack('U'), + 'circlearrowright' => [0x21BB].pack('U'), + 'circledast' => [0x229B].pack('U'), + 'circledcirc' => [0x229A].pack('U'), + 'circleddash' => [0x229D].pack('U'), + 'CircleDot' => [0x2299].pack('U'), + 'circledR' => [0xAE].pack('U'), + 'circledS' => [0x24C8].pack('U'), + 'CircleMinus' => [0x2296].pack('U'), + 'CirclePlus' => [0x2295].pack('U'), + 'CircleTimes' => [0x2297].pack('U'), + 'cire' => [0x2257].pack('U'), + 'cirE' => [0x29C3].pack('U'), + 'cirfnint' => [0x2A10].pack('U'), + 'cirmid' => [0x2AEF].pack('U'), + 'cirscir' => [0x29C2].pack('U'), + 'ClockwiseContourIntegral' => [0x2232].pack('U'), + 'CloseCurlyDoubleQuote' => [0x201D].pack('U'), + 'CloseCurlyQuote' => [0x2019].pack('U'), + 'clubs' => [0x2663].pack('U'), + 'clubsuit' => [0x2663].pack('U'), + 'Colon' => [0x2237].pack('U'), + 'colon' => [0x3A].pack('U'), + 'colone' => [0x2254].pack('U'), + 'Colone' => [0x2A74].pack('U'), + 'coloneq' => [0x2254].pack('U'), + 'comma' => [0x2C].pack('U'), + 'commat' => [0x40].pack('U'), + 'comp' => [0x2201].pack('U'), + 'compfn' => [0x2218].pack('U'), + 'complement' => [0x2201].pack('U'), + 'complexes' => [0x2102].pack('U'), + 'cong' => [0x2245].pack('U'), + 'congdot' => [0x2A6D].pack('U'), + 'Congruent' => [0x2261].pack('U'), + 'conint' => [0x222E].pack('U'), + 'Conint' => [0x222F].pack('U'), + 'ContourIntegral' => [0x222E].pack('U'), + 'copf' => [0x1D554].pack('U'), + 'Copf' => [0x2102].pack('U'), + 'coprod' => [0x2210].pack('U'), + 'Coproduct' => [0x2210].pack('U'), + 'COPY' => [0xA9].pack('U'), + 'copy' => [0xA9].pack('U'), + 'copysr' => [0x2117].pack('U'), + 'CounterClockwiseContourIntegral' => [0x2233].pack('U'), + 'crarr' => [0x21B5].pack('U'), + 'cross' => [0x2717].pack('U'), + 'Cross' => [0x2A2F].pack('U'), + 'Cscr' => [0x1D49E].pack('U'), + 'cscr' => [0x1D4B8].pack('U'), + 'csub' => [0x2ACF].pack('U'), + 'csube' => [0x2AD1].pack('U'), + 'csup' => [0x2AD0].pack('U'), + 'csupe' => [0x2AD2].pack('U'), + 'ctdot' => [0x22EF].pack('U'), + 'cudarrl' => [0x2938].pack('U'), + 'cudarrr' => [0x2935].pack('U'), + 'cuepr' => [0x22DE].pack('U'), + 'cuesc' => [0x22DF].pack('U'), + 'cularr' => [0x21B6].pack('U'), + 'cularrp' => [0x293D].pack('U'), + 'Cup' => [0x22D3].pack('U'), + 'cup' => [0x222A].pack('U'), + 'cupbrcap' => [0x2A48].pack('U'), + 'cupcap' => [0x2A46].pack('U'), + 'CupCap' => [0x224D].pack('U'), + 'cupcup' => [0x2A4A].pack('U'), + 'cupdot' => [0x228D].pack('U'), + 'cupor' => [0x2A45].pack('U'), + 'cups' => [0x222A, 0xFE00].pack('U*'), + 'curarr' => [0x21B7].pack('U'), + 'curarrm' => [0x293C].pack('U'), + 'curlyeqprec' => [0x22DE].pack('U'), + 'curlyeqsucc' => [0x22DF].pack('U'), + 'curlyvee' => [0x22CE].pack('U'), + 'curlywedge' => [0x22CF].pack('U'), + 'curren' => [0xA4].pack('U'), + 'curvearrowleft' => [0x21B6].pack('U'), + 'curvearrowright' => [0x21B7].pack('U'), + 'cuvee' => [0x22CE].pack('U'), + 'cuwed' => [0x22CF].pack('U'), + 'cwconint' => [0x2232].pack('U'), + 'cwint' => [0x2231].pack('U'), + 'cylcty' => [0x232D].pack('U'), + 'Dagger' => [0x2021].pack('U'), + 'dagger' => [0x2020].pack('U'), + 'daleth' => [0x2138].pack('U'), + 'darr' => [0x2193].pack('U'), + 'Darr' => [0x21A1].pack('U'), + 'dArr' => [0x21D3].pack('U'), + 'dash' => [0x2010].pack('U'), + 'Dashv' => [0x2AE4].pack('U'), + 'dashv' => [0x22A3].pack('U'), + 'dbkarow' => [0x290F].pack('U'), + 'dblac' => [0x2DD].pack('U'), + 'dcaron' => [0x10F].pack('U'), + 'Dcaron' => [0x10E].pack('U'), + 'Dcy' => [0x414].pack('U'), + 'dcy' => [0x434].pack('U'), + 'DD' => [0x2145].pack('U'), + 'dd' => [0x2146].pack('U'), + 'ddagger' => [0x2021].pack('U'), + 'ddarr' => [0x21CA].pack('U'), + 'DDotrahd' => [0x2911].pack('U'), + 'ddotseq' => [0x2A77].pack('U'), + 'deg' => [0xB0].pack('U'), + 'Del' => [0x2207].pack('U'), + 'Delta' => [0x394].pack('U'), + 'delta' => [0x3B4].pack('U'), + 'demptyv' => [0x29B1].pack('U'), + 'dfisht' => [0x297F].pack('U'), + 'dfr' => [0x1D521].pack('U'), + 'Dfr' => [0x1D507].pack('U'), + 'dHar' => [0x2965].pack('U'), + 'dharl' => [0x21C3].pack('U'), + 'dharr' => [0x21C2].pack('U'), + 'DiacriticalAcute' => [0xB4].pack('U'), + 'DiacriticalDot' => [0x2D9].pack('U'), + 'DiacriticalDoubleAcute' => [0x2DD].pack('U'), + 'DiacriticalGrave' => [0x60].pack('U'), + 'DiacriticalTilde' => [0x2DC].pack('U'), + 'diam' => [0x22C4].pack('U'), + 'Diamond' => [0x22C4].pack('U'), + 'diamond' => [0x22C4].pack('U'), + 'diamondsuit' => [0x2666].pack('U'), + 'diams' => [0x2666].pack('U'), + 'die' => [0xA8].pack('U'), + 'DifferentialD' => [0x2146].pack('U'), + 'digamma' => [0x3DD].pack('U'), + 'disin' => [0x22F2].pack('U'), + 'div' => [0xF7].pack('U'), + 'divide' => [0xF7].pack('U'), + 'divideontimes' => [0x22C7].pack('U'), + 'divonx' => [0x22C7].pack('U'), + 'DJcy' => [0x402].pack('U'), + 'djcy' => [0x452].pack('U'), + 'dlcorn' => [0x231E].pack('U'), + 'dlcrop' => [0x230D].pack('U'), + 'dollar' => [0x24].pack('U'), + 'Dopf' => [0x1D53B].pack('U'), + 'dopf' => [0x1D555].pack('U'), + 'Dot' => [0xA8].pack('U'), + 'dot' => [0x2D9].pack('U'), + 'DotDot' => [0x20DC].pack('U'), + 'doteq' => [0x2250].pack('U'), + 'doteqdot' => [0x2251].pack('U'), + 'DotEqual' => [0x2250].pack('U'), + 'dotminus' => [0x2238].pack('U'), + 'dotplus' => [0x2214].pack('U'), + 'dotsquare' => [0x22A1].pack('U'), + 'doublebarwedge' => [0x2306].pack('U'), + 'DoubleContourIntegral' => [0x222F].pack('U'), + 'DoubleDot' => [0xA8].pack('U'), + 'DoubleDownArrow' => [0x21D3].pack('U'), + 'DoubleLeftArrow' => [0x21D0].pack('U'), + 'DoubleLeftRightArrow' => [0x21D4].pack('U'), + 'DoubleLeftTee' => [0x2AE4].pack('U'), + 'DoubleLongLeftArrow' => [0x27F8].pack('U'), + 'DoubleLongLeftRightArrow' => [0x27FA].pack('U'), + 'DoubleLongRightArrow' => [0x27F9].pack('U'), + 'DoubleRightArrow' => [0x21D2].pack('U'), + 'DoubleRightTee' => [0x22A8].pack('U'), + 'DoubleUpArrow' => [0x21D1].pack('U'), + 'DoubleUpDownArrow' => [0x21D5].pack('U'), + 'DoubleVerticalBar' => [0x2225].pack('U'), + 'DownArrow' => [0x2193].pack('U'), + 'downarrow' => [0x2193].pack('U'), + 'Downarrow' => [0x21D3].pack('U'), + 'DownArrowBar' => [0x2913].pack('U'), + 'DownArrowUpArrow' => [0x21F5].pack('U'), + 'DownBreve' => [0x311].pack('U'), + 'downdownarrows' => [0x21CA].pack('U'), + 'downharpoonleft' => [0x21C3].pack('U'), + 'downharpoonright' => [0x21C2].pack('U'), + 'DownLeftRightVector' => [0x2950].pack('U'), + 'DownLeftTeeVector' => [0x295E].pack('U'), + 'DownLeftVector' => [0x21BD].pack('U'), + 'DownLeftVectorBar' => [0x2956].pack('U'), + 'DownRightTeeVector' => [0x295F].pack('U'), + 'DownRightVector' => [0x21C1].pack('U'), + 'DownRightVectorBar' => [0x2957].pack('U'), + 'DownTee' => [0x22A4].pack('U'), + 'DownTeeArrow' => [0x21A7].pack('U'), + 'drbkarow' => [0x2910].pack('U'), + 'drcorn' => [0x231F].pack('U'), + 'drcrop' => [0x230C].pack('U'), + 'dscr' => [0x1D4B9].pack('U'), + 'Dscr' => [0x1D49F].pack('U'), + 'dscy' => [0x455].pack('U'), + 'DScy' => [0x405].pack('U'), + 'dsol' => [0x29F6].pack('U'), + 'Dstrok' => [0x110].pack('U'), + 'dstrok' => [0x111].pack('U'), + 'dtdot' => [0x22F1].pack('U'), + 'dtri' => [0x25BF].pack('U'), + 'dtrif' => [0x25BE].pack('U'), + 'duarr' => [0x21F5].pack('U'), + 'duhar' => [0x296F].pack('U'), + 'dwangle' => [0x29A6].pack('U'), + 'dzcy' => [0x45F].pack('U'), + 'DZcy' => [0x40F].pack('U'), + 'dzigrarr' => [0x27FF].pack('U'), + 'eacute' => [0xE9].pack('U'), + 'Eacute' => [0xC9].pack('U'), + 'easter' => [0x2A6E].pack('U'), + 'ecaron' => [0x11B].pack('U'), + 'Ecaron' => [0x11A].pack('U'), + 'ecir' => [0x2256].pack('U'), + 'ecirc' => [0xEA].pack('U'), + 'Ecirc' => [0xCA].pack('U'), + 'ecolon' => [0x2255].pack('U'), + 'ecy' => [0x44D].pack('U'), + 'Ecy' => [0x42D].pack('U'), + 'eDDot' => [0x2A77].pack('U'), + 'Edot' => [0x116].pack('U'), + 'eDot' => [0x2251].pack('U'), + 'edot' => [0x117].pack('U'), + 'ee' => [0x2147].pack('U'), + 'efDot' => [0x2252].pack('U'), + 'efr' => [0x1D522].pack('U'), + 'Efr' => [0x1D508].pack('U'), + 'eg' => [0x2A9A].pack('U'), + 'Egrave' => [0xC8].pack('U'), + 'egrave' => [0xE8].pack('U'), + 'egs' => [0x2A96].pack('U'), + 'egsdot' => [0x2A98].pack('U'), + 'el' => [0x2A99].pack('U'), + 'Element' => [0x2208].pack('U'), + 'elinters' => [0x23E7].pack('U'), + 'ell' => [0x2113].pack('U'), + 'els' => [0x2A95].pack('U'), + 'elsdot' => [0x2A97].pack('U'), + 'Emacr' => [0x112].pack('U'), + 'emacr' => [0x113].pack('U'), + 'empty' => [0x2205].pack('U'), + 'emptyset' => [0x2205].pack('U'), + 'EmptySmallSquare' => [0x25FB].pack('U'), + 'emptyv' => [0x2205].pack('U'), + 'EmptyVerySmallSquare' => [0x25AB].pack('U'), + 'emsp' => [0x2003].pack('U'), + 'emsp13' => [0x2004].pack('U'), + 'emsp14' => [0x2005].pack('U'), + 'ENG' => [0x14A].pack('U'), + 'eng' => [0x14B].pack('U'), + 'ensp' => [0x2002].pack('U'), + 'Eogon' => [0x118].pack('U'), + 'eogon' => [0x119].pack('U'), + 'eopf' => [0x1D556].pack('U'), + 'Eopf' => [0x1D53C].pack('U'), + 'epar' => [0x22D5].pack('U'), + 'eparsl' => [0x29E3].pack('U'), + 'eplus' => [0x2A71].pack('U'), + 'epsi' => [0x3B5].pack('U'), + 'Epsilon' => [0x395].pack('U'), + 'epsilon' => [0x3B5].pack('U'), + 'epsiv' => [0x3F5].pack('U'), + 'eqcirc' => [0x2256].pack('U'), + 'eqcolon' => [0x2255].pack('U'), + 'eqsim' => [0x2242].pack('U'), + 'eqslantgtr' => [0x2A96].pack('U'), + 'eqslantless' => [0x2A95].pack('U'), + 'Equal' => [0x2A75].pack('U'), + 'equals' => [0x3D].pack('U'), + 'EqualTilde' => [0x2242].pack('U'), + 'equest' => [0x225F].pack('U'), + 'Equilibrium' => [0x21CC].pack('U'), + 'equiv' => [0x2261].pack('U'), + 'equivDD' => [0x2A78].pack('U'), + 'eqvparsl' => [0x29E5].pack('U'), + 'erarr' => [0x2971].pack('U'), + 'erDot' => [0x2253].pack('U'), + 'escr' => [0x212F].pack('U'), + 'Escr' => [0x2130].pack('U'), + 'esdot' => [0x2250].pack('U'), + 'Esim' => [0x2A73].pack('U'), + 'esim' => [0x2242].pack('U'), + 'eta' => [0x3B7].pack('U'), + 'Eta' => [0x397].pack('U'), + 'eth' => [0xF0].pack('U'), + 'ETH' => [0xD0].pack('U'), + 'Euml' => [0xCB].pack('U'), + 'euml' => [0xEB].pack('U'), + 'euro' => [0x20AC].pack('U'), + 'excl' => [0x21].pack('U'), + 'exist' => [0x2203].pack('U'), + 'Exists' => [0x2203].pack('U'), + 'expectation' => [0x2130].pack('U'), + 'ExponentialE' => [0x2147].pack('U'), + 'exponentiale' => [0x2147].pack('U'), + 'fallingdotseq' => [0x2252].pack('U'), + 'fcy' => [0x444].pack('U'), + 'Fcy' => [0x424].pack('U'), + 'female' => [0x2640].pack('U'), + 'ffilig' => [0xFB03].pack('U'), + 'fflig' => [0xFB00].pack('U'), + 'ffllig' => [0xFB04].pack('U'), + 'ffr' => [0x1D523].pack('U'), + 'Ffr' => [0x1D509].pack('U'), + 'filig' => [0xFB01].pack('U'), + 'FilledSmallSquare' => [0x25FC].pack('U'), + 'FilledVerySmallSquare' => [0x25AA].pack('U'), + 'fjlig' => [0x66, 0x6A].pack('U*'), + 'flat' => [0x266D].pack('U'), + 'fllig' => [0xFB02].pack('U'), + 'fltns' => [0x25B1].pack('U'), + 'fnof' => [0x192].pack('U'), + 'Fopf' => [0x1D53D].pack('U'), + 'fopf' => [0x1D557].pack('U'), + 'forall' => [0x2200].pack('U'), + 'ForAll' => [0x2200].pack('U'), + 'fork' => [0x22D4].pack('U'), + 'forkv' => [0x2AD9].pack('U'), + 'Fouriertrf' => [0x2131].pack('U'), + 'fpartint' => [0x2A0D].pack('U'), + 'frac12' => [0xBD].pack('U'), + 'frac13' => [0x2153].pack('U'), + 'frac14' => [0xBC].pack('U'), + 'frac15' => [0x2155].pack('U'), + 'frac16' => [0x2159].pack('U'), + 'frac18' => [0x215B].pack('U'), + 'frac23' => [0x2154].pack('U'), + 'frac25' => [0x2156].pack('U'), + 'frac34' => [0xBE].pack('U'), + 'frac35' => [0x2157].pack('U'), + 'frac38' => [0x215C].pack('U'), + 'frac45' => [0x2158].pack('U'), + 'frac56' => [0x215A].pack('U'), + 'frac58' => [0x215D].pack('U'), + 'frac78' => [0x215E].pack('U'), + 'frasl' => [0x2044].pack('U'), + 'frown' => [0x2322].pack('U'), + 'fscr' => [0x1D4BB].pack('U'), + 'Fscr' => [0x2131].pack('U'), + 'gacute' => [0x1F5].pack('U'), + 'Gamma' => [0x393].pack('U'), + 'gamma' => [0x3B3].pack('U'), + 'gammad' => [0x3DD].pack('U'), + 'Gammad' => [0x3DC].pack('U'), + 'gap' => [0x2A86].pack('U'), + 'gbreve' => [0x11F].pack('U'), + 'Gbreve' => [0x11E].pack('U'), + 'Gcedil' => [0x122].pack('U'), + 'gcirc' => [0x11D].pack('U'), + 'Gcirc' => [0x11C].pack('U'), + 'gcy' => [0x433].pack('U'), + 'Gcy' => [0x413].pack('U'), + 'Gdot' => [0x120].pack('U'), + 'gdot' => [0x121].pack('U'), + 'ge' => [0x2265].pack('U'), + 'gE' => [0x2267].pack('U'), + 'gel' => [0x22DB].pack('U'), + 'gEl' => [0x2A8C].pack('U'), + 'geq' => [0x2265].pack('U'), + 'geqq' => [0x2267].pack('U'), + 'geqslant' => [0x2A7E].pack('U'), + 'ges' => [0x2A7E].pack('U'), + 'gescc' => [0x2AA9].pack('U'), + 'gesdot' => [0x2A80].pack('U'), + 'gesdoto' => [0x2A82].pack('U'), + 'gesdotol' => [0x2A84].pack('U'), + 'gesl' => [0x22DB, 0xFE00].pack('U*'), + 'gesles' => [0x2A94].pack('U'), + 'gfr' => [0x1D524].pack('U'), + 'Gfr' => [0x1D50A].pack('U'), + 'gg' => [0x226B].pack('U'), + 'Gg' => [0x22D9].pack('U'), + 'ggg' => [0x22D9].pack('U'), + 'gimel' => [0x2137].pack('U'), + 'gjcy' => [0x453].pack('U'), + 'GJcy' => [0x403].pack('U'), + 'gl' => [0x2277].pack('U'), + 'gla' => [0x2AA5].pack('U'), + 'glE' => [0x2A92].pack('U'), + 'glj' => [0x2AA4].pack('U'), + 'gnap' => [0x2A8A].pack('U'), + 'gnapprox' => [0x2A8A].pack('U'), + 'gnE' => [0x2269].pack('U'), + 'gne' => [0x2A88].pack('U'), + 'gneq' => [0x2A88].pack('U'), + 'gneqq' => [0x2269].pack('U'), + 'gnsim' => [0x22E7].pack('U'), + 'Gopf' => [0x1D53E].pack('U'), + 'gopf' => [0x1D558].pack('U'), + 'grave' => [0x60].pack('U'), + 'GreaterEqual' => [0x2265].pack('U'), + 'GreaterEqualLess' => [0x22DB].pack('U'), + 'GreaterFullEqual' => [0x2267].pack('U'), + 'GreaterGreater' => [0x2AA2].pack('U'), + 'GreaterLess' => [0x2277].pack('U'), + 'GreaterSlantEqual' => [0x2A7E].pack('U'), + 'GreaterTilde' => [0x2273].pack('U'), + 'Gscr' => [0x1D4A2].pack('U'), + 'gscr' => [0x210A].pack('U'), + 'gsim' => [0x2273].pack('U'), + 'gsime' => [0x2A8E].pack('U'), + 'gsiml' => [0x2A90].pack('U'), + 'gt' => [0x3E].pack('U'), + 'GT' => [0x3E].pack('U'), + 'Gt' => [0x226B].pack('U'), + 'gtcc' => [0x2AA7].pack('U'), + 'gtcir' => [0x2A7A].pack('U'), + 'gtdot' => [0x22D7].pack('U'), + 'gtlPar' => [0x2995].pack('U'), + 'gtquest' => [0x2A7C].pack('U'), + 'gtrapprox' => [0x2A86].pack('U'), + 'gtrarr' => [0x2978].pack('U'), + 'gtrdot' => [0x22D7].pack('U'), + 'gtreqless' => [0x22DB].pack('U'), + 'gtreqqless' => [0x2A8C].pack('U'), + 'gtrless' => [0x2277].pack('U'), + 'gtrsim' => [0x2273].pack('U'), + 'gvertneqq' => [0x2269, 0xFE00].pack('U*'), + 'gvnE' => [0x2269, 0xFE00].pack('U*'), + 'Hacek' => [0x2C7].pack('U'), + 'hairsp' => [0x200A].pack('U'), + 'half' => [0xBD].pack('U'), + 'hamilt' => [0x210B].pack('U'), + 'HARDcy' => [0x42A].pack('U'), + 'hardcy' => [0x44A].pack('U'), + 'hArr' => [0x21D4].pack('U'), + 'harr' => [0x2194].pack('U'), + 'harrcir' => [0x2948].pack('U'), + 'harrw' => [0x21AD].pack('U'), + 'Hat' => [0x5E].pack('U'), + 'hbar' => [0x210F].pack('U'), + 'Hcirc' => [0x124].pack('U'), + 'hcirc' => [0x125].pack('U'), + 'hearts' => [0x2665].pack('U'), + 'heartsuit' => [0x2665].pack('U'), + 'hellip' => [0x2026].pack('U'), + 'hercon' => [0x22B9].pack('U'), + 'hfr' => [0x1D525].pack('U'), + 'Hfr' => [0x210C].pack('U'), + 'HilbertSpace' => [0x210B].pack('U'), + 'hksearow' => [0x2925].pack('U'), + 'hkswarow' => [0x2926].pack('U'), + 'hoarr' => [0x21FF].pack('U'), + 'homtht' => [0x223B].pack('U'), + 'hookleftarrow' => [0x21A9].pack('U'), + 'hookrightarrow' => [0x21AA].pack('U'), + 'Hopf' => [0x210D].pack('U'), + 'hopf' => [0x1D559].pack('U'), + 'horbar' => [0x2015].pack('U'), + 'HorizontalLine' => [0x2500].pack('U'), + 'hscr' => [0x1D4BD].pack('U'), + 'Hscr' => [0x210B].pack('U'), + 'hslash' => [0x210F].pack('U'), + 'Hstrok' => [0x126].pack('U'), + 'hstrok' => [0x127].pack('U'), + 'HumpDownHump' => [0x224E].pack('U'), + 'HumpEqual' => [0x224F].pack('U'), + 'hybull' => [0x2043].pack('U'), + 'hyphen' => [0x2010].pack('U'), + 'iacute' => [0xED].pack('U'), + 'Iacute' => [0xCD].pack('U'), + 'ic' => [0x2063].pack('U'), + 'Icirc' => [0xCE].pack('U'), + 'icirc' => [0xEE].pack('U'), + 'Icy' => [0x418].pack('U'), + 'icy' => [0x438].pack('U'), + 'Idot' => [0x130].pack('U'), + 'IEcy' => [0x415].pack('U'), + 'iecy' => [0x435].pack('U'), + 'iexcl' => [0xA1].pack('U'), + 'iff' => [0x21D4].pack('U'), + 'ifr' => [0x1D526].pack('U'), + 'Ifr' => [0x2111].pack('U'), + 'Igrave' => [0xCC].pack('U'), + 'igrave' => [0xEC].pack('U'), + 'ii' => [0x2148].pack('U'), + 'iiiint' => [0x2A0C].pack('U'), + 'iiint' => [0x222D].pack('U'), + 'iinfin' => [0x29DC].pack('U'), + 'iiota' => [0x2129].pack('U'), + 'ijlig' => [0x133].pack('U'), + 'IJlig' => [0x132].pack('U'), + 'Im' => [0x2111].pack('U'), + 'imacr' => [0x12B].pack('U'), + 'Imacr' => [0x12A].pack('U'), + 'image' => [0x2111].pack('U'), + 'ImaginaryI' => [0x2148].pack('U'), + 'imagline' => [0x2110].pack('U'), + 'imagpart' => [0x2111].pack('U'), + 'imath' => [0x131].pack('U'), + 'imof' => [0x22B7].pack('U'), + 'imped' => [0x1B5].pack('U'), + 'Implies' => [0x21D2].pack('U'), + 'in' => [0x2208].pack('U'), + 'incare' => [0x2105].pack('U'), + 'infin' => [0x221E].pack('U'), + 'infintie' => [0x29DD].pack('U'), + 'inodot' => [0x131].pack('U'), + 'Int' => [0x222C].pack('U'), + 'int' => [0x222B].pack('U'), + 'intcal' => [0x22BA].pack('U'), + 'integers' => [0x2124].pack('U'), + 'Integral' => [0x222B].pack('U'), + 'intercal' => [0x22BA].pack('U'), + 'Intersection' => [0x22C2].pack('U'), + 'intlarhk' => [0x2A17].pack('U'), + 'intprod' => [0x2A3C].pack('U'), + 'InvisibleComma' => [0x2063].pack('U'), + 'InvisibleTimes' => [0x2062].pack('U'), + 'iocy' => [0x451].pack('U'), + 'IOcy' => [0x401].pack('U'), + 'Iogon' => [0x12E].pack('U'), + 'iogon' => [0x12F].pack('U'), + 'Iopf' => [0x1D540].pack('U'), + 'iopf' => [0x1D55A].pack('U'), + 'Iota' => [0x399].pack('U'), + 'iota' => [0x3B9].pack('U'), + 'iprod' => [0x2A3C].pack('U'), + 'iquest' => [0xBF].pack('U'), + 'iscr' => [0x1D4BE].pack('U'), + 'Iscr' => [0x2110].pack('U'), + 'isin' => [0x2208].pack('U'), + 'isindot' => [0x22F5].pack('U'), + 'isinE' => [0x22F9].pack('U'), + 'isins' => [0x22F4].pack('U'), + 'isinsv' => [0x22F3].pack('U'), + 'isinv' => [0x2208].pack('U'), + 'it' => [0x2062].pack('U'), + 'Itilde' => [0x128].pack('U'), + 'itilde' => [0x129].pack('U'), + 'iukcy' => [0x456].pack('U'), + 'Iukcy' => [0x406].pack('U'), + 'iuml' => [0xEF].pack('U'), + 'Iuml' => [0xCF].pack('U'), + 'jcirc' => [0x135].pack('U'), + 'Jcirc' => [0x134].pack('U'), + 'jcy' => [0x439].pack('U'), + 'Jcy' => [0x419].pack('U'), + 'jfr' => [0x1D527].pack('U'), + 'Jfr' => [0x1D50D].pack('U'), + 'jmath' => [0x237].pack('U'), + 'Jopf' => [0x1D541].pack('U'), + 'jopf' => [0x1D55B].pack('U'), + 'Jscr' => [0x1D4A5].pack('U'), + 'jscr' => [0x1D4BF].pack('U'), + 'Jsercy' => [0x408].pack('U'), + 'jsercy' => [0x458].pack('U'), + 'Jukcy' => [0x404].pack('U'), + 'jukcy' => [0x454].pack('U'), + 'Kappa' => [0x39A].pack('U'), + 'kappa' => [0x3BA].pack('U'), + 'kappav' => [0x3F0].pack('U'), + 'Kcedil' => [0x136].pack('U'), + 'kcedil' => [0x137].pack('U'), + 'Kcy' => [0x41A].pack('U'), + 'kcy' => [0x43A].pack('U'), + 'kfr' => [0x1D528].pack('U'), + 'Kfr' => [0x1D50E].pack('U'), + 'kgreen' => [0x138].pack('U'), + 'KHcy' => [0x425].pack('U'), + 'khcy' => [0x445].pack('U'), + 'kjcy' => [0x45C].pack('U'), + 'KJcy' => [0x40C].pack('U'), + 'kopf' => [0x1D55C].pack('U'), + 'Kopf' => [0x1D542].pack('U'), + 'Kscr' => [0x1D4A6].pack('U'), + 'kscr' => [0x1D4C0].pack('U'), + 'lAarr' => [0x21DA].pack('U'), + 'lacute' => [0x13A].pack('U'), + 'Lacute' => [0x139].pack('U'), + 'laemptyv' => [0x29B4].pack('U'), + 'lagran' => [0x2112].pack('U'), + 'Lambda' => [0x39B].pack('U'), + 'lambda' => [0x3BB].pack('U'), + 'lang' => [0x27E8].pack('U'), + 'Lang' => [0x27EA].pack('U'), + 'langd' => [0x2991].pack('U'), + 'langle' => [0x27E8].pack('U'), + 'lap' => [0x2A85].pack('U'), + 'Laplacetrf' => [0x2112].pack('U'), + 'laquo' => [0xAB].pack('U'), + 'larr' => [0x2190].pack('U'), + 'Larr' => [0x219E].pack('U'), + 'lArr' => [0x21D0].pack('U'), + 'larrb' => [0x21E4].pack('U'), + 'larrbfs' => [0x291F].pack('U'), + 'larrfs' => [0x291D].pack('U'), + 'larrhk' => [0x21A9].pack('U'), + 'larrlp' => [0x21AB].pack('U'), + 'larrpl' => [0x2939].pack('U'), + 'larrsim' => [0x2973].pack('U'), + 'larrtl' => [0x21A2].pack('U'), + 'lat' => [0x2AAB].pack('U'), + 'latail' => [0x2919].pack('U'), + 'lAtail' => [0x291B].pack('U'), + 'late' => [0x2AAD].pack('U'), + 'lates' => [0x2AAD, 0xFE00].pack('U*'), + 'lBarr' => [0x290E].pack('U'), + 'lbarr' => [0x290C].pack('U'), + 'lbbrk' => [0x2772].pack('U'), + 'lbrace' => [0x7B].pack('U'), + 'lbrack' => [0x5B].pack('U'), + 'lbrke' => [0x298B].pack('U'), + 'lbrksld' => [0x298F].pack('U'), + 'lbrkslu' => [0x298D].pack('U'), + 'Lcaron' => [0x13D].pack('U'), + 'lcaron' => [0x13E].pack('U'), + 'lcedil' => [0x13C].pack('U'), + 'Lcedil' => [0x13B].pack('U'), + 'lceil' => [0x2308].pack('U'), + 'lcub' => [0x7B].pack('U'), + 'Lcy' => [0x41B].pack('U'), + 'lcy' => [0x43B].pack('U'), + 'ldca' => [0x2936].pack('U'), + 'ldquo' => [0x201C].pack('U'), + 'ldquor' => [0x201E].pack('U'), + 'ldrdhar' => [0x2967].pack('U'), + 'ldrushar' => [0x294B].pack('U'), + 'ldsh' => [0x21B2].pack('U'), + 'le' => [0x2264].pack('U'), + 'lE' => [0x2266].pack('U'), + 'LeftAngleBracket' => [0x27E8].pack('U'), + 'LeftArrow' => [0x2190].pack('U'), + 'leftarrow' => [0x2190].pack('U'), + 'Leftarrow' => [0x21D0].pack('U'), + 'LeftArrowBar' => [0x21E4].pack('U'), + 'LeftArrowRightArrow' => [0x21C6].pack('U'), + 'leftarrowtail' => [0x21A2].pack('U'), + 'LeftCeiling' => [0x2308].pack('U'), + 'LeftDoubleBracket' => [0x27E6].pack('U'), + 'LeftDownTeeVector' => [0x2961].pack('U'), + 'LeftDownVector' => [0x21C3].pack('U'), + 'LeftDownVectorBar' => [0x2959].pack('U'), + 'LeftFloor' => [0x230A].pack('U'), + 'leftharpoondown' => [0x21BD].pack('U'), + 'leftharpoonup' => [0x21BC].pack('U'), + 'leftleftarrows' => [0x21C7].pack('U'), + 'LeftRightArrow' => [0x2194].pack('U'), + 'leftrightarrow' => [0x2194].pack('U'), + 'Leftrightarrow' => [0x21D4].pack('U'), + 'leftrightarrows' => [0x21C6].pack('U'), + 'leftrightharpoons' => [0x21CB].pack('U'), + 'leftrightsquigarrow' => [0x21AD].pack('U'), + 'LeftRightVector' => [0x294E].pack('U'), + 'LeftTee' => [0x22A3].pack('U'), + 'LeftTeeArrow' => [0x21A4].pack('U'), + 'LeftTeeVector' => [0x295A].pack('U'), + 'leftthreetimes' => [0x22CB].pack('U'), + 'LeftTriangle' => [0x22B2].pack('U'), + 'LeftTriangleBar' => [0x29CF].pack('U'), + 'LeftTriangleEqual' => [0x22B4].pack('U'), + 'LeftUpDownVector' => [0x2951].pack('U'), + 'LeftUpTeeVector' => [0x2960].pack('U'), + 'LeftUpVector' => [0x21BF].pack('U'), + 'LeftUpVectorBar' => [0x2958].pack('U'), + 'LeftVector' => [0x21BC].pack('U'), + 'LeftVectorBar' => [0x2952].pack('U'), + 'leg' => [0x22DA].pack('U'), + 'lEg' => [0x2A8B].pack('U'), + 'leq' => [0x2264].pack('U'), + 'leqq' => [0x2266].pack('U'), + 'leqslant' => [0x2A7D].pack('U'), + 'les' => [0x2A7D].pack('U'), + 'lescc' => [0x2AA8].pack('U'), + 'lesdot' => [0x2A7F].pack('U'), + 'lesdoto' => [0x2A81].pack('U'), + 'lesdotor' => [0x2A83].pack('U'), + 'lesg' => [0x22DA, 0xFE00].pack('U*'), + 'lesges' => [0x2A93].pack('U'), + 'lessapprox' => [0x2A85].pack('U'), + 'lessdot' => [0x22D6].pack('U'), + 'lesseqgtr' => [0x22DA].pack('U'), + 'lesseqqgtr' => [0x2A8B].pack('U'), + 'LessEqualGreater' => [0x22DA].pack('U'), + 'LessFullEqual' => [0x2266].pack('U'), + 'LessGreater' => [0x2276].pack('U'), + 'lessgtr' => [0x2276].pack('U'), + 'LessLess' => [0x2AA1].pack('U'), + 'lesssim' => [0x2272].pack('U'), + 'LessSlantEqual' => [0x2A7D].pack('U'), + 'LessTilde' => [0x2272].pack('U'), + 'lfisht' => [0x297C].pack('U'), + 'lfloor' => [0x230A].pack('U'), + 'lfr' => [0x1D529].pack('U'), + 'Lfr' => [0x1D50F].pack('U'), + 'lg' => [0x2276].pack('U'), + 'lgE' => [0x2A91].pack('U'), + 'lHar' => [0x2962].pack('U'), + 'lhard' => [0x21BD].pack('U'), + 'lharu' => [0x21BC].pack('U'), + 'lharul' => [0x296A].pack('U'), + 'lhblk' => [0x2584].pack('U'), + 'ljcy' => [0x459].pack('U'), + 'LJcy' => [0x409].pack('U'), + 'Ll' => [0x22D8].pack('U'), + 'll' => [0x226A].pack('U'), + 'llarr' => [0x21C7].pack('U'), + 'llcorner' => [0x231E].pack('U'), + 'Lleftarrow' => [0x21DA].pack('U'), + 'llhard' => [0x296B].pack('U'), + 'lltri' => [0x25FA].pack('U'), + 'Lmidot' => [0x13F].pack('U'), + 'lmidot' => [0x140].pack('U'), + 'lmoust' => [0x23B0].pack('U'), + 'lmoustache' => [0x23B0].pack('U'), + 'lnap' => [0x2A89].pack('U'), + 'lnapprox' => [0x2A89].pack('U'), + 'lnE' => [0x2268].pack('U'), + 'lne' => [0x2A87].pack('U'), + 'lneq' => [0x2A87].pack('U'), + 'lneqq' => [0x2268].pack('U'), + 'lnsim' => [0x22E6].pack('U'), + 'loang' => [0x27EC].pack('U'), + 'loarr' => [0x21FD].pack('U'), + 'lobrk' => [0x27E6].pack('U'), + 'Longleftarrow' => [0x27F8].pack('U'), + 'longleftarrow' => [0x27F5].pack('U'), + 'LongLeftArrow' => [0x27F5].pack('U'), + 'LongLeftRightArrow' => [0x27F7].pack('U'), + 'longleftrightarrow' => [0x27F7].pack('U'), + 'Longleftrightarrow' => [0x27FA].pack('U'), + 'longmapsto' => [0x27FC].pack('U'), + 'longrightarrow' => [0x27F6].pack('U'), + 'Longrightarrow' => [0x27F9].pack('U'), + 'LongRightArrow' => [0x27F6].pack('U'), + 'looparrowleft' => [0x21AB].pack('U'), + 'looparrowright' => [0x21AC].pack('U'), + 'lopar' => [0x2985].pack('U'), + 'lopf' => [0x1D55D].pack('U'), + 'Lopf' => [0x1D543].pack('U'), + 'loplus' => [0x2A2D].pack('U'), + 'lotimes' => [0x2A34].pack('U'), + 'lowast' => [0x2217].pack('U'), + 'lowbar' => [0x5F].pack('U'), + 'LowerLeftArrow' => [0x2199].pack('U'), + 'LowerRightArrow' => [0x2198].pack('U'), + 'loz' => [0x25CA].pack('U'), + 'lozenge' => [0x25CA].pack('U'), + 'lozf' => [0x29EB].pack('U'), + 'lpar' => [0x28].pack('U'), + 'lparlt' => [0x2993].pack('U'), + 'lrarr' => [0x21C6].pack('U'), + 'lrcorner' => [0x231F].pack('U'), + 'lrhar' => [0x21CB].pack('U'), + 'lrhard' => [0x296D].pack('U'), + 'lrm' => [0x200E].pack('U'), + 'lrtri' => [0x22BF].pack('U'), + 'lsaquo' => [0x2039].pack('U'), + 'lscr' => [0x1D4C1].pack('U'), + 'Lscr' => [0x2112].pack('U'), + 'lsh' => [0x21B0].pack('U'), + 'Lsh' => [0x21B0].pack('U'), + 'lsim' => [0x2272].pack('U'), + 'lsime' => [0x2A8D].pack('U'), + 'lsimg' => [0x2A8F].pack('U'), + 'lsqb' => [0x5B].pack('U'), + 'lsquo' => [0x2018].pack('U'), + 'lsquor' => [0x201A].pack('U'), + 'Lstrok' => [0x141].pack('U'), + 'lstrok' => [0x142].pack('U'), + 'Lt' => [0x226A].pack('U'), + 'lt' => [0x3C].pack('U'), + 'LT' => [0x3C].pack('U'), + 'ltcc' => [0x2AA6].pack('U'), + 'ltcir' => [0x2A79].pack('U'), + 'ltdot' => [0x22D6].pack('U'), + 'lthree' => [0x22CB].pack('U'), + 'ltimes' => [0x22C9].pack('U'), + 'ltlarr' => [0x2976].pack('U'), + 'ltquest' => [0x2A7B].pack('U'), + 'ltri' => [0x25C3].pack('U'), + 'ltrie' => [0x22B4].pack('U'), + 'ltrif' => [0x25C2].pack('U'), + 'ltrPar' => [0x2996].pack('U'), + 'lurdshar' => [0x294A].pack('U'), + 'luruhar' => [0x2966].pack('U'), + 'lvertneqq' => [0x2268, 0xFE00].pack('U*'), + 'lvnE' => [0x2268, 0xFE00].pack('U*'), + 'macr' => [0xAF].pack('U'), + 'male' => [0x2642].pack('U'), + 'malt' => [0x2720].pack('U'), + 'maltese' => [0x2720].pack('U'), + 'map' => [0x21A6].pack('U'), + 'Map' => [0x2905].pack('U'), + 'mapsto' => [0x21A6].pack('U'), + 'mapstodown' => [0x21A7].pack('U'), + 'mapstoleft' => [0x21A4].pack('U'), + 'mapstoup' => [0x21A5].pack('U'), + 'marker' => [0x25AE].pack('U'), + 'mcomma' => [0x2A29].pack('U'), + 'mcy' => [0x43C].pack('U'), + 'Mcy' => [0x41C].pack('U'), + 'mdash' => [0x2014].pack('U'), + 'mDDot' => [0x223A].pack('U'), + 'measuredangle' => [0x2221].pack('U'), + 'MediumSpace' => [0x205F].pack('U'), + 'Mellintrf' => [0x2133].pack('U'), + 'Mfr' => [0x1D510].pack('U'), + 'mfr' => [0x1D52A].pack('U'), + 'mho' => [0x2127].pack('U'), + 'micro' => [0xB5].pack('U'), + 'mid' => [0x2223].pack('U'), + 'midast' => [0x2A].pack('U'), + 'midcir' => [0x2AF0].pack('U'), + 'middot' => [0xB7].pack('U'), + 'minus' => [0x2212].pack('U'), + 'minusb' => [0x229F].pack('U'), + 'minusd' => [0x2238].pack('U'), + 'minusdu' => [0x2A2A].pack('U'), + 'MinusPlus' => [0x2213].pack('U'), + 'mlcp' => [0x2ADB].pack('U'), + 'mldr' => [0x2026].pack('U'), + 'mnplus' => [0x2213].pack('U'), + 'models' => [0x22A7].pack('U'), + 'mopf' => [0x1D55E].pack('U'), + 'Mopf' => [0x1D544].pack('U'), + 'mp' => [0x2213].pack('U'), + 'mscr' => [0x1D4C2].pack('U'), + 'Mscr' => [0x2133].pack('U'), + 'mstpos' => [0x223E].pack('U'), + 'mu' => [0x3BC].pack('U'), + 'Mu' => [0x39C].pack('U'), + 'multimap' => [0x22B8].pack('U'), + 'mumap' => [0x22B8].pack('U'), + 'nabla' => [0x2207].pack('U'), + 'nacute' => [0x144].pack('U'), + 'Nacute' => [0x143].pack('U'), + 'nang' => [0x2220, 0x20D2].pack('U*'), + 'nap' => [0x2249].pack('U'), + 'napE' => [0x2A70, 0x338].pack('U*'), + 'napid' => [0x224B, 0x338].pack('U*'), + 'napos' => [0x149].pack('U'), + 'napprox' => [0x2249].pack('U'), + 'natur' => [0x266E].pack('U'), + 'natural' => [0x266E].pack('U'), + 'naturals' => [0x2115].pack('U'), + 'nbsp' => [0xA0].pack('U'), + 'nbump' => [0x224E, 0x338].pack('U*'), + 'nbumpe' => [0x224F, 0x338].pack('U*'), + 'ncap' => [0x2A43].pack('U'), + 'ncaron' => [0x148].pack('U'), + 'Ncaron' => [0x147].pack('U'), + 'ncedil' => [0x146].pack('U'), + 'Ncedil' => [0x145].pack('U'), + 'ncong' => [0x2247].pack('U'), + 'ncongdot' => [0x2A6D, 0x338].pack('U*'), + 'ncup' => [0x2A42].pack('U'), + 'Ncy' => [0x41D].pack('U'), + 'ncy' => [0x43D].pack('U'), + 'ndash' => [0x2013].pack('U'), + 'ne' => [0x2260].pack('U'), + 'nearhk' => [0x2924].pack('U'), + 'nearr' => [0x2197].pack('U'), + 'neArr' => [0x21D7].pack('U'), + 'nearrow' => [0x2197].pack('U'), + 'nedot' => [0x2250, 0x338].pack('U*'), + 'NegativeMediumSpace' => [0x200B].pack('U'), + 'NegativeThickSpace' => [0x200B].pack('U'), + 'NegativeThinSpace' => [0x200B].pack('U'), + 'NegativeVeryThinSpace' => [0x200B].pack('U'), + 'nequiv' => [0x2262].pack('U'), + 'nesear' => [0x2928].pack('U'), + 'nesim' => [0x2242, 0x338].pack('U*'), + 'NestedGreaterGreater' => [0x226B].pack('U'), + 'NestedLessLess' => [0x226A].pack('U'), + 'NewLine' => [0xA].pack('U'), + 'nexist' => [0x2204].pack('U'), + 'nexists' => [0x2204].pack('U'), + 'nfr' => [0x1D52B].pack('U'), + 'Nfr' => [0x1D511].pack('U'), + 'nge' => [0x2271].pack('U'), + 'ngE' => [0x2267, 0x338].pack('U*'), + 'ngeq' => [0x2271].pack('U'), + 'ngeqq' => [0x2267, 0x338].pack('U*'), + 'ngeqslant' => [0x2A7E, 0x338].pack('U*'), + 'nges' => [0x2A7E, 0x338].pack('U*'), + 'nGg' => [0x22D9, 0x338].pack('U*'), + 'ngsim' => [0x2275].pack('U'), + 'nGt' => [0x226B, 0x20D2].pack('U*'), + 'ngt' => [0x226F].pack('U'), + 'ngtr' => [0x226F].pack('U'), + 'nGtv' => [0x226B, 0x338].pack('U*'), + 'nharr' => [0x21AE].pack('U'), + 'nhArr' => [0x21CE].pack('U'), + 'nhpar' => [0x2AF2].pack('U'), + 'ni' => [0x220B].pack('U'), + 'nis' => [0x22FC].pack('U'), + 'nisd' => [0x22FA].pack('U'), + 'niv' => [0x220B].pack('U'), + 'NJcy' => [0x40A].pack('U'), + 'njcy' => [0x45A].pack('U'), + 'nlarr' => [0x219A].pack('U'), + 'nlArr' => [0x21CD].pack('U'), + 'nldr' => [0x2025].pack('U'), + 'nle' => [0x2270].pack('U'), + 'nlE' => [0x2266, 0x338].pack('U*'), + 'nleftarrow' => [0x219A].pack('U'), + 'nLeftarrow' => [0x21CD].pack('U'), + 'nleftrightarrow' => [0x21AE].pack('U'), + 'nLeftrightarrow' => [0x21CE].pack('U'), + 'nleq' => [0x2270].pack('U'), + 'nleqq' => [0x2266, 0x338].pack('U*'), + 'nleqslant' => [0x2A7D, 0x338].pack('U*'), + 'nles' => [0x2A7D, 0x338].pack('U*'), + 'nless' => [0x226E].pack('U'), + 'nLl' => [0x22D8, 0x338].pack('U*'), + 'nlsim' => [0x2274].pack('U'), + 'nLt' => [0x226A, 0x20D2].pack('U*'), + 'nlt' => [0x226E].pack('U'), + 'nltri' => [0x22EA].pack('U'), + 'nltrie' => [0x22EC].pack('U'), + 'nLtv' => [0x226A, 0x338].pack('U*'), + 'nmid' => [0x2224].pack('U'), + 'NoBreak' => [0x2060].pack('U'), + 'NonBreakingSpace' => [0xA0].pack('U'), + 'Nopf' => [0x2115].pack('U'), + 'nopf' => [0x1D55F].pack('U'), + 'Not' => [0x2AEC].pack('U'), + 'not' => [0xAC].pack('U'), + 'NotCongruent' => [0x2262].pack('U'), + 'NotCupCap' => [0x226D].pack('U'), + 'NotDoubleVerticalBar' => [0x2226].pack('U'), + 'NotElement' => [0x2209].pack('U'), + 'NotEqual' => [0x2260].pack('U'), + 'NotEqualTilde' => [0x2242, 0x338].pack('U*'), + 'NotExists' => [0x2204].pack('U'), + 'NotGreater' => [0x226F].pack('U'), + 'NotGreaterEqual' => [0x2271].pack('U'), + 'NotGreaterFullEqual' => [0x2267, 0x338].pack('U*'), + 'NotGreaterGreater' => [0x226B, 0x338].pack('U*'), + 'NotGreaterLess' => [0x2279].pack('U'), + 'NotGreaterSlantEqual' => [0x2A7E, 0x338].pack('U*'), + 'NotGreaterTilde' => [0x2275].pack('U'), + 'NotHumpDownHump' => [0x224E, 0x338].pack('U*'), + 'NotHumpEqual' => [0x224F, 0x338].pack('U*'), + 'notin' => [0x2209].pack('U'), + 'notindot' => [0x22F5, 0x338].pack('U*'), + 'notinE' => [0x22F9, 0x338].pack('U*'), + 'notinva' => [0x2209].pack('U'), + 'notinvb' => [0x22F7].pack('U'), + 'notinvc' => [0x22F6].pack('U'), + 'NotLeftTriangle' => [0x22EA].pack('U'), + 'NotLeftTriangleBar' => [0x29CF, 0x338].pack('U*'), + 'NotLeftTriangleEqual' => [0x22EC].pack('U'), + 'NotLess' => [0x226E].pack('U'), + 'NotLessEqual' => [0x2270].pack('U'), + 'NotLessGreater' => [0x2278].pack('U'), + 'NotLessLess' => [0x226A, 0x338].pack('U*'), + 'NotLessSlantEqual' => [0x2A7D, 0x338].pack('U*'), + 'NotLessTilde' => [0x2274].pack('U'), + 'NotNestedGreaterGreater' => [0x2AA2, 0x338].pack('U*'), + 'NotNestedLessLess' => [0x2AA1, 0x338].pack('U*'), + 'notni' => [0x220C].pack('U'), + 'notniva' => [0x220C].pack('U'), + 'notnivb' => [0x22FE].pack('U'), + 'notnivc' => [0x22FD].pack('U'), + 'NotPrecedes' => [0x2280].pack('U'), + 'NotPrecedesEqual' => [0x2AAF, 0x338].pack('U*'), + 'NotPrecedesSlantEqual' => [0x22E0].pack('U'), + 'NotReverseElement' => [0x220C].pack('U'), + 'NotRightTriangle' => [0x22EB].pack('U'), + 'NotRightTriangleBar' => [0x29D0, 0x338].pack('U*'), + 'NotRightTriangleEqual' => [0x22ED].pack('U'), + 'NotSquareSubset' => [0x228F, 0x338].pack('U*'), + 'NotSquareSubsetEqual' => [0x22E2].pack('U'), + 'NotSquareSuperset' => [0x2290, 0x338].pack('U*'), + 'NotSquareSupersetEqual' => [0x22E3].pack('U'), + 'NotSubset' => [0x2282, 0x20D2].pack('U*'), + 'NotSubsetEqual' => [0x2288].pack('U'), + 'NotSucceeds' => [0x2281].pack('U'), + 'NotSucceedsEqual' => [0x2AB0, 0x338].pack('U*'), + 'NotSucceedsSlantEqual' => [0x22E1].pack('U'), + 'NotSucceedsTilde' => [0x227F, 0x338].pack('U*'), + 'NotSuperset' => [0x2283, 0x20D2].pack('U*'), + 'NotSupersetEqual' => [0x2289].pack('U'), + 'NotTilde' => [0x2241].pack('U'), + 'NotTildeEqual' => [0x2244].pack('U'), + 'NotTildeFullEqual' => [0x2247].pack('U'), + 'NotTildeTilde' => [0x2249].pack('U'), + 'NotVerticalBar' => [0x2224].pack('U'), + 'npar' => [0x2226].pack('U'), + 'nparallel' => [0x2226].pack('U'), + 'nparsl' => [0x2AFD, 0x20E5].pack('U*'), + 'npart' => [0x2202, 0x338].pack('U*'), + 'npolint' => [0x2A14].pack('U'), + 'npr' => [0x2280].pack('U'), + 'nprcue' => [0x22E0].pack('U'), + 'npre' => [0x2AAF, 0x338].pack('U*'), + 'nprec' => [0x2280].pack('U'), + 'npreceq' => [0x2AAF, 0x338].pack('U*'), + 'nrarr' => [0x219B].pack('U'), + 'nrArr' => [0x21CF].pack('U'), + 'nrarrc' => [0x2933, 0x338].pack('U*'), + 'nrarrw' => [0x219D, 0x338].pack('U*'), + 'nrightarrow' => [0x219B].pack('U'), + 'nRightarrow' => [0x21CF].pack('U'), + 'nrtri' => [0x22EB].pack('U'), + 'nrtrie' => [0x22ED].pack('U'), + 'nsc' => [0x2281].pack('U'), + 'nsccue' => [0x22E1].pack('U'), + 'nsce' => [0x2AB0, 0x338].pack('U*'), + 'nscr' => [0x1D4C3].pack('U'), + 'Nscr' => [0x1D4A9].pack('U'), + 'nshortmid' => [0x2224].pack('U'), + 'nshortparallel' => [0x2226].pack('U'), + 'nsim' => [0x2241].pack('U'), + 'nsime' => [0x2244].pack('U'), + 'nsimeq' => [0x2244].pack('U'), + 'nsmid' => [0x2224].pack('U'), + 'nspar' => [0x2226].pack('U'), + 'nsqsube' => [0x22E2].pack('U'), + 'nsqsupe' => [0x22E3].pack('U'), + 'nsub' => [0x2284].pack('U'), + 'nsube' => [0x2288].pack('U'), + 'nsubE' => [0x2AC5, 0x338].pack('U*'), + 'nsubset' => [0x2282, 0x20D2].pack('U*'), + 'nsubseteq' => [0x2288].pack('U'), + 'nsubseteqq' => [0x2AC5, 0x338].pack('U*'), + 'nsucc' => [0x2281].pack('U'), + 'nsucceq' => [0x2AB0, 0x338].pack('U*'), + 'nsup' => [0x2285].pack('U'), + 'nsupE' => [0x2AC6, 0x338].pack('U*'), + 'nsupe' => [0x2289].pack('U'), + 'nsupset' => [0x2283, 0x20D2].pack('U*'), + 'nsupseteq' => [0x2289].pack('U'), + 'nsupseteqq' => [0x2AC6, 0x338].pack('U*'), + 'ntgl' => [0x2279].pack('U'), + 'ntilde' => [0xF1].pack('U'), + 'Ntilde' => [0xD1].pack('U'), + 'ntlg' => [0x2278].pack('U'), + 'ntriangleleft' => [0x22EA].pack('U'), + 'ntrianglelefteq' => [0x22EC].pack('U'), + 'ntriangleright' => [0x22EB].pack('U'), + 'ntrianglerighteq' => [0x22ED].pack('U'), + 'nu' => [0x3BD].pack('U'), + 'Nu' => [0x39D].pack('U'), + 'num' => [0x23].pack('U'), + 'numero' => [0x2116].pack('U'), + 'numsp' => [0x2007].pack('U'), + 'nvap' => [0x224D, 0x20D2].pack('U*'), + 'nVDash' => [0x22AF].pack('U'), + 'nvdash' => [0x22AC].pack('U'), + 'nvDash' => [0x22AD].pack('U'), + 'nVdash' => [0x22AE].pack('U'), + 'nvge' => [0x2265, 0x20D2].pack('U*'), + 'nvgt' => [0x3E, 0x20D2].pack('U*'), + 'nvHarr' => [0x2904].pack('U'), + 'nvinfin' => [0x29DE].pack('U'), + 'nvlArr' => [0x2902].pack('U'), + 'nvle' => [0x2264, 0x20D2].pack('U*'), + 'nvlt' => [0x3C, 0x20D2].pack('U*'), + 'nvltrie' => [0x22B4, 0x20D2].pack('U*'), + 'nvrArr' => [0x2903].pack('U'), + 'nvrtrie' => [0x22B5, 0x20D2].pack('U*'), + 'nvsim' => [0x223C, 0x20D2].pack('U*'), + 'nwarhk' => [0x2923].pack('U'), + 'nwarr' => [0x2196].pack('U'), + 'nwArr' => [0x21D6].pack('U'), + 'nwarrow' => [0x2196].pack('U'), + 'nwnear' => [0x2927].pack('U'), + 'Oacute' => [0xD3].pack('U'), + 'oacute' => [0xF3].pack('U'), + 'oast' => [0x229B].pack('U'), + 'ocir' => [0x229A].pack('U'), + 'Ocirc' => [0xD4].pack('U'), + 'ocirc' => [0xF4].pack('U'), + 'Ocy' => [0x41E].pack('U'), + 'ocy' => [0x43E].pack('U'), + 'odash' => [0x229D].pack('U'), + 'odblac' => [0x151].pack('U'), + 'Odblac' => [0x150].pack('U'), + 'odiv' => [0x2A38].pack('U'), + 'odot' => [0x2299].pack('U'), + 'odsold' => [0x29BC].pack('U'), + 'oelig' => [0x153].pack('U'), + 'OElig' => [0x152].pack('U'), + 'ofcir' => [0x29BF].pack('U'), + 'Ofr' => [0x1D512].pack('U'), + 'ofr' => [0x1D52C].pack('U'), + 'ogon' => [0x2DB].pack('U'), + 'Ograve' => [0xD2].pack('U'), + 'ograve' => [0xF2].pack('U'), + 'ogt' => [0x29C1].pack('U'), + 'ohbar' => [0x29B5].pack('U'), + 'ohm' => [0x3A9].pack('U'), + 'oint' => [0x222E].pack('U'), + 'olarr' => [0x21BA].pack('U'), + 'olcir' => [0x29BE].pack('U'), + 'olcross' => [0x29BB].pack('U'), + 'oline' => [0x203E].pack('U'), + 'olt' => [0x29C0].pack('U'), + 'omacr' => [0x14D].pack('U'), + 'Omacr' => [0x14C].pack('U'), + 'Omega' => [0x3A9].pack('U'), + 'omega' => [0x3C9].pack('U'), + 'omicron' => [0x3BF].pack('U'), + 'Omicron' => [0x39F].pack('U'), + 'omid' => [0x29B6].pack('U'), + 'ominus' => [0x2296].pack('U'), + 'Oopf' => [0x1D546].pack('U'), + 'oopf' => [0x1D560].pack('U'), + 'opar' => [0x29B7].pack('U'), + 'OpenCurlyDoubleQuote' => [0x201C].pack('U'), + 'OpenCurlyQuote' => [0x2018].pack('U'), + 'operp' => [0x29B9].pack('U'), + 'oplus' => [0x2295].pack('U'), + 'or' => [0x2228].pack('U'), + 'Or' => [0x2A54].pack('U'), + 'orarr' => [0x21BB].pack('U'), + 'ord' => [0x2A5D].pack('U'), + 'order' => [0x2134].pack('U'), + 'orderof' => [0x2134].pack('U'), + 'ordf' => [0xAA].pack('U'), + 'ordm' => [0xBA].pack('U'), + 'origof' => [0x22B6].pack('U'), + 'oror' => [0x2A56].pack('U'), + 'orslope' => [0x2A57].pack('U'), + 'orv' => [0x2A5B].pack('U'), + 'oS' => [0x24C8].pack('U'), + 'Oscr' => [0x1D4AA].pack('U'), + 'oscr' => [0x2134].pack('U'), + 'Oslash' => [0xD8].pack('U'), + 'oslash' => [0xF8].pack('U'), + 'osol' => [0x2298].pack('U'), + 'Otilde' => [0xD5].pack('U'), + 'otilde' => [0xF5].pack('U'), + 'otimes' => [0x2297].pack('U'), + 'Otimes' => [0x2A37].pack('U'), + 'otimesas' => [0x2A36].pack('U'), + 'Ouml' => [0xD6].pack('U'), + 'ouml' => [0xF6].pack('U'), + 'ovbar' => [0x233D].pack('U'), + 'OverBar' => [0x203E].pack('U'), + 'OverBrace' => [0x23DE].pack('U'), + 'OverBracket' => [0x23B4].pack('U'), + 'OverParenthesis' => [0x23DC].pack('U'), + 'par' => [0x2225].pack('U'), + 'para' => [0xB6].pack('U'), + 'parallel' => [0x2225].pack('U'), + 'parsim' => [0x2AF3].pack('U'), + 'parsl' => [0x2AFD].pack('U'), + 'part' => [0x2202].pack('U'), + 'PartialD' => [0x2202].pack('U'), + 'Pcy' => [0x41F].pack('U'), + 'pcy' => [0x43F].pack('U'), + 'percnt' => [0x25].pack('U'), + 'period' => [0x2E].pack('U'), + 'permil' => [0x2030].pack('U'), + 'perp' => [0x22A5].pack('U'), + 'pertenk' => [0x2031].pack('U'), + 'Pfr' => [0x1D513].pack('U'), + 'pfr' => [0x1D52D].pack('U'), + 'Phi' => [0x3A6].pack('U'), + 'phi' => [0x3C6].pack('U'), + 'phiv' => [0x3D5].pack('U'), + 'phmmat' => [0x2133].pack('U'), + 'phone' => [0x260E].pack('U'), + 'pi' => [0x3C0].pack('U'), + 'Pi' => [0x3A0].pack('U'), + 'pitchfork' => [0x22D4].pack('U'), + 'piv' => [0x3D6].pack('U'), + 'planck' => [0x210F].pack('U'), + 'planckh' => [0x210E].pack('U'), + 'plankv' => [0x210F].pack('U'), + 'plus' => [0x2B].pack('U'), + 'plusacir' => [0x2A23].pack('U'), + 'plusb' => [0x229E].pack('U'), + 'pluscir' => [0x2A22].pack('U'), + 'plusdo' => [0x2214].pack('U'), + 'plusdu' => [0x2A25].pack('U'), + 'pluse' => [0x2A72].pack('U'), + 'PlusMinus' => [0xB1].pack('U'), + 'plusmn' => [0xB1].pack('U'), + 'plussim' => [0x2A26].pack('U'), + 'plustwo' => [0x2A27].pack('U'), + 'pm' => [0xB1].pack('U'), + 'Poincareplane' => [0x210C].pack('U'), + 'pointint' => [0x2A15].pack('U'), + 'popf' => [0x1D561].pack('U'), + 'Popf' => [0x2119].pack('U'), + 'pound' => [0xA3].pack('U'), + 'pr' => [0x227A].pack('U'), + 'Pr' => [0x2ABB].pack('U'), + 'prap' => [0x2AB7].pack('U'), + 'prcue' => [0x227C].pack('U'), + 'prE' => [0x2AB3].pack('U'), + 'pre' => [0x2AAF].pack('U'), + 'prec' => [0x227A].pack('U'), + 'precapprox' => [0x2AB7].pack('U'), + 'preccurlyeq' => [0x227C].pack('U'), + 'Precedes' => [0x227A].pack('U'), + 'PrecedesEqual' => [0x2AAF].pack('U'), + 'PrecedesSlantEqual' => [0x227C].pack('U'), + 'PrecedesTilde' => [0x227E].pack('U'), + 'preceq' => [0x2AAF].pack('U'), + 'precnapprox' => [0x2AB9].pack('U'), + 'precneqq' => [0x2AB5].pack('U'), + 'precnsim' => [0x22E8].pack('U'), + 'precsim' => [0x227E].pack('U'), + 'Prime' => [0x2033].pack('U'), + 'prime' => [0x2032].pack('U'), + 'primes' => [0x2119].pack('U'), + 'prnap' => [0x2AB9].pack('U'), + 'prnE' => [0x2AB5].pack('U'), + 'prnsim' => [0x22E8].pack('U'), + 'prod' => [0x220F].pack('U'), + 'Product' => [0x220F].pack('U'), + 'profalar' => [0x232E].pack('U'), + 'profline' => [0x2312].pack('U'), + 'profsurf' => [0x2313].pack('U'), + 'prop' => [0x221D].pack('U'), + 'Proportion' => [0x2237].pack('U'), + 'Proportional' => [0x221D].pack('U'), + 'propto' => [0x221D].pack('U'), + 'prsim' => [0x227E].pack('U'), + 'prurel' => [0x22B0].pack('U'), + 'Pscr' => [0x1D4AB].pack('U'), + 'pscr' => [0x1D4C5].pack('U'), + 'psi' => [0x3C8].pack('U'), + 'Psi' => [0x3A8].pack('U'), + 'puncsp' => [0x2008].pack('U'), + 'Qfr' => [0x1D514].pack('U'), + 'qfr' => [0x1D52E].pack('U'), + 'qint' => [0x2A0C].pack('U'), + 'Qopf' => [0x211A].pack('U'), + 'qopf' => [0x1D562].pack('U'), + 'qprime' => [0x2057].pack('U'), + 'qscr' => [0x1D4C6].pack('U'), + 'Qscr' => [0x1D4AC].pack('U'), + 'quaternions' => [0x210D].pack('U'), + 'quatint' => [0x2A16].pack('U'), + 'quest' => [0x3F].pack('U'), + 'questeq' => [0x225F].pack('U'), + 'quot' => [0x22].pack('U'), + 'QUOT' => [0x22].pack('U'), + 'rAarr' => [0x21DB].pack('U'), + 'race' => [0x223D, 0x331].pack('U*'), + 'racute' => [0x155].pack('U'), + 'Racute' => [0x154].pack('U'), + 'radic' => [0x221A].pack('U'), + 'raemptyv' => [0x29B3].pack('U'), + 'Rang' => [0x27EB].pack('U'), + 'rang' => [0x27E9].pack('U'), + 'rangd' => [0x2992].pack('U'), + 'range' => [0x29A5].pack('U'), + 'rangle' => [0x27E9].pack('U'), + 'raquo' => [0xBB].pack('U'), + 'Rarr' => [0x21A0].pack('U'), + 'rarr' => [0x2192].pack('U'), + 'rArr' => [0x21D2].pack('U'), + 'rarrap' => [0x2975].pack('U'), + 'rarrb' => [0x21E5].pack('U'), + 'rarrbfs' => [0x2920].pack('U'), + 'rarrc' => [0x2933].pack('U'), + 'rarrfs' => [0x291E].pack('U'), + 'rarrhk' => [0x21AA].pack('U'), + 'rarrlp' => [0x21AC].pack('U'), + 'rarrpl' => [0x2945].pack('U'), + 'rarrsim' => [0x2974].pack('U'), + 'Rarrtl' => [0x2916].pack('U'), + 'rarrtl' => [0x21A3].pack('U'), + 'rarrw' => [0x219D].pack('U'), + 'ratail' => [0x291A].pack('U'), + 'rAtail' => [0x291C].pack('U'), + 'ratio' => [0x2236].pack('U'), + 'rationals' => [0x211A].pack('U'), + 'rBarr' => [0x290F].pack('U'), + 'RBarr' => [0x2910].pack('U'), + 'rbarr' => [0x290D].pack('U'), + 'rbbrk' => [0x2773].pack('U'), + 'rbrace' => [0x7D].pack('U'), + 'rbrack' => [0x5D].pack('U'), + 'rbrke' => [0x298C].pack('U'), + 'rbrksld' => [0x298E].pack('U'), + 'rbrkslu' => [0x2990].pack('U'), + 'Rcaron' => [0x158].pack('U'), + 'rcaron' => [0x159].pack('U'), + 'Rcedil' => [0x156].pack('U'), + 'rcedil' => [0x157].pack('U'), + 'rceil' => [0x2309].pack('U'), + 'rcub' => [0x7D].pack('U'), + 'Rcy' => [0x420].pack('U'), + 'rcy' => [0x440].pack('U'), + 'rdca' => [0x2937].pack('U'), + 'rdldhar' => [0x2969].pack('U'), + 'rdquo' => [0x201D].pack('U'), + 'rdquor' => [0x201D].pack('U'), + 'rdsh' => [0x21B3].pack('U'), + 'Re' => [0x211C].pack('U'), + 'real' => [0x211C].pack('U'), + 'realine' => [0x211B].pack('U'), + 'realpart' => [0x211C].pack('U'), + 'reals' => [0x211D].pack('U'), + 'rect' => [0x25AD].pack('U'), + 'REG' => [0xAE].pack('U'), + 'reg' => [0xAE].pack('U'), + 'ReverseElement' => [0x220B].pack('U'), + 'ReverseEquilibrium' => [0x21CB].pack('U'), + 'ReverseUpEquilibrium' => [0x296F].pack('U'), + 'rfisht' => [0x297D].pack('U'), + 'rfloor' => [0x230B].pack('U'), + 'rfr' => [0x1D52F].pack('U'), + 'Rfr' => [0x211C].pack('U'), + 'rHar' => [0x2964].pack('U'), + 'rhard' => [0x21C1].pack('U'), + 'rharu' => [0x21C0].pack('U'), + 'rharul' => [0x296C].pack('U'), + 'Rho' => [0x3A1].pack('U'), + 'rho' => [0x3C1].pack('U'), + 'rhov' => [0x3F1].pack('U'), + 'RightAngleBracket' => [0x27E9].pack('U'), + 'rightarrow' => [0x2192].pack('U'), + 'RightArrow' => [0x2192].pack('U'), + 'Rightarrow' => [0x21D2].pack('U'), + 'RightArrowBar' => [0x21E5].pack('U'), + 'RightArrowLeftArrow' => [0x21C4].pack('U'), + 'rightarrowtail' => [0x21A3].pack('U'), + 'RightCeiling' => [0x2309].pack('U'), + 'RightDoubleBracket' => [0x27E7].pack('U'), + 'RightDownTeeVector' => [0x295D].pack('U'), + 'RightDownVector' => [0x21C2].pack('U'), + 'RightDownVectorBar' => [0x2955].pack('U'), + 'RightFloor' => [0x230B].pack('U'), + 'rightharpoondown' => [0x21C1].pack('U'), + 'rightharpoonup' => [0x21C0].pack('U'), + 'rightleftarrows' => [0x21C4].pack('U'), + 'rightleftharpoons' => [0x21CC].pack('U'), + 'rightrightarrows' => [0x21C9].pack('U'), + 'rightsquigarrow' => [0x219D].pack('U'), + 'RightTee' => [0x22A2].pack('U'), + 'RightTeeArrow' => [0x21A6].pack('U'), + 'RightTeeVector' => [0x295B].pack('U'), + 'rightthreetimes' => [0x22CC].pack('U'), + 'RightTriangle' => [0x22B3].pack('U'), + 'RightTriangleBar' => [0x29D0].pack('U'), + 'RightTriangleEqual' => [0x22B5].pack('U'), + 'RightUpDownVector' => [0x294F].pack('U'), + 'RightUpTeeVector' => [0x295C].pack('U'), + 'RightUpVector' => [0x21BE].pack('U'), + 'RightUpVectorBar' => [0x2954].pack('U'), + 'RightVector' => [0x21C0].pack('U'), + 'RightVectorBar' => [0x2953].pack('U'), + 'ring' => [0x2DA].pack('U'), + 'risingdotseq' => [0x2253].pack('U'), + 'rlarr' => [0x21C4].pack('U'), + 'rlhar' => [0x21CC].pack('U'), + 'rlm' => [0x200F].pack('U'), + 'rmoust' => [0x23B1].pack('U'), + 'rmoustache' => [0x23B1].pack('U'), + 'rnmid' => [0x2AEE].pack('U'), + 'roang' => [0x27ED].pack('U'), + 'roarr' => [0x21FE].pack('U'), + 'robrk' => [0x27E7].pack('U'), + 'ropar' => [0x2986].pack('U'), + 'ropf' => [0x1D563].pack('U'), + 'Ropf' => [0x211D].pack('U'), + 'roplus' => [0x2A2E].pack('U'), + 'rotimes' => [0x2A35].pack('U'), + 'RoundImplies' => [0x2970].pack('U'), + 'rpar' => [0x29].pack('U'), + 'rpargt' => [0x2994].pack('U'), + 'rppolint' => [0x2A12].pack('U'), + 'rrarr' => [0x21C9].pack('U'), + 'Rrightarrow' => [0x21DB].pack('U'), + 'rsaquo' => [0x203A].pack('U'), + 'Rscr' => [0x211B].pack('U'), + 'rscr' => [0x1D4C7].pack('U'), + 'Rsh' => [0x21B1].pack('U'), + 'rsh' => [0x21B1].pack('U'), + 'rsqb' => [0x5D].pack('U'), + 'rsquo' => [0x2019].pack('U'), + 'rsquor' => [0x2019].pack('U'), + 'rthree' => [0x22CC].pack('U'), + 'rtimes' => [0x22CA].pack('U'), + 'rtri' => [0x25B9].pack('U'), + 'rtrie' => [0x22B5].pack('U'), + 'rtrif' => [0x25B8].pack('U'), + 'rtriltri' => [0x29CE].pack('U'), + 'RuleDelayed' => [0x29F4].pack('U'), + 'ruluhar' => [0x2968].pack('U'), + 'rx' => [0x211E].pack('U'), + 'sacute' => [0x15B].pack('U'), + 'Sacute' => [0x15A].pack('U'), + 'sbquo' => [0x201A].pack('U'), + 'Sc' => [0x2ABC].pack('U'), + 'sc' => [0x227B].pack('U'), + 'scap' => [0x2AB8].pack('U'), + 'Scaron' => [0x160].pack('U'), + 'scaron' => [0x161].pack('U'), + 'sccue' => [0x227D].pack('U'), + 'scE' => [0x2AB4].pack('U'), + 'sce' => [0x2AB0].pack('U'), + 'Scedil' => [0x15E].pack('U'), + 'scedil' => [0x15F].pack('U'), + 'scirc' => [0x15D].pack('U'), + 'Scirc' => [0x15C].pack('U'), + 'scnap' => [0x2ABA].pack('U'), + 'scnE' => [0x2AB6].pack('U'), + 'scnsim' => [0x22E9].pack('U'), + 'scpolint' => [0x2A13].pack('U'), + 'scsim' => [0x227F].pack('U'), + 'Scy' => [0x421].pack('U'), + 'scy' => [0x441].pack('U'), + 'sdot' => [0x22C5].pack('U'), + 'sdotb' => [0x22A1].pack('U'), + 'sdote' => [0x2A66].pack('U'), + 'searhk' => [0x2925].pack('U'), + 'searr' => [0x2198].pack('U'), + 'seArr' => [0x21D8].pack('U'), + 'searrow' => [0x2198].pack('U'), + 'sect' => [0xA7].pack('U'), + 'semi' => [0x3B].pack('U'), + 'seswar' => [0x2929].pack('U'), + 'setminus' => [0x2216].pack('U'), + 'setmn' => [0x2216].pack('U'), + 'sext' => [0x2736].pack('U'), + 'sfr' => [0x1D530].pack('U'), + 'Sfr' => [0x1D516].pack('U'), + 'sfrown' => [0x2322].pack('U'), + 'sharp' => [0x266F].pack('U'), + 'SHCHcy' => [0x429].pack('U'), + 'shchcy' => [0x449].pack('U'), + 'SHcy' => [0x428].pack('U'), + 'shcy' => [0x448].pack('U'), + 'ShortDownArrow' => [0x2193].pack('U'), + 'ShortLeftArrow' => [0x2190].pack('U'), + 'shortmid' => [0x2223].pack('U'), + 'shortparallel' => [0x2225].pack('U'), + 'ShortRightArrow' => [0x2192].pack('U'), + 'ShortUpArrow' => [0x2191].pack('U'), + 'shy' => [0xAD].pack('U'), + 'Sigma' => [0x3A3].pack('U'), + 'sigma' => [0x3C3].pack('U'), + 'sigmaf' => [0x3C2].pack('U'), + 'sigmav' => [0x3C2].pack('U'), + 'sim' => [0x223C].pack('U'), + 'simdot' => [0x2A6A].pack('U'), + 'sime' => [0x2243].pack('U'), + 'simeq' => [0x2243].pack('U'), + 'simg' => [0x2A9E].pack('U'), + 'simgE' => [0x2AA0].pack('U'), + 'siml' => [0x2A9D].pack('U'), + 'simlE' => [0x2A9F].pack('U'), + 'simne' => [0x2246].pack('U'), + 'simplus' => [0x2A24].pack('U'), + 'simrarr' => [0x2972].pack('U'), + 'slarr' => [0x2190].pack('U'), + 'SmallCircle' => [0x2218].pack('U'), + 'smallsetminus' => [0x2216].pack('U'), + 'smashp' => [0x2A33].pack('U'), + 'smeparsl' => [0x29E4].pack('U'), + 'smid' => [0x2223].pack('U'), + 'smile' => [0x2323].pack('U'), + 'smt' => [0x2AAA].pack('U'), + 'smte' => [0x2AAC].pack('U'), + 'smtes' => [0x2AAC, 0xFE00].pack('U*'), + 'SOFTcy' => [0x42C].pack('U'), + 'softcy' => [0x44C].pack('U'), + 'sol' => [0x2F].pack('U'), + 'solb' => [0x29C4].pack('U'), + 'solbar' => [0x233F].pack('U'), + 'sopf' => [0x1D564].pack('U'), + 'Sopf' => [0x1D54A].pack('U'), + 'spades' => [0x2660].pack('U'), + 'spadesuit' => [0x2660].pack('U'), + 'spar' => [0x2225].pack('U'), + 'sqcap' => [0x2293].pack('U'), + 'sqcaps' => [0x2293, 0xFE00].pack('U*'), + 'sqcup' => [0x2294].pack('U'), + 'sqcups' => [0x2294, 0xFE00].pack('U*'), + 'Sqrt' => [0x221A].pack('U'), + 'sqsub' => [0x228F].pack('U'), + 'sqsube' => [0x2291].pack('U'), + 'sqsubset' => [0x228F].pack('U'), + 'sqsubseteq' => [0x2291].pack('U'), + 'sqsup' => [0x2290].pack('U'), + 'sqsupe' => [0x2292].pack('U'), + 'sqsupset' => [0x2290].pack('U'), + 'sqsupseteq' => [0x2292].pack('U'), + 'squ' => [0x25A1].pack('U'), + 'Square' => [0x25A1].pack('U'), + 'square' => [0x25A1].pack('U'), + 'SquareIntersection' => [0x2293].pack('U'), + 'SquareSubset' => [0x228F].pack('U'), + 'SquareSubsetEqual' => [0x2291].pack('U'), + 'SquareSuperset' => [0x2290].pack('U'), + 'SquareSupersetEqual' => [0x2292].pack('U'), + 'SquareUnion' => [0x2294].pack('U'), + 'squarf' => [0x25AA].pack('U'), + 'squf' => [0x25AA].pack('U'), + 'srarr' => [0x2192].pack('U'), + 'sscr' => [0x1D4C8].pack('U'), + 'Sscr' => [0x1D4AE].pack('U'), + 'ssetmn' => [0x2216].pack('U'), + 'ssmile' => [0x2323].pack('U'), + 'sstarf' => [0x22C6].pack('U'), + 'star' => [0x2606].pack('U'), + 'Star' => [0x22C6].pack('U'), + 'starf' => [0x2605].pack('U'), + 'straightepsilon' => [0x3F5].pack('U'), + 'straightphi' => [0x3D5].pack('U'), + 'strns' => [0xAF].pack('U'), + 'Sub' => [0x22D0].pack('U'), + 'sub' => [0x2282].pack('U'), + 'subdot' => [0x2ABD].pack('U'), + 'subE' => [0x2AC5].pack('U'), + 'sube' => [0x2286].pack('U'), + 'subedot' => [0x2AC3].pack('U'), + 'submult' => [0x2AC1].pack('U'), + 'subne' => [0x228A].pack('U'), + 'subnE' => [0x2ACB].pack('U'), + 'subplus' => [0x2ABF].pack('U'), + 'subrarr' => [0x2979].pack('U'), + 'Subset' => [0x22D0].pack('U'), + 'subset' => [0x2282].pack('U'), + 'subseteq' => [0x2286].pack('U'), + 'subseteqq' => [0x2AC5].pack('U'), + 'SubsetEqual' => [0x2286].pack('U'), + 'subsetneq' => [0x228A].pack('U'), + 'subsetneqq' => [0x2ACB].pack('U'), + 'subsim' => [0x2AC7].pack('U'), + 'subsub' => [0x2AD5].pack('U'), + 'subsup' => [0x2AD3].pack('U'), + 'succ' => [0x227B].pack('U'), + 'succapprox' => [0x2AB8].pack('U'), + 'succcurlyeq' => [0x227D].pack('U'), + 'Succeeds' => [0x227B].pack('U'), + 'SucceedsEqual' => [0x2AB0].pack('U'), + 'SucceedsSlantEqual' => [0x227D].pack('U'), + 'SucceedsTilde' => [0x227F].pack('U'), + 'succeq' => [0x2AB0].pack('U'), + 'succnapprox' => [0x2ABA].pack('U'), + 'succneqq' => [0x2AB6].pack('U'), + 'succnsim' => [0x22E9].pack('U'), + 'succsim' => [0x227F].pack('U'), + 'SuchThat' => [0x220B].pack('U'), + 'Sum' => [0x2211].pack('U'), + 'sum' => [0x2211].pack('U'), + 'sung' => [0x266A].pack('U'), + 'sup' => [0x2283].pack('U'), + 'Sup' => [0x22D1].pack('U'), + 'sup1' => [0xB9].pack('U'), + 'sup2' => [0xB2].pack('U'), + 'sup3' => [0xB3].pack('U'), + 'supdot' => [0x2ABE].pack('U'), + 'supdsub' => [0x2AD8].pack('U'), + 'supE' => [0x2AC6].pack('U'), + 'supe' => [0x2287].pack('U'), + 'supedot' => [0x2AC4].pack('U'), + 'Superset' => [0x2283].pack('U'), + 'SupersetEqual' => [0x2287].pack('U'), + 'suphsol' => [0x27C9].pack('U'), + 'suphsub' => [0x2AD7].pack('U'), + 'suplarr' => [0x297B].pack('U'), + 'supmult' => [0x2AC2].pack('U'), + 'supnE' => [0x2ACC].pack('U'), + 'supne' => [0x228B].pack('U'), + 'supplus' => [0x2AC0].pack('U'), + 'supset' => [0x2283].pack('U'), + 'Supset' => [0x22D1].pack('U'), + 'supseteq' => [0x2287].pack('U'), + 'supseteqq' => [0x2AC6].pack('U'), + 'supsetneq' => [0x228B].pack('U'), + 'supsetneqq' => [0x2ACC].pack('U'), + 'supsim' => [0x2AC8].pack('U'), + 'supsub' => [0x2AD4].pack('U'), + 'supsup' => [0x2AD6].pack('U'), + 'swarhk' => [0x2926].pack('U'), + 'swarr' => [0x2199].pack('U'), + 'swArr' => [0x21D9].pack('U'), + 'swarrow' => [0x2199].pack('U'), + 'swnwar' => [0x292A].pack('U'), + 'szlig' => [0xDF].pack('U'), + 'Tab' => [0x9].pack('U'), + 'target' => [0x2316].pack('U'), + 'Tau' => [0x3A4].pack('U'), + 'tau' => [0x3C4].pack('U'), + 'tbrk' => [0x23B4].pack('U'), + 'Tcaron' => [0x164].pack('U'), + 'tcaron' => [0x165].pack('U'), + 'Tcedil' => [0x162].pack('U'), + 'tcedil' => [0x163].pack('U'), + 'Tcy' => [0x422].pack('U'), + 'tcy' => [0x442].pack('U'), + 'tdot' => [0x20DB].pack('U'), + 'telrec' => [0x2315].pack('U'), + 'Tfr' => [0x1D517].pack('U'), + 'tfr' => [0x1D531].pack('U'), + 'there4' => [0x2234].pack('U'), + 'therefore' => [0x2234].pack('U'), + 'Therefore' => [0x2234].pack('U'), + 'Theta' => [0x398].pack('U'), + 'theta' => [0x3B8].pack('U'), + 'thetasym' => [0x3D1].pack('U'), + 'thetav' => [0x3D1].pack('U'), + 'thickapprox' => [0x2248].pack('U'), + 'thicksim' => [0x223C].pack('U'), + 'ThickSpace' => [0x205F, 0x200A].pack('U*'), + 'thinsp' => [0x2009].pack('U'), + 'ThinSpace' => [0x2009].pack('U'), + 'thkap' => [0x2248].pack('U'), + 'thksim' => [0x223C].pack('U'), + 'THORN' => [0xDE].pack('U'), + 'thorn' => [0xFE].pack('U'), + 'tilde' => [0x2DC].pack('U'), + 'Tilde' => [0x223C].pack('U'), + 'TildeEqual' => [0x2243].pack('U'), + 'TildeFullEqual' => [0x2245].pack('U'), + 'TildeTilde' => [0x2248].pack('U'), + 'times' => [0xD7].pack('U'), + 'timesb' => [0x22A0].pack('U'), + 'timesbar' => [0x2A31].pack('U'), + 'timesd' => [0x2A30].pack('U'), + 'tint' => [0x222D].pack('U'), + 'toea' => [0x2928].pack('U'), + 'top' => [0x22A4].pack('U'), + 'topbot' => [0x2336].pack('U'), + 'topcir' => [0x2AF1].pack('U'), + 'Topf' => [0x1D54B].pack('U'), + 'topf' => [0x1D565].pack('U'), + 'topfork' => [0x2ADA].pack('U'), + 'tosa' => [0x2929].pack('U'), + 'tprime' => [0x2034].pack('U'), + 'TRADE' => [0x2122].pack('U'), + 'trade' => [0x2122].pack('U'), + 'triangle' => [0x25B5].pack('U'), + 'triangledown' => [0x25BF].pack('U'), + 'triangleleft' => [0x25C3].pack('U'), + 'trianglelefteq' => [0x22B4].pack('U'), + 'triangleq' => [0x225C].pack('U'), + 'triangleright' => [0x25B9].pack('U'), + 'trianglerighteq' => [0x22B5].pack('U'), + 'tridot' => [0x25EC].pack('U'), + 'trie' => [0x225C].pack('U'), + 'triminus' => [0x2A3A].pack('U'), + 'TripleDot' => [0x20DB].pack('U'), + 'triplus' => [0x2A39].pack('U'), + 'trisb' => [0x29CD].pack('U'), + 'tritime' => [0x2A3B].pack('U'), + 'trpezium' => [0x23E2].pack('U'), + 'Tscr' => [0x1D4AF].pack('U'), + 'tscr' => [0x1D4C9].pack('U'), + 'tscy' => [0x446].pack('U'), + 'TScy' => [0x426].pack('U'), + 'TSHcy' => [0x40B].pack('U'), + 'tshcy' => [0x45B].pack('U'), + 'Tstrok' => [0x166].pack('U'), + 'tstrok' => [0x167].pack('U'), + 'twixt' => [0x226C].pack('U'), + 'twoheadleftarrow' => [0x219E].pack('U'), + 'twoheadrightarrow' => [0x21A0].pack('U'), + 'uacute' => [0xFA].pack('U'), + 'Uacute' => [0xDA].pack('U'), + 'Uarr' => [0x219F].pack('U'), + 'uarr' => [0x2191].pack('U'), + 'uArr' => [0x21D1].pack('U'), + 'Uarrocir' => [0x2949].pack('U'), + 'Ubrcy' => [0x40E].pack('U'), + 'ubrcy' => [0x45E].pack('U'), + 'Ubreve' => [0x16C].pack('U'), + 'ubreve' => [0x16D].pack('U'), + 'Ucirc' => [0xDB].pack('U'), + 'ucirc' => [0xFB].pack('U'), + 'ucy' => [0x443].pack('U'), + 'Ucy' => [0x423].pack('U'), + 'udarr' => [0x21C5].pack('U'), + 'udblac' => [0x171].pack('U'), + 'Udblac' => [0x170].pack('U'), + 'udhar' => [0x296E].pack('U'), + 'ufisht' => [0x297E].pack('U'), + 'ufr' => [0x1D532].pack('U'), + 'Ufr' => [0x1D518].pack('U'), + 'ugrave' => [0xF9].pack('U'), + 'Ugrave' => [0xD9].pack('U'), + 'uHar' => [0x2963].pack('U'), + 'uharl' => [0x21BF].pack('U'), + 'uharr' => [0x21BE].pack('U'), + 'uhblk' => [0x2580].pack('U'), + 'ulcorn' => [0x231C].pack('U'), + 'ulcorner' => [0x231C].pack('U'), + 'ulcrop' => [0x230F].pack('U'), + 'ultri' => [0x25F8].pack('U'), + 'umacr' => [0x16B].pack('U'), + 'Umacr' => [0x16A].pack('U'), + 'uml' => [0xA8].pack('U'), + 'UnderBar' => [0x5F].pack('U'), + 'UnderBrace' => [0x23DF].pack('U'), + 'UnderBracket' => [0x23B5].pack('U'), + 'UnderParenthesis' => [0x23DD].pack('U'), + 'Union' => [0x22C3].pack('U'), + 'UnionPlus' => [0x228E].pack('U'), + 'Uogon' => [0x172].pack('U'), + 'uogon' => [0x173].pack('U'), + 'Uopf' => [0x1D54C].pack('U'), + 'uopf' => [0x1D566].pack('U'), + 'Uparrow' => [0x21D1].pack('U'), + 'UpArrow' => [0x2191].pack('U'), + 'uparrow' => [0x2191].pack('U'), + 'UpArrowBar' => [0x2912].pack('U'), + 'UpArrowDownArrow' => [0x21C5].pack('U'), + 'updownarrow' => [0x2195].pack('U'), + 'Updownarrow' => [0x21D5].pack('U'), + 'UpDownArrow' => [0x2195].pack('U'), + 'UpEquilibrium' => [0x296E].pack('U'), + 'upharpoonleft' => [0x21BF].pack('U'), + 'upharpoonright' => [0x21BE].pack('U'), + 'uplus' => [0x228E].pack('U'), + 'UpperLeftArrow' => [0x2196].pack('U'), + 'UpperRightArrow' => [0x2197].pack('U'), + 'upsi' => [0x3C5].pack('U'), + 'Upsi' => [0x3D2].pack('U'), + 'upsih' => [0x3D2].pack('U'), + 'upsilon' => [0x3C5].pack('U'), + 'Upsilon' => [0x3A5].pack('U'), + 'UpTee' => [0x22A5].pack('U'), + 'UpTeeArrow' => [0x21A5].pack('U'), + 'upuparrows' => [0x21C8].pack('U'), + 'urcorn' => [0x231D].pack('U'), + 'urcorner' => [0x231D].pack('U'), + 'urcrop' => [0x230E].pack('U'), + 'uring' => [0x16F].pack('U'), + 'Uring' => [0x16E].pack('U'), + 'urtri' => [0x25F9].pack('U'), + 'uscr' => [0x1D4CA].pack('U'), + 'Uscr' => [0x1D4B0].pack('U'), + 'utdot' => [0x22F0].pack('U'), + 'Utilde' => [0x168].pack('U'), + 'utilde' => [0x169].pack('U'), + 'utri' => [0x25B5].pack('U'), + 'utrif' => [0x25B4].pack('U'), + 'uuarr' => [0x21C8].pack('U'), + 'uuml' => [0xFC].pack('U'), + 'Uuml' => [0xDC].pack('U'), + 'uwangle' => [0x29A7].pack('U'), + 'vangrt' => [0x299C].pack('U'), + 'varepsilon' => [0x3F5].pack('U'), + 'varkappa' => [0x3F0].pack('U'), + 'varnothing' => [0x2205].pack('U'), + 'varphi' => [0x3D5].pack('U'), + 'varpi' => [0x3D6].pack('U'), + 'varpropto' => [0x221D].pack('U'), + 'varr' => [0x2195].pack('U'), + 'vArr' => [0x21D5].pack('U'), + 'varrho' => [0x3F1].pack('U'), + 'varsigma' => [0x3C2].pack('U'), + 'varsubsetneq' => [0x228A, 0xFE00].pack('U*'), + 'varsubsetneqq' => [0x2ACB, 0xFE00].pack('U*'), + 'varsupsetneq' => [0x228B, 0xFE00].pack('U*'), + 'varsupsetneqq' => [0x2ACC, 0xFE00].pack('U*'), + 'vartheta' => [0x3D1].pack('U'), + 'vartriangleleft' => [0x22B2].pack('U'), + 'vartriangleright' => [0x22B3].pack('U'), + 'vBar' => [0x2AE8].pack('U'), + 'Vbar' => [0x2AEB].pack('U'), + 'vBarv' => [0x2AE9].pack('U'), + 'vcy' => [0x432].pack('U'), + 'Vcy' => [0x412].pack('U'), + 'VDash' => [0x22AB].pack('U'), + 'vdash' => [0x22A2].pack('U'), + 'vDash' => [0x22A8].pack('U'), + 'Vdash' => [0x22A9].pack('U'), + 'Vdashl' => [0x2AE6].pack('U'), + 'vee' => [0x2228].pack('U'), + 'Vee' => [0x22C1].pack('U'), + 'veebar' => [0x22BB].pack('U'), + 'veeeq' => [0x225A].pack('U'), + 'vellip' => [0x22EE].pack('U'), + 'verbar' => [0x7C].pack('U'), + 'Verbar' => [0x2016].pack('U'), + 'vert' => [0x7C].pack('U'), + 'Vert' => [0x2016].pack('U'), + 'VerticalBar' => [0x2223].pack('U'), + 'VerticalLine' => [0x7C].pack('U'), + 'VerticalSeparator' => [0x2758].pack('U'), + 'VerticalTilde' => [0x2240].pack('U'), + 'VeryThinSpace' => [0x200A].pack('U'), + 'vfr' => [0x1D533].pack('U'), + 'Vfr' => [0x1D519].pack('U'), + 'vltri' => [0x22B2].pack('U'), + 'vnsub' => [0x2282, 0x20D2].pack('U*'), + 'vnsup' => [0x2283, 0x20D2].pack('U*'), + 'vopf' => [0x1D567].pack('U'), + 'Vopf' => [0x1D54D].pack('U'), + 'vprop' => [0x221D].pack('U'), + 'vrtri' => [0x22B3].pack('U'), + 'Vscr' => [0x1D4B1].pack('U'), + 'vscr' => [0x1D4CB].pack('U'), + 'vsubne' => [0x228A, 0xFE00].pack('U*'), + 'vsubnE' => [0x2ACB, 0xFE00].pack('U*'), + 'vsupne' => [0x228B, 0xFE00].pack('U*'), + 'vsupnE' => [0x2ACC, 0xFE00].pack('U*'), + 'Vvdash' => [0x22AA].pack('U'), + 'vzigzag' => [0x299A].pack('U'), + 'wcirc' => [0x175].pack('U'), + 'Wcirc' => [0x174].pack('U'), + 'wedbar' => [0x2A5F].pack('U'), + 'wedge' => [0x2227].pack('U'), + 'Wedge' => [0x22C0].pack('U'), + 'wedgeq' => [0x2259].pack('U'), + 'weierp' => [0x2118].pack('U'), + 'Wfr' => [0x1D51A].pack('U'), + 'wfr' => [0x1D534].pack('U'), + 'wopf' => [0x1D568].pack('U'), + 'Wopf' => [0x1D54E].pack('U'), + 'wp' => [0x2118].pack('U'), + 'wr' => [0x2240].pack('U'), + 'wreath' => [0x2240].pack('U'), + 'Wscr' => [0x1D4B2].pack('U'), + 'wscr' => [0x1D4CC].pack('U'), + 'xcap' => [0x22C2].pack('U'), + 'xcirc' => [0x25EF].pack('U'), + 'xcup' => [0x22C3].pack('U'), + 'xdtri' => [0x25BD].pack('U'), + 'Xfr' => [0x1D51B].pack('U'), + 'xfr' => [0x1D535].pack('U'), + 'xhArr' => [0x27FA].pack('U'), + 'xharr' => [0x27F7].pack('U'), + 'xi' => [0x3BE].pack('U'), + 'Xi' => [0x39E].pack('U'), + 'xlArr' => [0x27F8].pack('U'), + 'xlarr' => [0x27F5].pack('U'), + 'xmap' => [0x27FC].pack('U'), + 'xnis' => [0x22FB].pack('U'), + 'xodot' => [0x2A00].pack('U'), + 'xopf' => [0x1D569].pack('U'), + 'Xopf' => [0x1D54F].pack('U'), + 'xoplus' => [0x2A01].pack('U'), + 'xotime' => [0x2A02].pack('U'), + 'xrArr' => [0x27F9].pack('U'), + 'xrarr' => [0x27F6].pack('U'), + 'Xscr' => [0x1D4B3].pack('U'), + 'xscr' => [0x1D4CD].pack('U'), + 'xsqcup' => [0x2A06].pack('U'), + 'xuplus' => [0x2A04].pack('U'), + 'xutri' => [0x25B3].pack('U'), + 'xvee' => [0x22C1].pack('U'), + 'xwedge' => [0x22C0].pack('U'), + 'Yacute' => [0xDD].pack('U'), + 'yacute' => [0xFD].pack('U'), + 'yacy' => [0x44F].pack('U'), + 'YAcy' => [0x42F].pack('U'), + 'Ycirc' => [0x176].pack('U'), + 'ycirc' => [0x177].pack('U'), + 'ycy' => [0x44B].pack('U'), + 'Ycy' => [0x42B].pack('U'), + 'yen' => [0xA5].pack('U'), + 'yfr' => [0x1D536].pack('U'), + 'Yfr' => [0x1D51C].pack('U'), + 'YIcy' => [0x407].pack('U'), + 'yicy' => [0x457].pack('U'), + 'Yopf' => [0x1D550].pack('U'), + 'yopf' => [0x1D56A].pack('U'), + 'yscr' => [0x1D4CE].pack('U'), + 'Yscr' => [0x1D4B4].pack('U'), + 'YUcy' => [0x42E].pack('U'), + 'yucy' => [0x44E].pack('U'), + 'Yuml' => [0x178].pack('U'), + 'yuml' => [0xFF].pack('U'), + 'zacute' => [0x17A].pack('U'), + 'Zacute' => [0x179].pack('U'), + 'Zcaron' => [0x17D].pack('U'), + 'zcaron' => [0x17E].pack('U'), + 'Zcy' => [0x417].pack('U'), + 'zcy' => [0x437].pack('U'), + 'zdot' => [0x17C].pack('U'), + 'Zdot' => [0x17B].pack('U'), + 'zeetrf' => [0x2128].pack('U'), + 'ZeroWidthSpace' => [0x200B].pack('U'), + 'zeta' => [0x3B6].pack('U'), + 'Zeta' => [0x396].pack('U'), + 'zfr' => [0x1D537].pack('U'), + 'Zfr' => [0x2128].pack('U'), + 'ZHcy' => [0x416].pack('U'), + 'zhcy' => [0x436].pack('U'), + 'zigrarr' => [0x21DD].pack('U'), + 'Zopf' => [0x2124].pack('U'), + 'zopf' => [0x1D56B].pack('U'), + 'zscr' => [0x1D4CF].pack('U'), + 'Zscr' => [0x1D4B5].pack('U'), + 'zwj' => [0x200D].pack('U'), + 'zwnj' => [0x200C].pack('U') + }.freeze + end + end + end + end +end diff --git a/lib/yard/templates/helpers/markup/hybrid_markdown.rb b/lib/yard/templates/helpers/markup/hybrid_markdown.rb index 7efabb516..5544b758d 100644 --- a/lib/yard/templates/helpers/markup/hybrid_markdown.rb +++ b/lib/yard/templates/helpers/markup/hybrid_markdown.rb @@ -14,21 +14,6 @@ module Markup class HybridMarkdown attr_accessor :from_path - NAMED_ENTITIES = { - 'nbsp' => [0x00A0].pack('U'), - 'copy' => [0x00A9].pack('U'), - 'AElig' => [0x00C6].pack('U'), - 'Dcaron' => [0x010E].pack('U'), - 'frac34' => [0x00BE].pack('U'), - 'HilbertSpace' => [0x210B].pack('U'), - 'DifferentialD' => [0x2146].pack('U'), - 'ClockwiseContourIntegral' => [0x2232].pack('U'), - 'ngE' => [0x2267, 0x0338].pack('U*'), - 'ouml' => [0x00F6].pack('U'), - 'quot' => '"', - 'amp' => '&' - }.freeze - ATX_HEADING_RE = /^\s{0,3}#{Regexp.escape('#')}{1,6}(?=[ \t]|$)/.freeze RDOC_HEADING_RE = /^\s*(=+)[ \t]+(.+?)\s*$/.freeze SETEXT_HEADING_RE = /^\s{0,3}(=+|-+)\s*$/.freeze @@ -1591,7 +1576,7 @@ def delimiter_flags(text, run_start, run_end, char) end def whitespace_char?(char) - char.nil? || char =~ /\s/ || char == NAMED_ENTITIES['nbsp'] + char.nil? || char =~ /\s/ || char == HtmlEntities::ENTITIES['nbsp'] end def punctuation_char?(char) @@ -1875,8 +1860,7 @@ def decode_entity(entity) codepoint = $1.to_i(16) else name = entity[1..-2] - return [0x00E4].pack('U') if name == 'auml' - return NAMED_ENTITIES[name] || CGI.unescapeHTML(entity) + return HtmlEntities::ENTITIES[name] || CGI.unescapeHTML(entity) end return [0xFFFD].pack('U') if codepoint.zero? diff --git a/spec/templates/helpers/markup/hybrid_markdown_spec.rb b/spec/templates/helpers/markup/hybrid_markdown_spec.rb index 1f8cdc423..6bfc1c72d 100644 --- a/spec/templates/helpers/markup/hybrid_markdown_spec.rb +++ b/spec/templates/helpers/markup/hybrid_markdown_spec.rb @@ -250,6 +250,30 @@ def to_html(text) expect(to_html('& ©')).to eq('

& ©

') end + it "converts common named entities" do + expected = [ + 0x2014, 0x2013, 0x2018, 0x2019, 0x201C, 0x201D, 0x2026, 0x2022, + 0x00AB, 0x00BB, 0x2039, 0x203A, 0x00A2, 0x00A3, 0x00A5, 0x20AC, + 0x00A7, 0x00B6, 0x00B0, 0x00B5, 0x00B7, 0x00AE, 0x2122, 0x00B1, + 0x00D7, 0x00F7 + ].pack('U*') + entities = '—–‘’“”…•' \ + '«»‹›¢£¥€' \ + '§¶°µ·®™±×÷' + + expect(to_html(entities)).to eq("

#{expected}

") + end + + it "converts HTML5 named entities beyond Ruby's CGI list" do + expected = [0x2233, 0x2267, 0x0338, 0x21D3].pack('U*') + + expect(to_html('∳≧̸⇓')).to eq("

#{expected}

") + end + + it "converts named angle bracket entities without allowing raw HTML" do + expect(to_html('<script> '')).to eq("

<script> '

") + end + it "escapes HTML-sensitive characters in regular text" do expect(to_html('2 < 3 & "quoted"')).to eq('

2 < 3 & "quoted"

') end