Skip to content

Instantly share code, notes, and snippets.

@ptsefton
Created May 26, 2015 08:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ptsefton/1ce30879e9cfef289356 to your computer and use it in GitHub Desktop.
Save ptsefton/1ce30879e9cfef289356 to your computer and use it in GitHub Desktop.
Generate JSON mapping table from Windows Symbol and wingdings fonts to HTML entities via Python
"""
Generates a lookup table in JSON format to map characters from Wingdings and Symbol font to unicode.
Eg, this fragment of HTML <font face="Symbol"></font>Laughs<font face="Symbol"></font>.
Which should render like this: [Laughs]
Uses the data in this mapping table found here: https://github.com/juanmf/sfPlugins/blob/master/reportPlugin/doc/Word2XSLTRenderingFO.xsl
"""
table = u"""
<my:recoding-table font="Symbol">
<my:char code="&#x21;" value="21" altvalue="F021" entity="&#x0021;"/> <!--EXCLAMATION MARK-->
<my:char code="&#x22;" value="22" altvalue="F022" entity="&#x2200;"/> <!--FOR ALL-->
<my:char code="&#x23;" value="23" altvalue="F023" entity="&#x0023;"/> <!--NUMBER SIGN-->
<my:char code="&#x24;" value="24" altvalue="F024" entity="&#x2203;"/> <!--THERE EXISTS-->
<my:char code="&#x25;" value="25" altvalue="F025" entity="&#x0025;"/> <!--PERCENT SIGN-->
<my:char code="&#x26;" value="26" altvalue="F026" entity="&#x0026;"/> <!--AMPERSAND-->
<my:char code="&#x27;" value="27" altvalue="F027" entity="&#x220D;"/> <!--SMALL CONTAINS AS MEMBER-->
<my:char code="&#x28;" value="28" altvalue="F028" entity="&#x0028;"/> <!--LEFT PARENTHESIS-->
<my:char code="&#x29;" value="29" altvalue="F029" entity="&#x0029;"/> <!--RIGHT PARENTHESIS-->
<my:char code="&#x2A;" value="2A" altvalue="F02A" entity="&#x2217;"/> <!--ASTERISK OPERATOR-->
<my:char code="&#x2B;" value="2B" altvalue="F02B" entity="&#x002B;"/> <!--PLUS SIGN-->
<my:char code="&#x2C;" value="2C" altvalue="F02C" entity="&#x002C;"/> <!--COMMA-->
<my:char code="&#x2D;" value="2D" altvalue="F02D" entity="&#x2212;"/> <!--MINUS SIGN-->
<my:char code="&#x2E;" value="2E" altvalue="F02E" entity="&#x002E;"/> <!--FULL STOP-->
<my:char code="&#x2F;" value="2F" altvalue="F02F" entity="&#x002F;"/> <!--SOLIDUS-->
<my:char code="&#x30;" value="30" altvalue="F030" entity="&#x0030;"/> <!--DIGIT ZERO-->
<my:char code="&#x31;" value="31" altvalue="F031" entity="&#x0031;"/> <!--DIGIT ONE-->
<my:char code="&#x32;" value="32" altvalue="F032" entity="&#x0032;"/> <!--DIGIT TWO-->
<my:char code="&#x33;" value="33" altvalue="F033" entity="&#x0033;"/> <!--DIGIT THREE-->
<my:char code="&#x34;" value="34" altvalue="F034" entity="&#x0034;"/> <!--DIGIT FOUR-->
<my:char code="&#x35;" value="35" altvalue="F035" entity="&#x0035;"/> <!--DIGIT FIVE-->
<my:char code="&#x36;" value="36" altvalue="F036" entity="&#x0036;"/> <!--DIGIT SIX-->
<my:char code="&#x37;" value="37" altvalue="F037" entity="&#x0037;"/> <!--DIGIT SEVEN-->
<my:char code="&#x38;" value="38" altvalue="F038" entity="&#x0038;"/> <!--DIGIT EIGHT-->
<my:char code="&#x39;" value="39" altvalue="F039" entity="&#x0039;"/> <!--DIGIT NINE-->
<my:char code="&#x3A;" value="3A" altvalue="F03A" entity="&#x003A;"/> <!--COLON-->
<my:char code="&#x3B;" value="3B" altvalue="F03B" entity="&#x003B;"/> <!--SEMICOLON-->
<my:char code="&#x3C;" value="3C" altvalue="F03C" entity="&#x003C;"/> <!--LESS-THAN SIGN-->
<my:char code="&#x3D;" value="3D" altvalue="F03D" entity="&#x003D;"/> <!--EQUALS SIGN-->
<my:char code="&#x3E;" value="3E" altvalue="F03E" entity="&#x003E;"/> <!--GREATER-THAN SIGN-->
<my:char code="&#x3F;" value="3F" altvalue="F03F" entity="&#x003F;"/> <!--QUESTION MARK-->
<my:char code="&#x40;" value="40" altvalue="F040" entity="&#x2245;"/> <!--APPROXIMATELY EQUAL TO-->
<my:char code="&#x41;" value="41" altvalue="F041" entity="&#x0391;"/> <!--GREEK CAPITAL LETTER ALPHA-->
<my:char code="&#x42;" value="42" altvalue="F042" entity="&#x0392;"/> <!--GREEK CAPITAL LETTER BETA-->
<my:char code="&#x43;" value="43" altvalue="F043" entity="&#x03A7;"/> <!--GREEK CAPITAL LETTER CHI-->
<my:char code="&#x44;" value="44" altvalue="F044" entity="&#x0394;"/> <!--GREEK CAPITAL LETTER DELTA-->
<my:char code="&#x45;" value="45" altvalue="F045" entity="&#x0395;"/> <!--GREEK CAPITAL LETTER EPSILON-->
<my:char code="&#x46;" value="46" altvalue="F046" entity="&#x03A6;"/> <!--GREEK CAPITAL LETTER PHI-->
<my:char code="&#x47;" value="47" altvalue="F047" entity="&#x0393;"/> <!--GREEK CAPITAL LETTER GAMMA-->
<my:char code="&#x48;" value="48" altvalue="F048" entity="&#x0397;"/> <!--GREEK CAPITAL LETTER ETA-->
<my:char code="&#x49;" value="49" altvalue="F049" entity="&#x0399;"/> <!--GREEK CAPITAL LETTER IOTA-->
<my:char code="&#x4A;" value="4A" altvalue="F04A" entity="&#x03D1;"/> <!--GREEK THETA SYMBOL-->
<my:char code="&#x4B;" value="4B" altvalue="F04B" entity="&#x039A;"/> <!--GREEK CAPITAL LETTER KAPPA-->
<my:char code="&#x4C;" value="4C" altvalue="F04C" entity="&#x039B;"/> <!--GREEK CAPITAL LETTER LAMDA-->
<my:char code="&#x4D;" value="4D" altvalue="F04D" entity="&#x039C;"/> <!--GREEK CAPITAL LETTER MU-->
<my:char code="&#x4E;" value="4E" altvalue="F04E" entity="&#x039D;"/> <!--GREEK CAPITAL LETTER NU-->
<my:char code="&#x4F;" value="4F" altvalue="F04F" entity="&#x039F;"/> <!--GREEK CAPITAL LETTER OMICRON-->
<my:char code="&#x50;" value="50" altvalue="F050" entity="&#x03A0;"/> <!--GREEK CAPITAL LETTER PI-->
<my:char code="&#x51;" value="51" altvalue="F051" entity="&#x0398;"/> <!--GREEK CAPITAL LETTER THETA-->
<my:char code="&#x52;" value="52" altvalue="F052" entity="&#x03A1;"/> <!--GREEK CAPITAL LETTER RHO-->
<my:char code="&#x53;" value="53" altvalue="F053" entity="&#x03A3;"/> <!--GREEK CAPITAL LETTER SIGMA-->
<my:char code="&#x54;" value="54" altvalue="F054" entity="&#x03A4;"/> <!--GREEK CAPITAL LETTER TAU-->
<my:char code="&#x55;" value="55" altvalue="F055" entity="&#x03A5;"/> <!--GREEK CAPITAL LETTER UPSILON-->
<my:char code="&#x56;" value="56" altvalue="F056" entity="&#x03C2;"/> <!--GREEK SMALL LETTER FINAL SIGMA-->
<my:char code="&#x57;" value="57" altvalue="F057" entity="&#x03A9;"/> <!--GREEK CAPITAL LETTER OMEGA-->
<my:char code="&#x58;" value="58" altvalue="F058" entity="&#x039E;"/> <!--GREEK CAPITAL LETTER XI-->
<my:char code="&#x59;" value="59" altvalue="F059" entity="&#x03A8;"/> <!--GREEK CAPITAL LETTER PSI-->
<my:char code="&#x5A;" value="5A" altvalue="F05A" entity="&#x0396;"/> <!--GREEK CAPITAL LETTER ZETA-->
<my:char code="&#x5B;" value="5B" altvalue="F05B" entity="&#x005B;"/> <!--LEFT SQUARE BRACKET-->
<my:char code="&#x5C;" value="5C" altvalue="F05C" entity="&#x2234;"/> <!--THEREFORE-->
<my:char code="&#x5D;" value="5D" altvalue="F05D" entity="&#x005D;"/> <!--RIGHT SQUARE BRACKET-->
<my:char code="&#x5E;" value="5E" altvalue="F05E" entity="&#x22A5;"/> <!--UP TACK-->
<my:char code="&#x5F;" value="5F" altvalue="F05F" entity="&#x005F;"/> <!--LOW LINE-->
<my:char code="&#x60;" value="60" altvalue="F060" entity="&#x203E;"/> <!--radical extender # corporate char-->
<my:char code="&#x61;" value="61" altvalue="F061" entity="&#x03B1;"/> <!--GREEK SMALL LETTER ALPHA-->
<my:char code="&#x62;" value="62" altvalue="F062" entity="&#x03B2;"/> <!--GREEK SMALL LETTER BETA-->
<my:char code="&#x63;" value="63" altvalue="F063" entity="&#x03C7;"/> <!--GREEK SMALL LETTER CHI-->
<my:char code="&#x64;" value="64" altvalue="F064" entity="&#x03B4;"/> <!--GREEK SMALL LETTER DELTA-->
<my:char code="&#x65;" value="65" altvalue="F065" entity="&#x03B5;"/> <!--GREEK SMALL LETTER EPSILON-->
<my:char code="&#x66;" value="66" altvalue="F066" entity="&#x03C6;"/> <!--GREEK SMALL LETTER PHI-->
<my:char code="&#x67;" value="67" altvalue="F067" entity="&#x03B3;"/> <!--GREEK SMALL LETTER GAMMA-->
<my:char code="&#x68;" value="68" altvalue="F068" entity="&#x03B7;"/> <!--GREEK SMALL LETTER ETA-->
<my:char code="&#x69;" value="69" altvalue="F069" entity="&#x03B9;"/> <!--GREEK SMALL LETTER IOTA-->
<my:char code="&#x6A;" value="6A" altvalue="F06A" entity="&#x03D6;"/> <!--GREEK PHI SYMBOL-->
<my:char code="&#x6B;" value="6B" altvalue="F06B" entity="&#x03BA;"/> <!--GREEK SMALL LETTER KAPPA-->
<my:char code="&#x6C;" value="6C" altvalue="F06C" entity="&#x03BB;"/> <!--GREEK SMALL LETTER LAMDA-->
<my:char code="&#x6D;" value="6D" altvalue="F06D" entity="&#x03BC;"/> <!--GREEK SMALL LETTER MU-->
<my:char code="&#x6E;" value="6E" altvalue="F06E" entity="&#x03BD;"/> <!--GREEK SMALL LETTER NU-->
<my:char code="&#x6F;" value="6F" altvalue="F06F" entity="&#x03BF;"/> <!--GREEK SMALL LETTER OMICRON-->
<my:char code="&#x70;" value="70" altvalue="F070" entity="&#x03C0;"/> <!--GREEK SMALL LETTER PI-->
<my:char code="&#x71;" value="71" altvalue="F071" entity="&#x03B8;"/> <!--GREEK SMALL LETTER THETA-->
<my:char code="&#x72;" value="72" altvalue="F072" entity="&#x03C1;"/> <!--GREEK SMALL LETTER RHO-->
<my:char code="&#x73;" value="73" altvalue="F073" entity="&#x03C3;"/> <!--GREEK SMALL LETTER SIGMA-->
<my:char code="&#x74;" value="74" altvalue="F074" entity="&#x03C4;"/> <!--GREEK SMALL LETTER TAU-->
<my:char code="&#x75;" value="75" altvalue="F075" entity="&#x03C5;"/> <!--GREEK SMALL LETTER UPSILON-->
<my:char code="&#x76;" value="76" altvalue="F076" entity="&#x03D6;"/> <!--GREEK PI SYMBOL-->
<my:char code="&#x77;" value="77" altvalue="F077" entity="&#x03C9;"/> <!--GREEK SMALL LETTER OMEGA-->
<my:char code="&#x78;" value="78" altvalue="F078" entity="&#x03BE;"/> <!--GREEK SMALL LETTER XI-->
<my:char code="&#x79;" value="79" altvalue="F079" entity="&#x03C8;"/> <!--GREEK SMALL LETTER PSI-->
<my:char code="&#x7A;" value="7A" altvalue="F07A" entity="&#x03B6;"/> <!--GREEK SMALL LETTER ZETA-->
<!--<my:char code="&#x7B;" value="7B" altvalue="F07B" entity="&#x007B;"/>--> <!--LEFT CURLY BRACKET-->
<my:char code="&#x7B;&#x7B;" value="7B" altvalue="F07B" entity="&#x007B;&#x007B;"/> <!--LEFT CURLY BRACKET-->
<my:char code="&#x7C;" value="7C" altvalue="F07C" entity="&#x007C;"/> <!--VERTICAL LINE-->
<!--<my:char code="&#x7D;" value="7D" altvalue="F07D" entity="&#x007D;"/>--> <!--RIGHT CURLY BRACKET-->
<my:char code="&#x7D;&#x7D;" value="7D" altvalue="F07D" entity="&#x007D;&#x007D;"/> <!--RIGHT CURLY BRACKET-->
<my:char code="&#x7E;" value="7E" altvalue="F07E" entity="&#x223C;"/> <!--TILDE OPERATOR-->
<my:char code="&#xA0;" value="A0" altvalue="F0A0" entity="&#x20AC;"/> <!--EURO SIGN-->
<my:char code="&#xA1;" value="A1" altvalue="F0A1" entity="&#x03D2;"/> <!--GREEK UPSILON WITH HOOK SYMBOL-->
<my:char code="&#xA2;" value="A2" altvalue="F0A2" entity="&#x2032;"/> <!--PRIME # minute-->
<my:char code="&#xA3;" value="A3" altvalue="F0A3" entity="&#x2264;"/> <!--LESS-THAN OR EQUAL TO-->
<my:char code="&#xA4;" value="A4" altvalue="F0A4" entity="&#x2044;"/> <!--FRACTION SLASH-->
<my:char code="&#xA5;" value="A5" altvalue="F0A5" entity="&#x221E;"/> <!--INFINITY-->
<my:char code="&#xA6;" value="A6" altvalue="F0A6" entity="&#x0192;"/> <!--LATIN SMALL LETTER F WITH HOOK-->
<my:char code="&#xA7;" value="A7" altvalue="F0A7" entity="&#x2663;"/> <!--BLACK CLUB SUIT-->
<my:char code="&#xA8;" value="A8" altvalue="F0A8" entity="&#x2666;"/> <!--BLACK DIAMOND SUIT-->
<my:char code="&#xA9;" value="A9" altvalue="F0A9" entity="&#x2665;"/> <!--BLACK HEART SUIT-->
<my:char code="&#xAA;" value="AA" altvalue="F0AA" entity="&#x2660;"/> <!--BLACK SPADE SUIT-->
<my:char code="&#xAB;" value="AB" altvalue="F0AB" entity="&#x2194;"/> <!--LEFT RIGHT ARROW-->
<my:char code="&#xAC;" value="AC" altvalue="F0AC" entity="&#x2190;"/> <!--LEFTWARDS ARROW-->
<my:char code="&#xAD;" value="AD" altvalue="F0AD" entity="&#x2191;"/> <!--UPWARDS ARROW-->
<my:char code="&#xAE;" value="AE" altvalue="F0AE" entity="&#x2192;"/> <!--RIGHTWARDS ARROW-->
<my:char code="&#xAF;" value="AF" altvalue="F0AF" entity="&#x2193;"/> <!--DOWNWARDS ARROW-->
<my:char code="&#xB0;" value="B0" altvalue="F0B0" entity="&#x00B0;"/> <!--DEGREE SIGN-->
<my:char code="&#xB1;" value="B1" altvalue="F0B1" entity="&#x00B1;"/> <!--PLUS-MINUS SIGN-->
<my:char code="&#xB2;" value="B2" altvalue="F0B2" entity="&#x2033;"/> <!--DOUBLE PRIME # second-->
<my:char code="&#xB3;" value="B3" altvalue="F0B3" entity="&#x2265;"/> <!--GREATER-THAN OR EQUAL TO-->
<my:char code="&#xB4;" value="B4" altvalue="F0B4" entity="&#x00D7;"/> <!--MULTIPLICATION SIGN-->
<my:char code="&#xB5;" value="B5" altvalue="F0B5" entity="&#x221D;"/> <!--PROPORTIONAL TO-->
<my:char code="&#xB6;" value="B6" altvalue="F0B6" entity="&#x2202;"/> <!--PARTIAL DIFFERENTIAL-->
<my:char code="&#xB7;" value="B7" altvalue="F0B7" entity="&#x2022;"/> <!--BULLET-->
<my:char code="&#xB8;" value="B8" altvalue="F0B8" entity="&#x00F7;"/> <!--DIVISION SIGN-->
<my:char code="&#xB9;" value="B9" altvalue="F0B9" entity="&#x2260;"/> <!--NOT EQUAL TO-->
<my:char code="&#xBA;" value="BA" altvalue="F0BA" entity="&#x2261;"/> <!--IDENTICAL TO-->
<my:char code="&#xBB;" value="BB" altvalue="F0BB" entity="&#x2248;"/> <!--ALMOST EQUAL TO-->
<my:char code="&#xBC;" value="BC" altvalue="F0BC" entity="&#x2026;"/> <!--HORIZONTAL ELLIPSIS-->
<my:char code="&#xBD;" value="BD" altvalue="F0BD" entity="&#x23D0;"/> <!--VERTICAL LINE EXTENSION (for arrows) # for Unicode 4.0 and later-->
<my:char code="&#xBE;" value="BE" altvalue="F0BE" entity="&#x23AF;"/> <!--HORIZONTAL LINE EXTENSION (for arrows) # for Unicode 3.2 and later-->
<my:char code="&#xBF;" value="BF" altvalue="F0BF" entity="&#x21B5;"/> <!--DOWNWARDS ARROW WITH CORNER LEFTWARDS-->
<my:char code="&#xC0;" value="C0" altvalue="F0C0" entity="&#x2135;"/> <!--ALEF SYMBOL-->
<my:char code="&#xC1;" value="C1" altvalue="F0C1" entity="&#x2111;"/> <!--BLACK-LETTER CAPITAL I-->
<my:char code="&#xC2;" value="C2" altvalue="F0C2" entity="&#x211C;"/> <!--BLACK-LETTER CAPITAL R-->
<my:char code="&#xC3;" value="C3" altvalue="F0C3" entity="&#x2118;"/> <!--SCRIPT CAPITAL P-->
<my:char code="&#xC4;" value="C4" altvalue="F0C4" entity="&#x2297;"/> <!--CIRCLED TIMES-->
<my:char code="&#xC5;" value="C5" altvalue="F0C5" entity="&#x2295;"/> <!--CIRCLED PLUS-->
<my:char code="&#xC6;" value="C6" altvalue="F0C6" entity="&#x2205;"/> <!--EMPTY SET-->
<my:char code="&#xC7;" value="C7" altvalue="F0C7" entity="&#x2229;"/> <!--INTERSECTION-->
<my:char code="&#xC8;" value="C8" altvalue="F0C8" entity="&#x222A;"/> <!--UNION-->
<my:char code="&#xC9;" value="C9" altvalue="F0C9" entity="&#x2283;"/> <!--SUPERSET OF-->
<my:char code="&#xCA;" value="CA" altvalue="F0CA" entity="&#x2287;"/> <!--SUPERSET OF OR EQUAL TO-->
<my:char code="&#xCB;" value="CB" altvalue="F0CB" entity="&#x2284;"/> <!--NOT A SUBSET OF-->
<my:char code="&#xCC;" value="CC" altvalue="F0CC" entity="&#x2282;"/> <!--SUBSET OF-->
<my:char code="&#xCD;" value="CD" altvalue="F0CD" entity="&#x2286;"/> <!--SUBSET OF OR EQUAL TO-->
<my:char code="&#xCE;" value="CE" altvalue="F0CE" entity="&#x2208;"/> <!--ELEMENT OF-->
<my:char code="&#xCF;" value="CF" altvalue="F0CF" entity="&#x2209;"/> <!--NOT AN ELEMENT OF-->
<my:char code="&#xD0;" value="D0" altvalue="F0D0" entity="&#x2220;"/> <!--ANGLE-->
<my:char code="&#xD1;" value="D1" altvalue="F0D1" entity="&#x2207;"/> <!--NABLA-->
<my:char code="&#xD2;" value="D2" altvalue="F0D2" entity="&#x00AE;"/> <!--REGISTERED SIGN # serif-->
<my:char code="&#xD3;" value="D3" altvalue="F0D3" entity="&#x00A9;"/> <!--COPYRIGHT SIGN # serif-->
<my:char code="&#xD4;" value="D4" altvalue="F0D4" entity="&#x2122;"/> <!--TRADE MARK SIGN # serif-->
<my:char code="&#xD5;" value="D5" altvalue="F0D5" entity="&#x220F;"/> <!--N-ARY PRODUCT-->
<my:char code="&#xD6;" value="D6" altvalue="F0D6" entity="&#x221A;"/> <!--SQUARE ROOT-->
<my:char code="&#xD7;" value="D7" altvalue="F0D7" entity="."/> <!--DOT OPERATOR-->
<my:char code="&#xD8;" value="D8" altvalue="F0D8" entity="&#x00AC;"/> <!--NOT SIGN-->
<my:char code="&#xD9;" value="D9" altvalue="F0D9" entity="&#x2227;"/> <!--LOGICAL AND-->
<my:char code="&#xDA;" value="DA" altvalue="F0DA" entity="&#x2228;"/> <!--LOGICAL OR-->
<my:char code="&#xDB;" value="DB" altvalue="F0DB" entity="&#x21D4;"/> <!--LEFT RIGHT DOUBLE ARROW-->
<my:char code="&#xDC;" value="DC" altvalue="F0DC" entity="&#x21D0;"/> <!--LEFTWARDS DOUBLE ARROW-->
<my:char code="&#xDD;" value="DD" altvalue="F0DD" entity="&#x21D1;"/> <!--UPWARDS DOUBLE ARROW-->
<my:char code="&#xDE;" value="DE" altvalue="F0DE" entity="&#x21D2;"/> <!--RIGHTWARDS DOUBLE ARROW-->
<my:char code="&#xDF;" value="DF" altvalue="F0DF" entity="&#x21D3;"/> <!--DOWNWARDS DOUBLE ARROW-->
<my:char code="&#xE0;" value="E0" altvalue="F0E0" entity="&#x22C4;"/> <!--DIAMOND OPERATOR-->
<my:char code="&#xE1;" value="E1" altvalue="F0E1" entity="&#x3008;"/> <!--LEFT ANGLE BRACKET-->
<my:char code="&#xE2;" value="E2" altvalue="F0E2" entity="&#x00AE;"/> <!--REGISTERED SIGN # sans serif-->
<my:char code="&#xE3;" value="E3" altvalue="F0E3" entity="&#x00A9;"/> <!--COPYRIGHT SIGN # sans serif-->
<my:char code="&#xE4;" value="E4" altvalue="F0E4" entity="&#x2122;"/> <!--TRADE MARK SIGN # sans serif-->
<my:char code="&#xE5;" value="E5" altvalue="F0E5" entity="&#x2211;"/> <!--N-ARY SUMMATION-->
<my:char code="&#xE6;" value="E6" altvalue="F0E6" entity="&#x239B;"/> <!--LEFT PARENTHESIS UPPER HOOK # for Unicode 3.2 and later-->
<my:char code="&#xE7;" value="E7" altvalue="F0E7" entity="&#x239C;"/> <!--LEFT PARENTHESIS EXTENSION # for Unicode 3.2 and later-->
<my:char code="&#xE8;" value="E8" altvalue="F0E8" entity="&#x239D;"/> <!--LEFT PARENTHESIS LOWER HOOK # for Unicode 3.2 and later-->
<my:char code="&#xE9;" value="E9" altvalue="F0E9" entity="&#x23A1;"/> <!--LEFT SQUARE BRACKET UPPER CORNER # for Unicode 3.2 and later-->
<my:char code="&#xEA;" value="EA" altvalue="F0EA" entity="&#x23A2;"/> <!--LEFT SQUARE BRACKET EXTENSION # for Unicode 3.2 and later-->
<my:char code="&#xEB;" value="EB" altvalue="F0EB" entity="&#x23A3;"/> <!--LEFT SQUARE BRACKET LOWER CORNER # for Unicode 3.2 and later-->
<my:char code="&#xEC;" value="EC" altvalue="F0EC" entity="&#x23A7;"/> <!--LEFT CURLY BRACKET UPPER HOOK # for Unicode 3.2 and later-->
<my:char code="&#xED;" value="ED" altvalue="F0ED" entity="&#x23A8;"/> <!--LEFT CURLY BRACKET MIDDLE PIECE # for Unicode 3.2 and later-->
<my:char code="&#xEE;" value="EE" altvalue="F0EE" entity="&#x23A9;"/> <!--LEFT CURLY BRACKET LOWER HOOK # for Unicode 3.2 and later-->
<my:char code="&#xEF;" value="EF" altvalue="F0EF" entity="&#x23AA;"/> <!--CURLY BRACKET EXTENSION # for Unicode 3.2 and later-->
<my:char code="&#xF0;" value="F0" altvalue="F0F0" entity="&#xF8FF;"/> <!--Apple logo-->
<my:char code="&#xF1;" value="F1" altvalue="F0F1" entity="&#x3009;"/> <!--RIGHT ANGLE BRACKET-->
<my:char code="&#xF2;" value="F2" altvalue="F0F2" entity="&#x222B;"/> <!--INTEGRAL-->
<my:char code="&#xF3;" value="F3" altvalue="F0F3" entity="&#x2320;"/> <!--TOP HALF INTEGRAL-->
<my:char code="&#xF4;" value="F4" altvalue="F0F4" entity="&#x23AE;"/> <!--INTEGRAL EXTENSION # for Unicode 3.2 and later-->
<my:char code="&#xF5;" value="F5" altvalue="F0F5" entity="&#x2321;"/> <!--BOTTOM HALF INTEGRAL-->
<my:char code="&#xF6;" value="F6" altvalue="F0F6" entity="&#x239E;"/> <!--RIGHT PARENTHESIS UPPER HOOK # for Unicode 3.2 and later-->
<my:char code="&#xF7;" value="F7" altvalue="F0F7" entity="&#x239F;"/> <!--RIGHT PARENTHESIS EXTENSION # for Unicode 3.2 and later-->
<my:char code="&#xF8;" value="F8" altvalue="F0F8" entity="&#x23A0;"/> <!--RIGHT PARENTHESIS LOWER HOOK # for Unicode 3.2 and later-->
<my:char code="&#xF9;" value="F9" altvalue="F0F9" entity="&#x23A4;"/> <!--RIGHT SQUARE BRACKET UPPER CORNER # for Unicode 3.2 and later-->
<my:char code="&#xFA;" value="FA" altvalue="F0FA" entity="&#x23A5;"/> <!--RIGHT SQUARE BRACKET EXTENSION # for Unicode 3.2 and later-->
<my:char code="&#xFB;" value="FB" altvalue="F0FB" entity="&#x23A6;"/> <!--RIGHT SQUARE BRACKET LOWER CORNER # for Unicode 3.2 and later-->
<my:char code="&#xFC;" value="FC" altvalue="F0FC" entity="&#x23AB;"/> <!--RIGHT CURLY BRACKET UPPER HOOK # for Unicode 3.2 and later-->
<my:char code="&#xFD;" value="FD" altvalue="F0FD" entity="&#x23AC;"/> <!--RIGHT CURLY BRACKET MIDDLE PIECE # for Unicode 3.2 and later-->
<my:char code="&#xFE;" value="FE" altvalue="F0FE" entity="&#x23AD;"/> <!--RIGHT CURLY BRACKET LOWER HOOK # for Unicode 3.2 and later-->
</my:recoding-table>
<!-- ============== -->
<!-- Wingdings font -->
<!-- ============== -->
<!-- 03/06/2006: Provided a comprehensive recoding table for many more Wingdings characters -->
<!-- Attention! If you use @code or @entity attribute value (also for searching), you should use only first character of attribute value! -->
<!-- In some cases value of attributes @code and @entity is doubled for compatibility reason. -->
<!-- See http://www.w3.org/TR/xslt#attribute-value-templates 7.6.2 Attribute Value Templates -->
<!-- It is an error if a right curly brace occurs in an attribute value template outside an expression without being followed by a second right curly brace. -->
<my:recoding-table font="Wingdings">
<my:char code="&#x22;" value="22" altvalue="F022" entity="&#x2702;"/>
<my:char code="&#x23;" value="23" altvalue="F023" entity="&#x2701;"/>
<my:char code="&#x28;" value="28" altvalue="F028" entity="&#x260E;"/>
<my:char code="&#x2A;" value="2A" altvalue="F02A" entity="&#x2709;"/>
<my:char code="&#x3E;" value="3E" altvalue="F03E" entity="&#x2622;"/>
<my:char code="&#x3F;" value="3F" altvalue="F03F" entity="&#x270D;"/>
<my:char code="&#x41;" value="41" altvalue="F041" entity="&#x270C;"/>
<my:char code="&#x46;" value="46" altvalue="F046" entity="&#x261E;"/>
<my:char code="&#x4C;" value="4C" altvalue="F04C" entity="&#x2639;"/>
<my:char code="&#x58;" value="58" altvalue="F058" entity="&#x2720;"/>
<my:char code="&#x59;" value="59" altvalue="F059" entity="&#x2721;"/>
<my:char code="&#x5A;" value="5A" altvalue="F05A" entity="&#x262A;"/>
<my:char code="&#x5B;" value="5B" altvalue="F05B" entity="&#x262F;"/>
<my:char code="&#x5D;" value="5D" altvalue="F05D" entity="&#x2638;"/>
<my:char code="&#x52;" value="52" altvalue="F052" entity="&#x263C;"/>
<my:char code="&#x5E;" value="5E" altvalue="F05E" entity="&#x2648;"/>
<my:char code="&#x5F;" value="5F" altvalue="F05F" entity="&#x2649;"/>
<my:char code="&#x60;" value="60" altvalue="F060" entity="&#x264A;"/>
<my:char code="&#x61;" value="61" altvalue="F061" entity="&#x264B;"/>
<my:char code="&#x62;" value="62" altvalue="F062" entity="&#x264C;"/>
<my:char code="&#x63;" value="63" altvalue="F063" entity="&#x264D;"/>
<my:char code="&#x64;" value="64" altvalue="F064" entity="&#x264E;"/>
<my:char code="&#x65;" value="65" altvalue="F065" entity="&#x264F;"/>
<my:char code="&#x66;" value="66" altvalue="F066" entity="&#x2650;"/>
<my:char code="&#x67;" value="67" altvalue="F067" entity="&#x2651;"/>
<my:char code="&#x68;" value="68" altvalue="F068" entity="&#x2652;"/>
<my:char code="&#x69;" value="69" altvalue="F069" entity="&#x2653;"/>
<my:char code="&#x6C;" value="6C" altvalue="F06C" entity="&#x25CF;"/>
<my:char code="&#x6D;" value="6D" altvalue="F06D" entity="&#x274D;"/>
<my:char code="&#x6E;" value="6E" altvalue="F06E" entity="&#x25A0;"/>
<my:char code="&#x6F;" value="6F" altvalue="F06F" entity="&#x25A1;"/>
<my:char code="&#x71;" value="71" altvalue="F071" entity="&#x2751;"/>
<my:char code="&#x72;" value="72" altvalue="F072" entity="&#x2752;"/>
<my:char code="&#x76;" value="76" altvalue="F076" entity="&#x2756;"/>
<my:char code="&#x77;" value="77" altvalue="F077" entity="&#x25C6;"/>
<!--<my:char code="&#x7B;" value="7B" altvalue="F07B" entity="&#x2740;"/>-->
<my:char code="&#x7B;&#x7B;" value="7B" altvalue="F07B" entity="&#x2740;"/>
<!--<my:char code="&#x7D;" value="7D" altvalue="F07D" entity="&#x275D;"/>-->
<my:char code="&#x7D;&#x7D;" value="7D" altvalue="F07D" entity="&#x275D;"/>
<my:char code="&#x7E;" value="7E" altvalue="F07E" entity="&#x275E;"/>
<my:char code="&#x81;" value="81" altvalue="F081" entity="&#x2460;"/>
<my:char code="&#x82;" value="82" altvalue="F082" entity="&#x2461;"/>
<my:char code="&#x83;" value="83" altvalue="F083" entity="&#x2462;"/>
<my:char code="&#x84;" value="84" altvalue="F084" entity="&#x2463;"/>
<my:char code="&#x85;" value="85" altvalue="F085" entity="&#x2464;"/>
<my:char code="&#x86;" value="86" altvalue="F086" entity="&#x2465;"/>
<my:char code="&#x87;" value="87" altvalue="F087" entity="&#x2466;"/>
<my:char code="&#x88;" value="88" altvalue="F088" entity="&#x2467;"/>
<my:char code="&#x89;" value="89" altvalue="F089" entity="&#x2468;"/>
<my:char code="&#x8A;" value="8A" altvalue="F08A" entity="&#x2469;"/>
<my:char code="&#x8C;" value="8C" altvalue="F08C" entity="&#x2776;"/>
<my:char code="&#x8D;" value="8D" altvalue="F08D" entity="&#x2777;"/>
<my:char code="&#x8E;" value="8E" altvalue="F08E" entity="&#x2778;"/>
<my:char code="&#x8F;" value="8F" altvalue="F08F" entity="&#x2779;"/>
<my:char code="&#x90;" value="90" altvalue="F090" entity="&#x277A;"/>
<my:char code="&#x91;" value="91" altvalue="F091" entity="&#x277B;"/>
<my:char code="&#x92;" value="92" altvalue="F092" entity="&#x277C;"/>
<my:char code="&#x93;" value="93" altvalue="F093" entity="&#x277D;"/>
<my:char code="&#x94;" value="94" altvalue="F094" entity="&#x277E;"/>
<my:char code="&#x95;" value="95" altvalue="F095" entity="&#x277F;"/>
<my:char code="&#x9F;" value="9F" altvalue="F09F" entity="&#x2022;"/>
<my:char code="&#xA1;" value="A1" altvalue="F0A1" entity="&#x25CC;"/>
<my:char code="&#xA4;" value="A4" altvalue="F0A4" entity="&#x25C9;"/>
<my:char code="&#xA6;" value="A6" altvalue="F0A6" entity="&#x274D;"/>
<my:char code="&#xAA;" value="AA" altvalue="F0AA" entity="&#x2726;"/>
<my:char code="&#xAB;" value="AB" altvalue="F0AB" entity="&#x2605;"/>
<my:char code="&#xAC;" value="AC" altvalue="F0AC" entity="&#x2736;"/>
<my:char code="&#xAD;" value="AD" altvalue="F0AD" entity="&#x2737;"/>
<my:char code="&#xAE;" value="AE" altvalue="F0AE" entity="&#x2739;"/>
<my:char code="&#xAF;" value="AF" altvalue="F0AF" entity="&#x2735;"/>
<my:char code="&#xD5;" value="D5" altvalue="F0D5" entity="&#x232B;"/>
<my:char code="&#xD6;" value="D6" altvalue="F0D6" entity="&#x2326;"/>
<my:char code="&#xEF;" value="EF" altvalue="F0EF" entity="&#x21E6;"/>
<my:char code="&#xF0;" value="F0" altvalue="F0F0" entity="&#x21E8;"/>
<my:char code="&#xF1;" value="F1" altvalue="F0F1" entity="&#x21E7;"/>
<my:char code="&#xF2;" value="F2" altvalue="F0F2" entity="&#x21E9;"/>
<my:char code="&#xFB;" value="FB" altvalue="F0FB" entity="&#x2718;"/>
<my:char code="&#xFC;" value="FC" altvalue="F0FC" entity="&#x2713;"/>
<my:char code="&#xFD;" value="FD" altvalue="F0FD" entity="&#x2612;"/>
<my:char code="&#xFE;" value="FE" altvalue="F0FE" entity="&#x2611;"/>
</my:recoding-table>
"""
from bs4 import BeautifulSoup
import json
soup = BeautifulSoup(table)
windows_font_map = {}
for f in soup.find_all('my:recoding-table'):
font = f.get('font')
windows_font_map[font] = {}
for map in f.find_all('my:char'):
alt = map.get('altvalue')
windows_font_map[font][alt] = {}
windows_font_map[font][alt]['code'] = map.get('code')
windows_font_map[font][alt]['value'] = map.get('value')
windows_font_map[font][alt]['entity'] = map.get('entity')
with open('windows_font_mapping.json', 'w') as outfile:
json.dump(windows_font_map, outfile)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment