| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808 | <?phpclass PHPExcel_Helper_HTML{    protected static $colourMap = array(        'aliceblue' => 'f0f8ff',        'antiquewhite' => 'faebd7',        'antiquewhite1' => 'ffefdb',        'antiquewhite2' => 'eedfcc',        'antiquewhite3' => 'cdc0b0',        'antiquewhite4' => '8b8378',        'aqua' => '00ffff',        'aquamarine1' => '7fffd4',        'aquamarine2' => '76eec6',        'aquamarine4' => '458b74',        'azure1' => 'f0ffff',        'azure2' => 'e0eeee',        'azure3' => 'c1cdcd',        'azure4' => '838b8b',        'beige' => 'f5f5dc',        'bisque1' => 'ffe4c4',        'bisque2' => 'eed5b7',        'bisque3' => 'cdb79e',        'bisque4' => '8b7d6b',        'black' => '000000',        'blanchedalmond' => 'ffebcd',        'blue' => '0000ff',        'blue1' => '0000ff',        'blue2' => '0000ee',        'blue4' => '00008b',        'blueviolet' => '8a2be2',        'brown' => 'a52a2a',        'brown1' => 'ff4040',        'brown2' => 'ee3b3b',        'brown3' => 'cd3333',        'brown4' => '8b2323',        'burlywood' => 'deb887',        'burlywood1' => 'ffd39b',        'burlywood2' => 'eec591',        'burlywood3' => 'cdaa7d',        'burlywood4' => '8b7355',        'cadetblue' => '5f9ea0',        'cadetblue1' => '98f5ff',        'cadetblue2' => '8ee5ee',        'cadetblue3' => '7ac5cd',        'cadetblue4' => '53868b',        'chartreuse1' => '7fff00',        'chartreuse2' => '76ee00',        'chartreuse3' => '66cd00',        'chartreuse4' => '458b00',        'chocolate' => 'd2691e',        'chocolate1' => 'ff7f24',        'chocolate2' => 'ee7621',        'chocolate3' => 'cd661d',        'coral' => 'ff7f50',        'coral1' => 'ff7256',        'coral2' => 'ee6a50',        'coral3' => 'cd5b45',        'coral4' => '8b3e2f',        'cornflowerblue' => '6495ed',        'cornsilk1' => 'fff8dc',        'cornsilk2' => 'eee8cd',        'cornsilk3' => 'cdc8b1',        'cornsilk4' => '8b8878',        'cyan1' => '00ffff',        'cyan2' => '00eeee',        'cyan3' => '00cdcd',        'cyan4' => '008b8b',        'darkgoldenrod' => 'b8860b',        'darkgoldenrod1' => 'ffb90f',        'darkgoldenrod2' => 'eead0e',        'darkgoldenrod3' => 'cd950c',        'darkgoldenrod4' => '8b6508',        'darkgreen' => '006400',        'darkkhaki' => 'bdb76b',        'darkolivegreen' => '556b2f',        'darkolivegreen1' => 'caff70',        'darkolivegreen2' => 'bcee68',        'darkolivegreen3' => 'a2cd5a',        'darkolivegreen4' => '6e8b3d',        'darkorange' => 'ff8c00',        'darkorange1' => 'ff7f00',        'darkorange2' => 'ee7600',        'darkorange3' => 'cd6600',        'darkorange4' => '8b4500',        'darkorchid' => '9932cc',        'darkorchid1' => 'bf3eff',        'darkorchid2' => 'b23aee',        'darkorchid3' => '9a32cd',        'darkorchid4' => '68228b',        'darksalmon' => 'e9967a',        'darkseagreen' => '8fbc8f',        'darkseagreen1' => 'c1ffc1',        'darkseagreen2' => 'b4eeb4',        'darkseagreen3' => '9bcd9b',        'darkseagreen4' => '698b69',        'darkslateblue' => '483d8b',        'darkslategray' => '2f4f4f',        'darkslategray1' => '97ffff',        'darkslategray2' => '8deeee',        'darkslategray3' => '79cdcd',        'darkslategray4' => '528b8b',        'darkturquoise' => '00ced1',        'darkviolet' => '9400d3',        'deeppink1' => 'ff1493',        'deeppink2' => 'ee1289',        'deeppink3' => 'cd1076',        'deeppink4' => '8b0a50',        'deepskyblue1' => '00bfff',        'deepskyblue2' => '00b2ee',        'deepskyblue3' => '009acd',        'deepskyblue4' => '00688b',        'dimgray' => '696969',        'dodgerblue1' => '1e90ff',        'dodgerblue2' => '1c86ee',        'dodgerblue3' => '1874cd',        'dodgerblue4' => '104e8b',        'firebrick' => 'b22222',        'firebrick1' => 'ff3030',        'firebrick2' => 'ee2c2c',        'firebrick3' => 'cd2626',        'firebrick4' => '8b1a1a',        'floralwhite' => 'fffaf0',        'forestgreen' => '228b22',        'fuchsia' => 'ff00ff',        'gainsboro' => 'dcdcdc',        'ghostwhite' => 'f8f8ff',        'gold1' => 'ffd700',        'gold2' => 'eec900',        'gold3' => 'cdad00',        'gold4' => '8b7500',        'goldenrod' => 'daa520',        'goldenrod1' => 'ffc125',        'goldenrod2' => 'eeb422',        'goldenrod3' => 'cd9b1d',        'goldenrod4' => '8b6914',        'gray' => 'bebebe',        'gray1' => '030303',        'gray10' => '1a1a1a',        'gray11' => '1c1c1c',        'gray12' => '1f1f1f',        'gray13' => '212121',        'gray14' => '242424',        'gray15' => '262626',        'gray16' => '292929',        'gray17' => '2b2b2b',        'gray18' => '2e2e2e',        'gray19' => '303030',        'gray2' => '050505',        'gray20' => '333333',        'gray21' => '363636',        'gray22' => '383838',        'gray23' => '3b3b3b',        'gray24' => '3d3d3d',        'gray25' => '404040',        'gray26' => '424242',        'gray27' => '454545',        'gray28' => '474747',        'gray29' => '4a4a4a',        'gray3' => '080808',        'gray30' => '4d4d4d',        'gray31' => '4f4f4f',        'gray32' => '525252',        'gray33' => '545454',        'gray34' => '575757',        'gray35' => '595959',        'gray36' => '5c5c5c',        'gray37' => '5e5e5e',        'gray38' => '616161',        'gray39' => '636363',        'gray4' => '0a0a0a',        'gray40' => '666666',        'gray41' => '696969',        'gray42' => '6b6b6b',        'gray43' => '6e6e6e',        'gray44' => '707070',        'gray45' => '737373',        'gray46' => '757575',        'gray47' => '787878',        'gray48' => '7a7a7a',        'gray49' => '7d7d7d',        'gray5' => '0d0d0d',        'gray50' => '7f7f7f',        'gray51' => '828282',        'gray52' => '858585',        'gray53' => '878787',        'gray54' => '8a8a8a',        'gray55' => '8c8c8c',        'gray56' => '8f8f8f',        'gray57' => '919191',        'gray58' => '949494',        'gray59' => '969696',        'gray6' => '0f0f0f',        'gray60' => '999999',        'gray61' => '9c9c9c',        'gray62' => '9e9e9e',        'gray63' => 'a1a1a1',        'gray64' => 'a3a3a3',        'gray65' => 'a6a6a6',        'gray66' => 'a8a8a8',        'gray67' => 'ababab',        'gray68' => 'adadad',        'gray69' => 'b0b0b0',        'gray7' => '121212',        'gray70' => 'b3b3b3',        'gray71' => 'b5b5b5',        'gray72' => 'b8b8b8',        'gray73' => 'bababa',        'gray74' => 'bdbdbd',        'gray75' => 'bfbfbf',        'gray76' => 'c2c2c2',        'gray77' => 'c4c4c4',        'gray78' => 'c7c7c7',        'gray79' => 'c9c9c9',        'gray8' => '141414',        'gray80' => 'cccccc',        'gray81' => 'cfcfcf',        'gray82' => 'd1d1d1',        'gray83' => 'd4d4d4',        'gray84' => 'd6d6d6',        'gray85' => 'd9d9d9',        'gray86' => 'dbdbdb',        'gray87' => 'dedede',        'gray88' => 'e0e0e0',        'gray89' => 'e3e3e3',        'gray9' => '171717',        'gray90' => 'e5e5e5',        'gray91' => 'e8e8e8',        'gray92' => 'ebebeb',        'gray93' => 'ededed',        'gray94' => 'f0f0f0',        'gray95' => 'f2f2f2',        'gray97' => 'f7f7f7',        'gray98' => 'fafafa',        'gray99' => 'fcfcfc',        'green' => '00ff00',        'green1' => '00ff00',        'green2' => '00ee00',        'green3' => '00cd00',        'green4' => '008b00',        'greenyellow' => 'adff2f',        'honeydew1' => 'f0fff0',        'honeydew2' => 'e0eee0',        'honeydew3' => 'c1cdc1',        'honeydew4' => '838b83',        'hotpink' => 'ff69b4',        'hotpink1' => 'ff6eb4',        'hotpink2' => 'ee6aa7',        'hotpink3' => 'cd6090',        'hotpink4' => '8b3a62',        'indianred' => 'cd5c5c',        'indianred1' => 'ff6a6a',        'indianred2' => 'ee6363',        'indianred3' => 'cd5555',        'indianred4' => '8b3a3a',        'ivory1' => 'fffff0',        'ivory2' => 'eeeee0',        'ivory3' => 'cdcdc1',        'ivory4' => '8b8b83',        'khaki' => 'f0e68c',        'khaki1' => 'fff68f',        'khaki2' => 'eee685',        'khaki3' => 'cdc673',        'khaki4' => '8b864e',        'lavender' => 'e6e6fa',        'lavenderblush1' => 'fff0f5',        'lavenderblush2' => 'eee0e5',        'lavenderblush3' => 'cdc1c5',        'lavenderblush4' => '8b8386',        'lawngreen' => '7cfc00',        'lemonchiffon1' => 'fffacd',        'lemonchiffon2' => 'eee9bf',        'lemonchiffon3' => 'cdc9a5',        'lemonchiffon4' => '8b8970',        'light' => 'eedd82',        'lightblue' => 'add8e6',        'lightblue1' => 'bfefff',        'lightblue2' => 'b2dfee',        'lightblue3' => '9ac0cd',        'lightblue4' => '68838b',        'lightcoral' => 'f08080',        'lightcyan1' => 'e0ffff',        'lightcyan2' => 'd1eeee',        'lightcyan3' => 'b4cdcd',        'lightcyan4' => '7a8b8b',        'lightgoldenrod1' => 'ffec8b',        'lightgoldenrod2' => 'eedc82',        'lightgoldenrod3' => 'cdbe70',        'lightgoldenrod4' => '8b814c',        'lightgoldenrodyellow' => 'fafad2',        'lightgray' => 'd3d3d3',        'lightpink' => 'ffb6c1',        'lightpink1' => 'ffaeb9',        'lightpink2' => 'eea2ad',        'lightpink3' => 'cd8c95',        'lightpink4' => '8b5f65',        'lightsalmon1' => 'ffa07a',        'lightsalmon2' => 'ee9572',        'lightsalmon3' => 'cd8162',        'lightsalmon4' => '8b5742',        'lightseagreen' => '20b2aa',        'lightskyblue' => '87cefa',        'lightskyblue1' => 'b0e2ff',        'lightskyblue2' => 'a4d3ee',        'lightskyblue3' => '8db6cd',        'lightskyblue4' => '607b8b',        'lightslateblue' => '8470ff',        'lightslategray' => '778899',        'lightsteelblue' => 'b0c4de',        'lightsteelblue1' => 'cae1ff',        'lightsteelblue2' => 'bcd2ee',        'lightsteelblue3' => 'a2b5cd',        'lightsteelblue4' => '6e7b8b',        'lightyellow1' => 'ffffe0',        'lightyellow2' => 'eeeed1',        'lightyellow3' => 'cdcdb4',        'lightyellow4' => '8b8b7a',        'lime' => '00ff00',        'limegreen' => '32cd32',        'linen' => 'faf0e6',        'magenta' => 'ff00ff',        'magenta2' => 'ee00ee',        'magenta3' => 'cd00cd',        'magenta4' => '8b008b',        'maroon' => 'b03060',        'maroon1' => 'ff34b3',        'maroon2' => 'ee30a7',        'maroon3' => 'cd2990',        'maroon4' => '8b1c62',        'medium' => '66cdaa',        'mediumaquamarine' => '66cdaa',        'mediumblue' => '0000cd',        'mediumorchid' => 'ba55d3',        'mediumorchid1' => 'e066ff',        'mediumorchid2' => 'd15fee',        'mediumorchid3' => 'b452cd',        'mediumorchid4' => '7a378b',        'mediumpurple' => '9370db',        'mediumpurple1' => 'ab82ff',        'mediumpurple2' => '9f79ee',        'mediumpurple3' => '8968cd',        'mediumpurple4' => '5d478b',        'mediumseagreen' => '3cb371',        'mediumslateblue' => '7b68ee',        'mediumspringgreen' => '00fa9a',        'mediumturquoise' => '48d1cc',        'mediumvioletred' => 'c71585',        'midnightblue' => '191970',        'mintcream' => 'f5fffa',        'mistyrose1' => 'ffe4e1',        'mistyrose2' => 'eed5d2',        'mistyrose3' => 'cdb7b5',        'mistyrose4' => '8b7d7b',        'moccasin' => 'ffe4b5',        'navajowhite1' => 'ffdead',        'navajowhite2' => 'eecfa1',        'navajowhite3' => 'cdb38b',        'navajowhite4' => '8b795e',        'navy' => '000080',        'navyblue' => '000080',        'oldlace' => 'fdf5e6',        'olive' => '808000',        'olivedrab' => '6b8e23',        'olivedrab1' => 'c0ff3e',        'olivedrab2' => 'b3ee3a',        'olivedrab4' => '698b22',        'orange' => 'ffa500',        'orange1' => 'ffa500',        'orange2' => 'ee9a00',        'orange3' => 'cd8500',        'orange4' => '8b5a00',        'orangered1' => 'ff4500',        'orangered2' => 'ee4000',        'orangered3' => 'cd3700',        'orangered4' => '8b2500',        'orchid' => 'da70d6',        'orchid1' => 'ff83fa',        'orchid2' => 'ee7ae9',        'orchid3' => 'cd69c9',        'orchid4' => '8b4789',        'pale' => 'db7093',        'palegoldenrod' => 'eee8aa',        'palegreen' => '98fb98',        'palegreen1' => '9aff9a',        'palegreen2' => '90ee90',        'palegreen3' => '7ccd7c',        'palegreen4' => '548b54',        'paleturquoise' => 'afeeee',        'paleturquoise1' => 'bbffff',        'paleturquoise2' => 'aeeeee',        'paleturquoise3' => '96cdcd',        'paleturquoise4' => '668b8b',        'palevioletred' => 'db7093',        'palevioletred1' => 'ff82ab',        'palevioletred2' => 'ee799f',        'palevioletred3' => 'cd6889',        'palevioletred4' => '8b475d',        'papayawhip' => 'ffefd5',        'peachpuff1' => 'ffdab9',        'peachpuff2' => 'eecbad',        'peachpuff3' => 'cdaf95',        'peachpuff4' => '8b7765',        'pink' => 'ffc0cb',        'pink1' => 'ffb5c5',        'pink2' => 'eea9b8',        'pink3' => 'cd919e',        'pink4' => '8b636c',        'plum' => 'dda0dd',        'plum1' => 'ffbbff',        'plum2' => 'eeaeee',        'plum3' => 'cd96cd',        'plum4' => '8b668b',        'powderblue' => 'b0e0e6',        'purple' => 'a020f0',        'rebeccapurple' => '663399',        'purple1' => '9b30ff',        'purple2' => '912cee',        'purple3' => '7d26cd',        'purple4' => '551a8b',        'red' => 'ff0000',        'red1' => 'ff0000',        'red2' => 'ee0000',        'red3' => 'cd0000',        'red4' => '8b0000',        'rosybrown' => 'bc8f8f',        'rosybrown1' => 'ffc1c1',        'rosybrown2' => 'eeb4b4',        'rosybrown3' => 'cd9b9b',        'rosybrown4' => '8b6969',        'royalblue' => '4169e1',        'royalblue1' => '4876ff',        'royalblue2' => '436eee',        'royalblue3' => '3a5fcd',        'royalblue4' => '27408b',        'saddlebrown' => '8b4513',        'salmon' => 'fa8072',        'salmon1' => 'ff8c69',        'salmon2' => 'ee8262',        'salmon3' => 'cd7054',        'salmon4' => '8b4c39',        'sandybrown' => 'f4a460',        'seagreen1' => '54ff9f',        'seagreen2' => '4eee94',        'seagreen3' => '43cd80',        'seagreen4' => '2e8b57',        'seashell1' => 'fff5ee',        'seashell2' => 'eee5de',        'seashell3' => 'cdc5bf',        'seashell4' => '8b8682',        'sienna' => 'a0522d',        'sienna1' => 'ff8247',        'sienna2' => 'ee7942',        'sienna3' => 'cd6839',        'sienna4' => '8b4726',        'silver' => 'c0c0c0',        'skyblue' => '87ceeb',        'skyblue1' => '87ceff',        'skyblue2' => '7ec0ee',        'skyblue3' => '6ca6cd',        'skyblue4' => '4a708b',        'slateblue' => '6a5acd',        'slateblue1' => '836fff',        'slateblue2' => '7a67ee',        'slateblue3' => '6959cd',        'slateblue4' => '473c8b',        'slategray' => '708090',        'slategray1' => 'c6e2ff',        'slategray2' => 'b9d3ee',        'slategray3' => '9fb6cd',        'slategray4' => '6c7b8b',        'snow1' => 'fffafa',        'snow2' => 'eee9e9',        'snow3' => 'cdc9c9',        'snow4' => '8b8989',        'springgreen1' => '00ff7f',        'springgreen2' => '00ee76',        'springgreen3' => '00cd66',        'springgreen4' => '008b45',        'steelblue' => '4682b4',        'steelblue1' => '63b8ff',        'steelblue2' => '5cacee',        'steelblue3' => '4f94cd',        'steelblue4' => '36648b',        'tan' => 'd2b48c',        'tan1' => 'ffa54f',        'tan2' => 'ee9a49',        'tan3' => 'cd853f',        'tan4' => '8b5a2b',        'teal' => '008080',        'thistle' => 'd8bfd8',        'thistle1' => 'ffe1ff',        'thistle2' => 'eed2ee',        'thistle3' => 'cdb5cd',        'thistle4' => '8b7b8b',        'tomato1' => 'ff6347',        'tomato2' => 'ee5c42',        'tomato3' => 'cd4f39',        'tomato4' => '8b3626',        'turquoise' => '40e0d0',        'turquoise1' => '00f5ff',        'turquoise2' => '00e5ee',        'turquoise3' => '00c5cd',        'turquoise4' => '00868b',        'violet' => 'ee82ee',        'violetred' => 'd02090',        'violetred1' => 'ff3e96',        'violetred2' => 'ee3a8c',        'violetred3' => 'cd3278',        'violetred4' => '8b2252',        'wheat' => 'f5deb3',        'wheat1' => 'ffe7ba',        'wheat2' => 'eed8ae',        'wheat3' => 'cdba96',        'wheat4' => '8b7e66',        'white' => 'ffffff',        'whitesmoke' => 'f5f5f5',        'yellow' => 'ffff00',        'yellow1' => 'ffff00',        'yellow2' => 'eeee00',        'yellow3' => 'cdcd00',        'yellow4' => '8b8b00',        'yellowgreen' => '9acd32',    );    protected $face;    protected $size;    protected $color;    protected $bold = false;    protected $italic = false;    protected $underline = false;    protected $superscript = false;    protected $subscript = false;    protected $strikethrough = false;    protected $startTagCallbacks = array(        'font' => 'startFontTag',        'b' => 'startBoldTag',        'strong' => 'startBoldTag',        'i' => 'startItalicTag',        'em' => 'startItalicTag',        'u' => 'startUnderlineTag',        'ins' => 'startUnderlineTag',        'del' => 'startStrikethruTag',        'sup' => 'startSuperscriptTag',        'sub' => 'startSubscriptTag',    );    protected $endTagCallbacks = array(        'font' => 'endFontTag',        'b' => 'endBoldTag',        'strong' => 'endBoldTag',        'i' => 'endItalicTag',        'em' => 'endItalicTag',        'u' => 'endUnderlineTag',        'ins' => 'endUnderlineTag',        'del' => 'endStrikethruTag',        'sup' => 'endSuperscriptTag',        'sub' => 'endSubscriptTag',        'br' => 'breakTag',        'p' => 'breakTag',        'h1' => 'breakTag',        'h2' => 'breakTag',        'h3' => 'breakTag',        'h4' => 'breakTag',        'h5' => 'breakTag',        'h6' => 'breakTag',    );    protected $stack = array();    protected $stringData = '';    protected $richTextObject;    protected function initialise()    {        $this->face = $this->size = $this->color = null;        $this->bold = $this->italic = $this->underline = $this->superscript = $this->subscript = $this->strikethrough = false;        $this->stack = array();        $this->stringData = '';    }    public function toRichTextObject($html)    {        $this->initialise();        //  Create a new DOM object        $dom = new \DOMDocument;        //  Load the HTML file into the DOM object        //  Note the use of error suppression, because typically this will be an html fragment, so not fully valid markup        $loaded = @$dom->loadHTML($html);        //  Discard excess white space        $dom->preserveWhiteSpace = false;        $this->richTextObject = new PHPExcel_RichText();;        $this->parseElements($dom);        // Clean any further spurious whitespace        $this->cleanWhitespace();        return $this->richTextObject;    }    protected function cleanWhitespace()    {        foreach ($this->richTextObject->getRichTextElements() as $key => $element) {            $text = $element->getText();            // Trim any leading spaces on the first run            if ($key == 0) {                $text = ltrim($text);            }            // Trim any spaces immediately after a line break            $text = preg_replace('/\n */mu', "\n", $text);            $element->setText($text);        }    }    protected function buildTextRun()    {        $text = $this->stringData;        if (trim($text) === '') {            return;        }        $richtextRun = $this->richTextObject->createTextRun($this->stringData);        if ($this->face) {            $richtextRun->getFont()->setName($this->face);        }        if ($this->size) {            $richtextRun->getFont()->setSize($this->size);        }        if ($this->color) {            $richtextRun->getFont()->setColor(new PHPExcel_Style_Color('ff' . $this->color));        }        if ($this->bold) {            $richtextRun->getFont()->setBold(true);        }        if ($this->italic) {            $richtextRun->getFont()->setItalic(true);        }        if ($this->underline) {            $richtextRun->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);        }        if ($this->superscript) {            $richtextRun->getFont()->setSuperScript(true);        }        if ($this->subscript) {            $richtextRun->getFont()->setSubScript(true);        }        if ($this->strikethrough) {            $richtextRun->getFont()->setStrikethrough(true);        }        $this->stringData = '';    }    protected function rgbToColour($rgb)    {        preg_match_all('/\d+/', $rgb, $values);        foreach ($values[0] as &$value) {            $value = str_pad(dechex($value), 2, '0', STR_PAD_LEFT);        }        return implode($values[0]);    }    protected function colourNameLookup($rgb)    {        return self::$colourMap[$rgb];    }    protected function startFontTag($tag)    {        foreach ($tag->attributes as $attribute) {            $attributeName = strtolower($attribute->name);            $attributeValue = $attribute->value;            if ($attributeName == 'color') {                if (preg_match('/rgb\s*\(/', $attributeValue)) {                    $this->$attributeName = $this->rgbToColour($attributeValue);                } elseif (strpos(trim($attributeValue), '#') === 0) {                    $this->$attributeName = ltrim($attributeValue, '#');                } else {                    $this->$attributeName = $this->colourNameLookup($attributeValue);                }            } else {                $this->$attributeName = $attributeValue;            }        }    }    protected function endFontTag()    {        $this->face = $this->size = $this->color = null;    }    protected function startBoldTag()    {        $this->bold = true;    }    protected function endBoldTag()    {        $this->bold = false;    }    protected function startItalicTag()    {        $this->italic = true;    }    protected function endItalicTag()    {        $this->italic = false;    }    protected function startUnderlineTag()    {        $this->underline = true;    }    protected function endUnderlineTag()    {        $this->underline = false;    }    protected function startSubscriptTag()    {        $this->subscript = true;    }    protected function endSubscriptTag()    {        $this->subscript = false;    }    protected function startSuperscriptTag()    {        $this->superscript = true;    }    protected function endSuperscriptTag()    {        $this->superscript = false;    }    protected function startStrikethruTag()    {        $this->strikethrough = true;    }    protected function endStrikethruTag()    {        $this->strikethrough = false;    }    protected function breakTag()    {        $this->stringData .= "\n";    }    protected function parseTextNode(DOMText $textNode)    {        $domText = preg_replace(            '/\s+/u',            ' ',            str_replace(array("\r", "\n"), ' ', $textNode->nodeValue)        );        $this->stringData .= $domText;        $this->buildTextRun();    }    protected function handleCallback($element, $callbackTag, $callbacks)    {        if (isset($callbacks[$callbackTag])) {            $elementHandler = $callbacks[$callbackTag];            if (method_exists($this, $elementHandler)) {                call_user_func(array($this, $elementHandler), $element);            }        }    }    protected function parseElementNode(DOMElement $element)    {        $callbackTag = strtolower($element->nodeName);        $this->stack[] = $callbackTag;        $this->handleCallback($element, $callbackTag, $this->startTagCallbacks);        $this->parseElements($element);        array_pop($this->stack);        $this->handleCallback($element, $callbackTag, $this->endTagCallbacks);    }    protected function parseElements(DOMNode $element)    {        foreach ($element->childNodes as $child) {            if ($child instanceof DOMText) {                $this->parseTextNode($child);            } elseif ($child instanceof DOMElement) {                $this->parseElementNode($child);            }        }    }}
 |