m13253 / danmaku2ass

Convert comments from Niconico/AcFun/bilibili to ASS format
http://m13253.blogspot.com/2013/11/play-danmaku-offline-danmaku2ass.html
GNU General Public License v3.0
556 stars 92 forks source link

Deal with EBFB(Event Based Framework for Biliscript), or stop throwing error #16

Closed cnbeining closed 9 years ago

cnbeining commented 9 years ago

The EBFB is used with the most recent Bilibili Ranking Week.

An example: http://www.bilibili.com/video/av2002118/

<?xml version="1.0" encoding="UTF-8"?><i><chatserver>chat.bilibili.com</chatserver><chatid>3094218</chatid><mission>0</mission><maxlimit>3000</maxlimit><source>e-r</source><ds>786995184</ds><de>787070480</de><max_count>3000</max_count><d p="9.293,1,25,16777215,1423932631,0,662b3a48,786997626">前5</d>
<d p="11.74,1,25,16777215,1423932652,0,54ad71cd,786997974">- -</d>
<d p="28.045,1,25,16777215,1423932653,0,662b3a48,786998000">不对应该是前3.....</d>
<d p="7.872,1,25,16777215,1423932660,0,68f41271,786998135">前</d>
<d p="23.901,1,25,16777215,1423932661,0,54ad71cd,786998204">第一</d>
<d p="55.461,1,25,16777215,1423932681,0,662b3a48,786998551">少有抢到前3.....</d>
<d p="14.676,1,25,16777215,1423932692,0,dec1a095,786998761">前十- -</d>
<d p="10.606,1,25,16777215,1423932694,0,8cbb3ed3,786998793">前5!!!</d>
<d p="5.833,1,25,16777215,1423932694,0,7d77048a,786998798">好早,明天弹幕肥了再看!</d>
<d p="17.967,1,25,16777215,1423932698,0,7577df6c,786998977">人好少</d>
<d p="0,1,25,16777215,1423932724,0,9026c750,786999399">好前</d>
<d p="16.289,1,25,16777215,1423932742,0,9026c750,787000039">前5</d>
<d p="17.202,1,25,16777215,1423932739,0,130b4443,787000077">前十</d>
<d p="10.927,1,25,16711680,1423932752,0,8be7501e,787000736">有人吗?</d>
<d p="80.396,5,25,3407616,1423932754,0,dec1a095,787000837">我要做十一!!!!谁抢了我十一。。</d>
<d p="6.792,1,25,16777215,1423932756,0,35212836,787000877">前!</d>
<d p="0,1,25,16777215,1423932771,0,6702328d,787001077">前</d>
<d p="30.843,1,25,16711680,1423932768,0,8be7501e,787001107">哎</d>
<d p="11.712,1,25,16777215,1423932783,0,97009d3b,787001315">卧槽好前啊</d>
<d p="4.353,1,25,16777215,1423932787,0,0e227fb2,787001369">啦啦啦</d>
<d p="35.636,1,25,3394815,1423932788,0,35212836,787001387">现在点击显示才3</d>
<d p="5.878,1,25,16777215,1423932788,0,57bac7ee,787001457">前</d>
<d p="17.015,1,25,16777215,1423932794,0,0e227fb2,787001553">前5</d>
<d p="0.45,1,25,16777215,1423932804,0,4a2c8cc7,787001678">早</d>
<d p="30.08,1,25,16777215,1423932810,0,0e227fb2,787001795">人呢</d>
<d p="70.309,1,25,16711680,1423932812,0,8be7501e,787001816">10位小伙伴们</d>
<d p="9.101,1,25,16777215,1423932764,0,ab2fb59d,787002020">前</d>
<d p="7.353,1,25,16777215,1423932852,0,839f86ef,787002567">前十!!</d>
<d p="76.43,1,25,16777215,1423932856,0,0e227fb2,787002667">好孤独</d>
<d p="126.012,1,25,16711680,1423932866,0,8be7501e,787002875">养肥了再看。</d>
<d p="9.282,1,25,16777215,1423932891,0,0c57a9ce,787003326">好早啊</d>
<d p="109.654,1,25,16777215,1423932892,0,9a89d8f0,787003348">卧槽前50啊,第一次啊</d>
<d p="14.435,1,25,16777215,1423932917,0,e5aede16,787003829">前100~~</d>
<d p="176.509,1,25,16711680,1423932915,0,8be7501e,787003839">早上再看</d>
<d p="8.759,1,25,16777215,1423932922,0,4964e1b3,787003948">太前</d>
<d p="8.329,1,25,16777215,1423932921,0,a59a07f0,787003978">早</d>
<d p="7.468,1,25,16777215,1423932920,0,e3ba35b7,787003979">前一百</d>
<d p="127.183,1,25,16777215,1423932939,0,0e227fb2,787004242">另外一个小伙伴你好</d>
<d p="0,4,25,13395609,1423932959,0,9408120c,787004620">第一次这么前!!!</d>
<d p="13.42,1,25,13395609,1423932970,0,9408120c,787004882">早</d>
<d p="3.093,1,25,16777215,1423932980,0,8c483a89,787004981">40!!</d>
<d p="0,1,25,16777215,1423932990,0,9567432e,787005178">前100!!!!!</d>
<d p="6.446,1,25,16777215,1423933019,0,020b8b9a,787005760">站前蹲坑</d>
<d p="0.916,1,25,16777215,1423933019,0,fc1a8e16,787005775">看我刷出了什么!</d>
<d p="1.933,1,25,16777215,1423932957,0,292ba98a,787006063">前一百!</d>
<d p="5.613,1,25,16777215,1423933055,0,9567432e,787006365">占个位,养肥了再看</d>
<d p="0,1,25,16777215,1423933075,0,222a151b,787006803">前》》》》》》》》》》》</d>
<d p="183.207,1,25,16777215,1423933098,0,a59a07f0,787007160">shenmegui</d>
<d p="15.269,1,25,16777215,1423933116,0,887fed8e,787007481">第79</d>
<d p="1.635,1,25,16777215,1423933127,0,a3d9f6e2,787007768">前100~!!</d>
<d p="45.655,1,25,13369395,1423933134,0,052277f2,787007806">前90!!!!</d>
<d p="173.253,1,25,16777215,1423933147,0,e3ba35b7,787008111">upid瞩目</d>
<d p="7.923,1,25,16777215,1423933158,0,252721c9,787008290">前一百</d>
<d p="277.249,1,25,16777215,1423933193,0,a59a07f0,787008882">drrrrrrrrrrrrrr</d>
<d p="112.875,1,25,16777215,1423933232,0,efdbdc7e,787009606">人好少//////////////////</d>
<d p="7.933,1,25,16777215,1423933264,0,f6e24bd6,787010161">qoam60</d>
<d p="7.18,1,25,16777215,1423933232,0,bada12c9,787011074">前</d>
<d p="1.01,1,25,16777215,1423933379,0,01c64df3,787012340">反复看了一下日期……</d>
<d p="20.109,1,25,16711680,1423933400,0,6d8b6877,787012628">早早早</d>
<d p="276.145,1,25,13395609,1423933444,0,9408120c,787013427">drrrrrrr</d>
<d p="275.306,1,25,16777215,1423933448,0,1b035168,787013517">刚刚看完第六集</d>
<d p="449.259,1,25,16777215,1423933579,0,fbbffb17,787015885">大声的告诉我们 你们捕到什么鱼</d>
<d p="14.116,1,25,16777215,1423933637,0,9a8c10ec,787016932">深夜党的胜利</d>
<d p="547.734,1,25,16777215,1423933722,0,d9523de8,787018617">这个好,哈哈</d>
<d p="908.238,1,25,16777215,1423933740,0,e3ba35b7,787018849">……</d>
<d p="0,1,25,16777215,1423933760,0,1bab18c6,787019171">第一次这么早</d>
<d p="13.719,1,25,16777215,1423933793,0,6617be74,787019757">前</d>
<d p="3.623,1,25,16711680,1423933825,0,0274dae0,787020323">看我刷出了什么!!!</d>
<d p="755.902,1,25,3381708,1423933835,0,dec1a095,787020524">这个真的是良心番,超好看。</d>
<d p="0,5,25,16711680,1423933916,0,d39ff4bb,787021935">我去 前100啊</d>
<d p="708.037,4,25,6750105,1423933917,0,dec1a095,787021945">我去,居然还能这么高,群众眼睛瞎了么。</d>
<d p="1217.4,1,25,16777215,1423933978,0,e3ba35b7,787023091">woc112!</d>
<d p="0,1,25,16777215,1423934012,0,15ed24e3,787023695">前</d>
<d p="143.526,1,25,16711680,1423934084,0,0274dae0,787024974">鬼畜区的胜利</d>
<d p="0,1,25,16777215,1423934085,0,2143683d,787024982">我擦,我刷出啥来了!</d>
<d p="960.516,1,25,16777215,1423934019,0,fbbffb17,787025249">这个好</d>
<d p="39.164,1,25,16777215,1423934102,0,59b7bdb7,787025269">前</d>
<d p="167.111,1,25,16711680,1423934107,0,0274dae0,787025366">哇,这个赞</d>
<d p="760.683,1,25,16711680,1423934146,0,6d8b6877,787026045">前面的别走,加我一个</d>
<d p="3.498,1,25,16777215,1423934161,0,016aed09,787026355">前100!!!</d>
<d p="0,1,25,16777215,1423934168,0,7617c20f,787026475">这么早</d>
<d p="820.081,5,25,13395609,1423934172,0,9408120c,787026554">触触你好触触再见(ーー゛)</d>
<d p="0,1,25,16777215,1423934176,0,50861d55,787026585">前300!</d>
<d p="225.883,1,25,16711680,1423934220,0,0274dae0,787027377">绅士的胜利</d>
<d p="0,1,25,16777215,1423934265,0,4d42dd66,787028168">前!</d>
<d p="0.489,1,25,16777215,1423934362,0,4ac15cf3,787029786">看看我刷出了什么!!</d>
<d p="399.629,1,25,16711680,1423934400,0,0274dae0,787030340">丞相的热潮啊</d>
<d p="950.633,1,25,16777215,1423934425,0,93629986,787031687">我就知道233333333</d>
<d p="375.001,1,25,16777215,1423934537,0,016aed09,787032527">!!!</d>
<d p="18.379,1,25,16777215,1423934561,0,6c2ce484,787032976">第90!</d>
<d p="28.969,1,25,16777215,1423934598,0,a95304a4,787033502">居然这么早(#°Д°)</d>
<d p="53.323,1,25,16777215,1423934665,0,ada2d417,787034650">前100,深夜单身汪的胜利</d>
<d p="249.49,1,25,16777215,1423934674,0,6c2ce484,787034762">!!!!!</d>
<d p="682.836,1,25,16711680,1423934721,0,0274dae0,787035479">泰语?</d>
<d p="511.827,1,25,16777215,1423934738,0,6c2ce484,787035723">这个超6</d>
<d p="137.044,4,25,65535,1423934848,0,d402794e,787037414">居然那么前- -吓得我赶紧发条弹幕</d>
<d p="6.707,1,25,16777215,1423934909,0,4c4bd2cd,787038381">前300...</d>
<d p="742.08,1,25,16777215,1423934930,0,016aed09,787038708">茶叔my女神!!!</d>
<d p="2.967,1,25,16777215,1423934992,0,32bf842a,787039724">深夜党的福利</d>
<d p="314.558,4,25,16711680,1423934997,0,49a6310e,787039824">真是绅士的胜利</d>
<d p="25.335,1,25,16777215,1423935001,0,4c4bd2cd,787039869">刚从录的地平线过来,慢了...</d>
<d p="15.767,1,25,16777215,1423934989,0,315127ed,787040518">前前前前前</d>
<d p="901.403,1,25,16777215,1423935070,0,0cabb26b,787040867">280?</d>
<d p="9.187,1,25,16777215,1423935077,0,563b24fa,787041042">居然前100</d>
<d p="899.17,1,25,16777215,1423935087,0,016aed09,787041120">哈哈哈哈哈哈哈哈哈哈哈这个</d>
<d p="0,1,25,16777215,1423935093,0,7a061440,787041204">~~~</d>
<d p="26.717,1,25,16777215,1423935104,0,a19cab48,787041365">又是全线标红的节奏?</d>
<d p="0.933,1,25,3407871,1423935113,0,876edcdd,787041501">前500,话说虐猫子好勤快啊这星期!果然情人节没人么……</d>
<d p="939.952,1,25,16777215,1423935128,0,016aed09,787041722">跪】</d>
<d p="739.144,5,25,16777215,1423935142,0,2143683d,787041949">茶叔!</d>
<d p="108.348,1,25,16777215,1423935138,0,acbd728b,787041962">好靠前</d>
<d p="86.851,1,25,16777215,1423935165,0,2f746e86,787042336">绅士的胜利</d>
<d p="0,1,25,16777215,1423935178,0,67b26e86,787042517">什么情况= =</d>
<d p="1004.84,1,25,16777215,1423935193,0,016aed09,787042737">hhhhhhhh</d>
<d p="760.902,5,25,16777215,1423935209,0,2143683d,787042962">寄生兽是良心番不是很久之前的事了么···</d>
<d p="168.85,1,25,16777215,1423935250,0,a19cab48,787043581">这个好好好!</d>
<d p="146.078,1,25,16777215,1423935262,0,2f746e86,787043812">圣人惠的胜利</d>
<d p="202.242,1,25,16777215,1423935283,0,a19cab48,787044030">  就是不放2333</d>
<d p="4.501,1,25,16777215,1423935231,0,234449ca,787044105">前500!</d>
<d p="0.555,1,25,16777215,1423935310,0,fa311488,787044407">前150!</d>
<d p="187.2,1,25,16777215,1423935316,0,2f746e86,787044542">LL大法好</d>
<d p="6.59,1,25,16777215,1423935344,0,1d5299a7,787044908">好前</d>
<d p="18.105,1,25,16777215,1423935364,0,0be7b71f,787045141">这次好早啊</d>
<d p="42.788,1,25,16777215,1423935399,0,15e99cba,787045707">还能赶上前500不错</d>
<d p="13.097,1,25,16777215,1423935426,0,99deb540,787046035">前250!!!!!!!!</d>
<d p="895.913,5,25,16777215,1423935476,0,2143683d,787046695">我就知道···</d>
<d p="827.592,1,25,16777215,1423935473,0,6c2ce484,787046700">打脸系列= =</d>
<d p="953.549,1,25,16777215,1423935496,0,315127ed,787046935">意料之中</d>
<d p="936.632,1,25,16777215,1423935502,0,2143683d,787047083">毅力帝···</d>
<d p="950.792,1,25,16777215,1423935532,0,2143683d,787047489">逗比战争果然不负众望</d>
<d p="13.512,1,25,16777215,1423935589,0,22d79303,787048254">卧槽前150!</d>
<d p="928.158,1,25,16777215,1423935601,0,6c2ce484,787048434">这个听着都累。。。</d>
<d p="100.488,1,25,16777215,1423935628,0,6a8b4fda,787048861">前100!</d>
<d p="390.636,1,25,16777215,1423935685,0,99deb540,787049633">哈哈哈哈哈哈哈哈</d>
<d p="26.397,1,25,65280,1423935698,0,e4bfb79a,787049776">好前面</d>
<d p="14.392,1,25,16777215,1423935700,0,5083a8b7,787049822">500播放- -</d>
<d p="37.863,1,25,65280,1423935710,0,e4bfb79a,787049970">好早</d>
<d p="11.386,1,25,16777215,1423935715,0,4337fd6b,787050056">这么早~!</d>
<d p="426.512,1,25,16777215,1423935722,0,99deb540,787050142">瑟爹prprprprprpr</d>
<d p="555.866,1,25,16711680,1423935727,0,2f746e86,787050203">FFFFFFFFFFFFFFFFFFFFFFFF</d>
<d p="23.27,1,25,16777215,1423935743,0,4337fd6b,787050432">居然在前600</d>
<d p="754.805,1,25,16777215,1423935753,0,22d79303,787050564">茶叔这投稿时间QVQ</d>
<d p="557.325,1,25,15597585,1423935695,0,7627f03c,787050856">FFF</d>
<d p="955.838,1,25,16777215,1423935816,0,22d79303,787051388">BGM用烂系列</d>
<d p="8.312,1,25,16777215,1423935820,0,f889cdf6,787051443">前500!!!!!!!</d>
<d p="2.867,1,25,16777215,1423935746,0,8bc3cb7e,787051538">卧槽 我就随便看看 第一次这么前!!!</d>
<d p="628.535,1,25,16777215,1423935835,0,2f746e86,787051642">竟然升了</d>
<d p="0,1,25,16777215,1423935850,0,cae35aae,787051891">前600!!发条弹幕明天来看</d>
<d p="823.5,1,25,16777215,1423935777,0,c18176e6,787051958">大触你嚎</d>
<d p="831.6,1,25,16777215,1423935835,0,c18176e6,787052404">!!我喜欢她们唱的歌</d>
<d p="257.281,1,25,16777215,1423935904,0,15e99cba,787052536">哇,岚少久违的上了周刊</d>
<d p="897.533,1,25,16777215,1423935887,0,c18176e6,787053134">雾草_(:_」∠)_</d>
<d p="771.943,1,25,16777215,1423936000,0,2f746e86,787053884">真良心番</d>
<d p="943.6,1,25,16777215,1423935931,0,c18176e6,787054050">请收下我的膝盖</d>
<d p="960.167,1,25,16777215,1423936025,0,c18176e6,787054223">什么鬼</d>
<d p="18.202,1,25,16777215,1423936026,0,bfd97d7f,787054234">前200!</d>
<d p="456.799,1,25,16777215,1423936043,0,6a8b4fda,787054460">沼泽鱼!</d>
<d p="614.878,1,25,16777215,1423936078,0,99deb540,787054977">还不错哎~</d>
<d p="0.747,5,25,6750156,1423936088,0,0308e2c5,787055042">好前_(:з」∠)_</d>
<d p="141.085,1,25,16777215,1423936101,0,853d6fba,787055243">这个质量完全不怎么样啊</d>
<d p="929.681,1,25,16777215,1423936175,0,2f746e86,787056161">丧心病狂</d>
<d p="457.391,1,25,16777215,1423936175,0,da40de60,787056191">鱼~好大的鱼~虎纹鲨鱼</d>
<d p="722.361,1,25,16777215,1423936182,0,80de13ed,787056247">丞相V5</d>
<d p="457.391,1,25,16777215,1423936182,0,da40de60,787056296">鱼~好大的鱼~虎纹鲨鱼~</d>
<d p="936.921,1,25,16777215,1423936191,0,5a11a77b,787056370">wtf...........</d>
<d p="955.893,1,25,16777215,1423936219,0,2f746e86,787056746">不出所料,大触的世界</d>
<d p="2.553,1,25,16777215,1423936227,0,3e858f88,787056863">前1000~</d>
<d p="932.712,1,25,16777215,1423936286,0,99deb540,787057570">哦这歌简直了!</d>
<d p="568.632,1,25,10027008,1423936300,0,da40de60,787057773">FFFF</d>
<d p="96.702,1,25,255,1423936399,0,47119331,787058972">143位小伙伴好</d>
<d p="1041.44,1,25,16777215,1423936404,0,4fae9409,787059036">前一千</d>
<d p="10.65,1,25,16777215,1423936413,0,f681ed7c,787059138">略早= =</d>
<d p="162,1,25,16777215,1423936418,0,cc47272b,787059220">前1000~~</d>
<d p="0.845,1,25,16777215,1423936452,0,2488f768,787059661">前700~</d>
<d p="826.838,1,25,10027008,1423936469,0,da40de60,787059879">圆珠笔比铅笔更容易打细调子 但是比较难把握 </d>
<d p="866.929,1,25,6684927,1423936528,0,da40de60,787060582">速度:又是我的活</d>
<d p="937.979,1,25,255,1423936593,0,47119331,787061408">我整个人都卧槽了......</d>
<d p="925.922,1,25,6684927,1423936610,0,da40de60,787061584">这个真心碉堡 这首歌68分钟 只断了20次</d>
<d p="687.481,1,25,16777215,1423936656,0,27b561f6,787062183">+++++++++++</d>
<d p="834.667,1,25,16777215,1423936652,0,8bc3cb7e,787063015">这个…卧槽…这么久了么</d>
<d p="745.961,5,25,6750156,1423936760,0,0308e2c5,787063321">茶叔!!</d>
<d p="32.838,1,25,13408614,1423936775,0,a4a8026b,787063521">我去第一次进前1000、、、609</d>
<d p="4.094,1,25,16777215,1423936830,0,2da0c482,787064168">钱1000</d>
<d p="826.241,5,25,6750156,1423936846,0,0308e2c5,787064406">这个我好像看过...</d>
<d p="860.325,5,25,6750156,1423936897,0,0308e2c5,787064909">小受喵的猪肉2333333333333</d>
<d p="930.67,5,25,6750156,1423936968,0,0308e2c5,787065652">良心翻唱</d>
<d p="162.333,1,25,16777215,1423936994,0,2516bfea,787065955">这个不错啊</d>
<d p="17.634,1,25,16777215,1423937071,0,dad25416,787066817">av2002118   突破200W了啊</d>
<d p="924.74,1,25,16777215,1423937122,0,74bcdc62,787067392">圆周率终于来啦!</d>
<d p="168.602,1,25,16777215,1423937150,0,fa6823ff,787067638">这个大赞</d>
<d p="1217.36,5,25,6750156,1423937321,0,0308e2c5,787069496">第112←_←简直</d>
<d p="0,8,25,16777215,1423932504,2,bf7f7709,786995184">/**
    EBFB(Event Based Framework for Biliscript) beta
    Author: Xarple
    This work is released to Public Domain, do whatever you want with it.
*/
var buttonInfos=
{   
    'Textjingdian':  { startTime: 50.5, delay: 9, x: 11, y:294, width: 122, height: 23 ,avNum: 'av70467',text:' '},
    'Text30':    { startTime: 76, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1978431',text:' '},
    'Text29':    { startTime: 106, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1966343',text:' '},
    'Text28':    { startTime: 125, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1962377',text:' '},
    'Text27':    { startTime: 155, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1968263',text:' '},
    'Text26':    { startTime: 174, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1976535',text:' '},
    'Text25':    { startTime: 193, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1983098',text:' '},
    'Text24':    { startTime: 212, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1966372',text:' '},
    'Text23':    { startTime: 252, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1975935',text:' '},
    'Text22':    { startTime: 282, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1968804',text:' '},
    'Text21':    { startTime: 301, delay: 16, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1967946',text:' '},
    'Textpickup':    { startTime: 335, delay: 29, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1834666',text:' '},
    'Text20':    { startTime: 368, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1968681',text:' '},
    'Text19':    { startTime: 387, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1972509',text:' '},
    'Text18':    { startTime: 406, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1982422',text:' '},
    'Text17':    { startTime: 425, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1960135',text:' '},
    'Text16':    { startTime: 444, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1972019',text:' '},
    'Text15':    { startTime: 463, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1961937',text:' '},
    'Text14':    { startTime: 482, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1982221',text:' '},
    'Text13':    { startTime: 501, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1971979',text:' '},
    'Text12':    { startTime: 531, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1965400',text:' '},
    'Text11':    { startTime: 550, delay: 16, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1972265',text:' '},
    'Textbangwai':   { startTime: 572.5, delay: 24, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1968461',text:' '},
    'Text10':    { startTime: 601, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1971745',text:' '},
    'Text9':     { startTime: 620, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1958068',text:' '},
    'Text8':     { startTime: 650, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1989613',text:' '},
    'Text7':     { startTime: 669, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1964560',text:' '},
    'Text6':     { startTime: 688, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1966071',text:' '},
    'Text5':     { startTime: 718, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1983560',text:' '},
    'Text4':     { startTime: 737, delay: 17, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1987195',text:' '},
    'Texth5':    { startTime: 812, delay: 14, x: 11, y:294, width: 122, height: 23 ,avNum: 'av949415',text:' '},
    'Texth4':    { startTime: 826, delay: 15, x: 11, y:294, width: 122, height: 23 ,avNum: 'av944472',text:' '},
    'Texth3':    { startTime: 841, delay: 15, x: 11, y:294, width: 122, height: 23 ,avNum: 'av949602',text:' '},
    'Texth2':    { startTime: 856, delay: 15, x: 11, y:294, width: 122, height: 23 ,avNum: 'av954068',text:' '},
    'Texth1':    { startTime: 871, delay: 14, x: 11, y:294, width: 122, height: 23 ,avNum: 'av948808',text:' '},
    'Text3':     { startTime: 892.5, delay: 9, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1982092',text:' '},
    'Text2':     { startTime: 923.5, delay: 9, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1979414',text:' '},
    'Text1':     { startTime: 954, delay: 9, x: 11, y:294, width: 122, height: 23 ,avNum: 'av1973126',text:' '}
};

if($G._("exists"))
{
trace("exists: " + $G._("exists"));
0();//只为Error1009
};

var lastPlayerState = '';
if (!$G._get('exists') &amp;&amp; Player.state == 'playing')
{
    lastPlayerState = Player.state;
    Player.pause();
}

function traceDetailedly(object, objectName)
{
    if (object == null)
    {
        trace('null');
        return;
    }

    function traceStringAtCurrentDepth(string)
    {
        var advance = '';
        for (var i = 0; i &lt; nowDepth; ++i)
            advance += '    ';
        trace(advance + string);
    }

    function traceObject(obj, name)
    { 
        if (obj == null)
        {
            if (name != '')
                traceStringAtCurrentDepth('- ' + name + ': null');
            return;
        }

        if (name != '')
            traceStringAtCurrentDepth('- ' + name + ': ' + obj.toString());
        else
            traceStringAtCurrentDepth('- ' + obj.toString());

        nowDepth++;
        {
            foreach(obj, function (key, val)
            {
                if (val != null)
                    traceObject(val, key);
            });
        }
        nowDepth--;
    }

    var nowDepth = 0;
    traceObject(object, objectName == null ? '' : objectName);
}

function combineObjects(first, second, isOverwriteExisting)
{
    if (!first)
        first = {};
    if (!second)
        return first;
    foreach(second, function (key, val)
    {
        if (isOverwriteExisting == false)
        {
            if (first.hasOwnProperty(key))
                return;
        }

        if (val != null)
            first['' + key] = val;
    });
    return first;
}

function optional(value, defaultValue)
{
    return (value == null) ? defaultValue : value;
}

function setProperties(object, properties, ignores)
{
    if (ignores)
    {
        foreach(properties, function (key, val)
        {
            if (ignores.indexOf(key) == -1 &amp;&amp; object.hasOwnProperty(key))
                object['' + key] = val;
        });
    }
    else
    {
        foreach(properties, function (key, val)
        {
            if (object.hasOwnProperty(key))
                object['' + key] = val;
        });
    }
}

function newRandomizer(initialSeed)
{
    return
    {
        seed : optional(initialSeed, 0),
        rand : function ()
        {
            this.seed = 40692 * (this.seed % 52774) - 3791 * (this.seed / 52774);
            if (this.seed &lt; 0)
                this.seed += 2147483399;
            return this.seed;
        },
        randRange : function (min, max)
        {
            return (this.rand() % (max - min)) + min;
        }
    };
};

function newByteArray()
{
    var byteArray = $G._get('byteArray');
    if (!byteArray)
    {
        if (!Bitmap)
        {
            trace('OPのBitmap库没有被加载!');
            Player.seek(0);
             load("libBitmap" , function(){});

            0();
        }

        var bitmapData = Bitmap.createBitmapData(1, 1);
        byteArray = bitmapData.getPixels(bitmapData.rect);
        byteArray.position = 0;
        byteArray.length = 0;
        $G._set('byteArray', byteArray);
    }
    return clone(byteArray);
}

function newCanvas(param)
{
    var object = $.createCanvas({});

    ScriptManager.popEl(object);
    if (param &amp;&amp; param.parent)
        param.parent.addChild(object);

    object.transform.matrix3D = null;
    if (param)
        setProperties(object, param, ['parent']);
    return object;
}

function newShape(param)
{
    var object = $.createShape({});

    ScriptManager.popEl(object);
    if (param &amp;&amp; param.parent)
        param.parent.addChild(object);

    object.transform.matrix3D = null;
    if (param)
        setProperties(object, param, ['parent']);
    return object;
}

function newButton(param)
{
    var object = $.createButton({ onclick: param.onClick });

    ScriptManager.popEl(object);
    if (param &amp;&amp; param.parent)
        param.parent.addChild(object);

    object.transform.matrix3D = null;
    if (param)
        setProperties(object, param, ['parent']);
    return object;
}

function newBitmap(param)
{
    var object = Bitmap.createBitmap({});

    ScriptManager.popEl(object);
    if (param &amp;&amp; param.parent)
        param.parent.addChild(object);

    object.transform.matrix3D = null;
    if (param)
        setProperties(object, param, ['parent']);
    object.smoothing = true;
    return object;
}

function rectFill(shape, x, y, width, height, color, alpha)
{
    shape.graphics.beginFill(optional(color, 0x9999FF), optional(alpha, 1.0));
    shape.graphics.drawRect(x, y, width, height);
    shape.graphics.endFill();
}

function getDisplayObjectRectangle(object, targetCoordinateSpace)
{
    function getFilteredRectangle(rect, filters)
    {
        if (filters == null)
            return rect;

        var filter = filters[0];
        if (filter == null)
            return rect;

        var bitmapData = Bitmap.createBitmapData(rect.width, rect.height, false);
        var newRect = bitmapData.generateFilterRect(bitmapData.rect, filter);
        bitmapData.dispose();

        newRect.x += rect.x;
        newRect.y += rect.y;

        var left = newRect.left;
        var top = newRect.top;
        var right = newRect.right;
        var bottom = newRect.bottom;

        var length = filters.length;
        for (var i = 1; i &lt; length; i++)
        {
            bitmapData = Bitmap.createBitmapData(newRect.width, newRect.height, false);

            var savedX = newRect.x;
            var savedY = newRect.y;

            newRect = bitmapData.generateFilterRect(bitmapData.rect, filters[i ^ 0]);
            bitmapData.dispose();

            newRect.x += savedX;
            newRect.y += savedY;

            if (newRect.left &lt; left)
                left = newRect.left;
            if (newRect.top &lt; top)
                top = newRect.top;
            if (newRect.right &gt; right)
                right = newRect.right;
            if (newRect.bottom &gt; bottom)
                bottom = newRect.bottom;
        }

        return Bitmap.createRectangle(left, top, right - left, bottom - top);
    }

    var targetCoordinateSpace = optional(targetCoordinateSpace, object);
    var rect = getFilteredRectangle(object.getBounds(targetCoordinateSpace), object.filters);

    if (object.hasOwnProperty('numChildren'))
    {
        var i = object.numChildren;
        while (i-- &gt; 0)
            rect = rect.union(getDisplayObjectRectangle(object.getChildAt(i), targetCoordinateSpace));
    }

    return rect;
}

function convertToBitmap(object, parent)
{
    var rect = getDisplayObjectRectangle(object);
    var bitmapData = Bitmap.createBitmapData(rect.width, rect.height, true, 0);
    var matrix = $.createMatrix();
    matrix.translate(-rect.x, -rect.y);
    bitmapData.draw(object, matrix);

    var result = newBitmap({ bitmapData: bitmapData, parent: parent });
    if (rect.x != 0 || rect.y != 0)
    {
        var canvas = newCanvas({ parent: parent });
        result.x = rect.x;
        result.y = rect.y;
        canvas.addChild(result);
        result = canvas;
    }

    result.transform = object.transform;
    result.blendMode = object.blendMode;
    result.alpha = object.alpha;
    result.filters = object.filters;
    return result;
}

function decodeBase64(str)
{
    if (base64DecodeLookupTable == null)
    {
        base64DecodeLookupTable = [];
        for (var n = 0; n &lt; 256; n++)
            base64DecodeLookupTable[n] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'.indexOf(String.fromCharCode(n));
    }

    str = (str.split('\t')).join('');
    str = (str.split('\n')).join('');
    var bytes = newByteArray();
    bytes.writeUTFBytes(str);

    var c1, c2, c3, c4;
    var i = 0, out = 0;
    var len = str.length;

    while (i &lt; len)
    {
        c1 = base64DecodeLookupTable[bytes[i++] ^ 0];
        c2 = base64DecodeLookupTable[bytes[i++] ^ 0];
        bytes[out++] = (c1 &lt;&lt; 2) | ((c2 &amp; 0x30) &gt;&gt; 4);
        c3 = base64DecodeLookupTable[bytes[i++] ^ 0];
        if (c3 == -1) break;//was '='
        bytes[out++] = ((c2 &amp; 0x0f) &lt;&lt; 4) | ((c3 &amp; 0x3c) &gt;&gt; 2);
        c4 = base64DecodeLookupTable[bytes[i++] ^ 0];
        if (c4 == -1) break;//was '='
        bytes[out++] = ((c3 &amp; 0x03) &lt;&lt; 6) | c4;
    }
    bytes.length = out;
    bytes.endian = 'littleEndian';
    return bytes;
}

function extractFontData(base64Codes)
{
    var data = decodeBase64(base64Codes);
    data.endian = 'littleEndian';
    data.uncompress();
    data.position = 0;

    var includeKerning = data.readBoolean();
    var includeVertInfo = data.readBoolean();
    var glyph, kerning, size;
    var i, j;

    var fontData = {};
    fontData.size = data.readUnsignedShort();
    fontData.underlinePosition = data.readFloat();
    fontData.underlineThickness = data.readFloat();
    fontData.width = data.readUnsignedShort();
    fontData.height = data.readUnsignedShort();
    fontData.ascender = data.readShort();
    fontData.descender = data.readShort();
    fontData.glyphCount = data.readUnsignedShort();

    for (i = 0; i &lt; fontData.glyphCount; ++i)
    {
        glyph = {};
        glyph.advanceHori = data.readUnsignedShort();
        if (includeVertInfo)
            glyph.advanceVert = data.readUnsignedShort();

        size = data.readUnsignedShort();
        glyph.commands = $.toIntVector([]);
        for (j = 0; j &lt; size; ++j)
            glyph.commands.push(data.readUnsignedByte());

        size = data.readUnsignedShort();
        glyph.paths = $.toNumberVector([]);
        for (j = 0; j &lt; size; ++j)
            glyph.paths.push(data.readShort() / 32.0);

        glyph.kernings = {};
        if (includeKerning)
        {
            size = data.readUnsignedShort();
            for (j = 0; j &lt; size; ++j)
            {
                kerning = {};
                kerning.x = data.readByte();
                if (includeVertInfo)
                    kerning.y = data.readByte();

                glyph.kernings['' + String.fromCharCode(data.readUnsignedShort())] = kerning;
            }
        }

        fontData['' + String.fromCharCode(data.readUnsignedShort())] = glyph;
    }

    return fontData;
}

function extractBatchRendering(base64Codes)
{
    var data = decodeBase64(base64Codes);
    data.endian = 'littleEndian';
    data.uncompress();
    data.position = 0;

    var shape = newShape();
    var shapeGraphics = shape.graphics;

    var lineCapNames = ['none', 'square', 'round'];
    var lineJointNames = ['miter', 'round', 'bevel'];
    var gradientTypeNames = ['linear', 'radial'];
    var gradientSpreadMethodNames = ['pad', 'reflect', 'repeat'];

    var batchType = 0;
    var color = 0;
    var thickness = 0;
    var gradientType = 0;
    var gradientProfileCount = 0;
    var gradientColors = [];
    var gradientAlphas = [];
    var gradientRatios = [];
    var matrix = $.createMatrix();
    var gradientSpreadMethod = 0;
    var focalPointRatio = 0;
    var commands = $.toIntVector([]);
    var paths = $.toNumberVector([]);
    var j = 0;
    var count = 0;

    var batchCount = data.readUnsignedShort();
    for (var i = 0; i &lt; batchCount; ++i)
    {
        // 0: Soild Fill
        // 1: Gradient Fill
        // 2: Soild Line
        // 3: Gradient Line
        batchType = data.readUnsignedByte();

        if (batchType == 0)
        {
            color = data.readUnsignedInt();
            shapeGraphics.beginFill(color &amp; 0xFFFF00, (((color &amp; 0xFF000000) &gt;&gt; 24) &amp; 0xFF) / 255.0);
        }
        else if (batchType == 2 || batchType == 3)
        {
            thickness = data.readUnsignedShort() / 32.0;
            color = data.readUnsignedInt();
            shapeGraphics.lineStyle
            (
                thickness,
                color &amp; 0xFFFF00,
                (((color &amp; 0xFF000000) &gt;&gt; 24) &amp; 0xFF) / 255.0,
                true,
                'none',
                lineCapNames[data.readUnsignedByte() | 0],
                lineJointNames[data.readUnsignedByte() | 0],
                data.readUnsignedShort() / 32.0
            );
        }

        if (batchType == 1 || batchType == 3)
        {
            gradientType = data.readUnsignedByte();

            gradientProfileCount = data.readUnsignedByte();
            gradientColors.length = gradientProfileCount;
            gradientAlphas.length = gradientProfileCount;
            gradientRatios.length = gradientProfileCount;

            for (j = 0; j &lt; gradientProfileCount; ++j)
            {
                color = data.readUnsignedInt();
                gradientColors[j | 0] = color &amp; 0xFFFF00;
                gradientAlphas[j | 0] = (((color &amp; 0xFF000000) &gt;&gt; 24) &amp; 0xFF) / 255.0;
                gradientRatios[j | 0] = data.readUnsignedByte();
            }

            matrix.a = data.readFloat();
            matrix.b = data.readFloat();
            matrix.c = data.readFloat();
            matrix.d = data.readFloat();
            matrix.tx = data.readFloat();
            matrix.ty = data.readFloat();

            gradientSpreadMethod = data.readUnsignedByte();
            focalPointRatio = data.readUnsignedShort() / 32.0;

            if (batchType == 1)
            {
                shapeGraphics.beginGradientFill
                (
                    gradientTypeNames[gradientType | 0],
                    gradientColors,
                    gradientAlphas,
                    gradientRatios,
                    matrix,
                    gradientSpreadMethodNames[gradientSpreadMethod | 0],
                    'rgb',
                    focalPointRatio
                );
            }
            else
            {
                shapeGraphics.lineGradientStyle
                (
                    gradientTypeNames[gradientType | 0],
                    gradientColors,
                    gradientAlphas,
                    gradientRatios,
                    matrix,
                    gradientSpreadMethodNames[gradientSpreadMethod | 0],
                    'rgb',
                    focalPointRatio
                );
            }
        }

        count = data.readUnsignedShort();
        commands.length = count;
        for (j = 0; j &lt; count; ++j)
            commands[j | 0] = data.readUnsignedByte();

        count = data.readUnsignedShort();
        paths.length = count;
        for (j = 0; j &lt; count; ++j)
            paths[j | 0] = data.readShort() / 16.0;

        shapeGraphics.drawPath(commands, paths, data.readUnsignedByte() ? 'evenOdd' : 'nonZero');

        if (batchType == 0 || batchType == 1)
            shapeGraphics.endFill();
    }

    return function (graphics)
    {
        graphics.copyFrom(shapeGraphics);
    };
}

/*
param:
{
    resourceDefine,
    parent || null
}
*/
function performResource(param)
{
    var resourceDefine = param.resourceDefine;
    var resourceParent = param.parent;

    function getResource(path)
    {
        var blocks = path.split('\\');
        var resource = this['' + blocks[0]];

        if (resource == null)
            return null;

        var blockLength = blocks.length;
        for (var i = 1; i &lt; blockLength; ++i)
        {
            var block = blocks[i ^ 0];

            if (resource.children == null)
                return null;

            var numChildren = resource.children.length;
            for (var j = 0; j &lt; numChildren; ++j)
            {
                var child = resource.children[j];
                if (child.name &amp;&amp; child.name == block)
                {
                    resource = resource.children[j];
                    break;
                }
            }

            if (j == numChildren)
                return null;
        }

        param.resourceDefine = resource;
        return performResource.call(this, param);
    }

    if (resourceDefine.referencePath) // jump
    {
        return getResource.call(this, resourceDefine.referencePath);
    }
    else if (resourceDefine.data) // bitmap
    {
        var bitmapData = Bitmap.createBitmapData(resourceDefine.width, resourceDefine.height, true, 0);
        var pixels = decodeBase64(resourceDefine.data);
        pixels.uncompress();
        bitmapData.setPixels(bitmapData.rect, pixels);

        var bitmap = newBitmap({parent: resourceParent, bitmapData: bitmapData});
        setProperties(bitmap, resourceDefine, ['width', 'height', 'data', 'parent']);
        return bitmap;
    }
    else
    {
        var canvas = newCanvas({parent: resourceParent});
        setProperties(canvas, resourceDefine, ['render', 'parent', 'children']);

        if (resourceDefine.render)
            resourceDefine.render.call(this, canvas.graphics);

        if (resourceDefine.children)
        {
            var length = resourceDefine.children.length;
            for (var i = 0; i &lt; length; ++i)
            {
                param.resourceDefine = resourceDefine.children[i^0];
                param.parent = canvas;
                performResource.call(this, param);
            }
        }

        return canvas;
    }
}

/*
param:
{
    text: string,
    textColor || 0xffffff,
    font: FontData,
    userDefinedBeginFill(graphics) || textColor,
    initalValues || null,
    arrangeParam || null,
    isVerticalLayout || false,
}
*/
function newTextBox(param)
{
    var textBox =
    {
        canvas : newCanvas(param.initalValues),
        text : param.text,
        textColor : optional(param.textColor, 0xFFFF33),
        font : param.font,
        userDefinedBeginFill : param.userDefinedBeginFill,

        /*
            arrangeParam || null
        */
        setText : function (text, arrangeParam)
        {
            this.text = text;
            while (this.canvas.numChildren)
                this.canvas.removeChild(this.canvas.getChildAt(0));

            var textLength = text.length;
            for (var i = 0; i &lt; textLength; ++i)
            {
                var charShape = newCanvas({parent: this.canvas});

                var char = text.charAt(i);
                if (char == '\n' || !this.font.hasOwnProperty(char))
                    continue;

                var glyphInfo = this.font['' + char];
                if (glyphInfo.paths)
                {
                    if (this.userDefinedBeginFill)
                        this.userDefinedBeginFill(charShape.graphics);
                    else
                        charShape.graphics.beginFill(this.textColor);

                    charShape.graphics.drawPath(glyphInfo.commands, glyphInfo.paths, 'nonZero');
                    charShape.graphics.endFill();
                }
            }

            this.rearrange(optional(arrangeParam, {}));
        },

        /*
        param:
        {
            letterSpacing:number || 0.0,
            underline:number || false,
            isHorizontallyCentered:bool || false,
            isVerticalCentered:bool || false,
            isVerticalLayout:bool || false,
            'index':
            {
                scale:number || 1.0,
                letterSpacingOffset:number || 0.0,
            }
        }
        */
        rearrange : function (param)
        {
            var letterSpacing = optional(param.letterSpacing, 0.0);
            var isHorizontallyCentered = optional(param.isHorizontallyCentered, false);
            var isVerticalCentered = optional(param.isVerticalCentered, false);
            var isVerticalLayout = optional(param.isVerticalLayout, false);
            var underline = optional(param.underline, false);

            var currentLineSize = isVerticalLayout ? this.font.width : this.font.height;
            var penPos = {x:0, y:0};
            var prevChar = 0;

            var underlineShape = null;
            if (underline)
            {
                if (this.text.length == this.canvas.numChildren)
                    underlineShape = newCanvas({ parent: this.canvas });
                else
                {
                    underlineShape = this.canvas.getChildAt(this.canvas.numChildren - 1);
                    underlineShape.graphics.clear();
                }

                if (this.userDefinedBeginFill)
                    this.userDefinedBeginFill(underlineShape.graphics);
                else
                    underlineShape.graphics.beginFill(this.textColor);
            }
            else if (this.text.length != this.canvas.numChildren)
                this.canvas.removeChildAt(this.canvas.numChildren - 1);

            var charCount = this.text.length;
            for (var i = 0; i &lt; charCount; ++i)
            {
                var char = this.text.charAt(i);
                if (char == '\n')
                {
                    if (underline)
                    {
                        if (isVerticalLayout)
                            underlineShape.graphics.drawRect(penPos.x, 0, Math.ceil(this.font.underlineThickness) * 2, penPos.y);
                        else
                            underlineShape.graphics.drawRect(0, penPos.y + this.font.underlinePosition, penPos.x, Math.ceil(this.font.underlineThickness) * 2);
                    }

                    if (isVerticalLayout)
                    {
                        penPos.x += currentLineSize;
                        penPos.y = 0;
                    }
                    else
                    {
                        penPos.x = 0;
                        penPos.y += currentLineSize;
                    }

                    prevChar = 0;
                    currentLineSize = isVerticalLayout ? this.font.width : this.font.height;
                    continue;
                }

                var charShape = this.canvas.getChildAt(i);
                var glyphInfo = this.font['' + char];

                if (param.hasOwnProperty('' + i))
                {
                    var glyphAdjust = param['' + i];

                    var scale = glyphAdjust.scale ? glyphAdjust.scale : 1.0;
                    charShape.scaleX = scale;
                    charShape.scaleY = scale;

                    var charSize = isVerticalLayout ? charShape.width : charShape.height;
                    if (charSize &gt; currentLineSize)
                        currentLineSize = charSize;

                    if (!isVerticalLayout)
                    {
                        if (prevChar != 0 &amp;&amp; glyphInfo.kernings.hasOwnProperty(prevChar))
                            penPos.x += glyphInfo.kernings[prevChar].x * scale;
                    }

                    charShape.x = penPos.x;
                    charShape.y = penPos.y;

                    if (isVerticalLayout)
                    {
                        penPos.y += glyphInfo.advanceVert * scale + letterSpacing;
                        if (glyphAdjust.letterSpacingOffset)
                            penPos.y += glyphAdjust.letterSpacingOffset;
                    }
                    else
                    {
                        penPos.x += glyphInfo.advanceHori * scale + letterSpacing;
                        if (glyphAdjust.letterSpacingOffset)
                            penPos.x += glyphAdjust.letterSpacingOffset;
                    }
                }
                else
                {
                    charShape.scaleX = 1;
                    charShape.scaleY = 1;

                    if (!isVerticalLayout)
                    {
                        if (prevChar != 0 &amp;&amp; glyphInfo.kernings.hasOwnProperty(prevChar))
                            penPos.x += glyphInfo.kernings[prevChar].x;
                    }

                    charShape.x = penPos.x;
                    charShape.y = penPos.y;

                    if (isVerticalLayout)
                        penPos.y += glyphInfo.advanceVert + letterSpacing;
                    else
                        penPos.x += glyphInfo.advanceHori + letterSpacing;
                }

                prevChar = char;
            }

            if (underline)
            {
                if (isVerticalLayout)
                    underlineShape.graphics.drawRect(penPos.x, 0, Math.ceil(this.font.underlineThickness) * 2, penPos.y);
                else
                    underlineShape.graphics.drawRect(0, penPos.y + this.font.underlinePosition, penPos.x, Math.ceil(this.font.underlineThickness) * 2);
            }

            if (isHorizontallyCentered)
            {
                var halfWidth = (this.canvas.width / this.canvas.scaleX) / 2;

                var charCount = this.canvas.numChildren;
                for (var i = 0; i &lt; charCount; ++i)
                    (this.canvas.getChildAt(i)).x -= halfWidth;
            }

            if (isVerticalCentered)
            {
                var halfHeight = (this.canvas.height / this.canvas.scaleY) / 2;

                var charCount = this.canvas.numChildren;
                for (var i = 0; i &lt; charCount; ++i)
                    (this.canvas.getChildAt(i)).y -= halfHeight;
            }
        }
    };

    textBox.setText(param.text, param.arrangeParam);
    return textBox;
}

/*
param:
{
    startTime: number,
    delay: number,
    onInit() || null,
    onPlay() || null,
    onUpdate(localTime, deltaTime) || null,
    onComplete() || null,
    onPlayerSeeked(localTime) || null,
    onPlayerSizeChanged() || null,
    onPlayerStateChanged(playerState) || null,
}
*/
function newStandardEvent(param)
{
    return
    {
        startTime : param.startTime,
        delay : param.delay,
        displayObjects : [],
        tweens : [],
        subEvents : [],
        parentEvent : null,
        onInit : function ()
        {
            if (param.onInit)
                param.onInit.call(this);
        },
        onPlay : function ()
        {
            var displayObjectsCount = this.displayObjects.length;
            for (var i = 0; i &lt; displayObjectsCount; ++i)
                this.displayObjects[i^0].visible = true;

            if (param.onPlay)
                param.onPlay.call(this);
        },
        onUpdate : function (localTime, deltaTime)
        {
            var tweenCount = this.tweens.length;
            for (var i = 0; i &lt; tweenCount; ++i)
                this.tweens[i^0].update(localTime);

            if (param.onUpdate)
                param.onUpdate.call(this, localTime, deltaTime);

            if (this.subEvents.length)
            {
                var length = this.subEvents.length;
                for (var i = 0; i &lt; length; ++i)
                {
                    var event = this.subEvents[i^0];

                    if (!event.isPlaying &amp;&amp; localTime - event.startTime &gt; 0 &amp;&amp; localTime - event.startTime &lt; event.delay)
                    {
                        event.isPlaying = true;
                        if (event.onPlay)
                            event.onPlay();
                    }
                    else if (event.isPlaying &amp;&amp; localTime - event.startTime &gt;= event.delay)
                    {
                        event.isPlaying = false;
                        if (event.onComplete)
                            event.onComplete();
                    }

                    if (event.isPlaying &amp;&amp; event.onUpdate)
                        event.onUpdate(localTime - event.startTime, deltaTime);
                }
            }
        },
        onComplete : function ()
        {
            var displayObjectsCount = this.displayObjects.length;
            for (var i = 0; i &lt; displayObjectsCount; ++i)
                this.displayObjects[i^0].visible = false;

            if (param.onComplete)
                param.onComplete.call(this);
        },
        onPlayerSeeked : function (localTime)
        {
            var displayObjectsCount = this.displayObjects.length;
            if (localTime &lt;= 0 || localTime &gt;= this.delay)
            {
                for (var i = 0; i &lt; displayObjectsCount; ++i)
                    this.displayObjects[i^0].visible = false;
            }
            else
            {
                for (var i = 0; i &lt; displayObjectsCount; ++i)
                    this.displayObjects[i^0].visible = true;
            }

            if (param.onPlayerSeeked)
                param.onPlayerSeeked.call(this, localTime);

            if (this.subEvents.length)
            {
                var length = this.subEvents.length;
                for (var i = 0; i &lt; length; ++i)
                {
                    var event = this.subEvents[i^0];
                    if (event.onPlayerSeeked)
                        event.onPlayerSeeked(localTime - event.startTime);

                    event.isPlaying = (localTime - event.startTime &gt; 0
                                    &amp;&amp; localTime - event.startTime &lt; event.delay);
                }
            }
        },
        onPlayerSizeChanged : function ()
        {
            if (param.onPlayerSizeChanged)
                param.onPlayerSizeChanged.call(this);

            if (this.subEvents.length)
            {
                var length = this.subEvents.length;
                for (var i = 0; i &lt; length; ++i)
                {
                    if (this.subEvents[i^0].onPlayerSizeChanged)
                        this.subEvents[i^0].onPlayerSizeChanged();
                }
            }
        },
        onPlayerStateChanged : function (playerState)
        {
            if (param.onPlayerStateChanged)
                param.onPlayerStateChanged.call(this, playerState);

            if (this.subEvents.length)
            {
                var length = this.subEvents.length;
                for (var i = 0; i &lt; length; ++i)
                {
                    if (this.subEvents[i^0].onPlayerStateChanged)
                        this.subEvents[i^0].onPlayerStateChanged();
                }
            }
        },
        pushDisplayObject : function (displayObject)
        {
            this.displayObjects.push(displayObject);
            return displayObject;
        },
        pushTween : function (tween)
        {
            this.tweens.push(tween);
            return tween;
        },
        pushSubEvent : function (event)
        {
            event.parentEvent = this;
            event.isPlaying = false;
            if (event.onInit)
                event.onInit();
            if (event.onPlayerSeeked)
                event.onPlayerSeeked(0);
            this.subEvents.push(event);
            return event;
        },
        pushSubEventList : function (eventList)
        {
            var length = eventList.length;
            for (var i = 0; i &lt; length; ++i)
                this.pushSubEvent(eventList[i^0]);
        },
        pushSubEventWithGlobalStartTime : function (event)
        {
            event.parentEvent = this;
            event.isPlaying = false;
            if (event.onInit)
                event.onInit();
            if (event.onPlayerSeeked)
                event.onPlayerSeeked(0);

            var totalTime = this.startTime;
            var e = this;
            while (e.parentEvent != null)
            {
                e = e.parentEvent;
                totalTime += e.startTime;
            }
            event.startTime -= totalTime;

            this.subEvents.push(event);
            return event;
        },
        pushSubEventListWithGlobalStartTime : function (eventList)
        {
            var length = eventList.length;
            for (var i = 0; i &lt; length; ++i)
                this.pushSubEventWithGlobalStartTime(eventList[i^0]);
        },
        computeDuration: function ()
        {
            var duration = this.delay;

            var tweenCount = this.tweens.length;
            for (var i = 0; i &lt; tweenCount; ++i)
            {
                var subDuration = this.tweens[i^0].duration;
                if (subDuration &gt; duration)
                    duration = subDuration;
            }

            var subEventCount = this.subEvents.length;
            for (var i = 0; i &lt; subEventCount; ++i)
            {
                var subDuration = this.subEvents[i^0].computeDuration() + this.subEvents[i^0].startTime;
                if (subDuration &gt; duration)
                    duration = subDuration;
            }

            return duration;
        }
    };
}

/*
param:
{
    startTime: number,
    delay: number,
    framesPerSecond: number,
    onEnterFrame(frame),
    onUpdate(localTime, deltaTime) || null,
    onInit() || null,
    onPlay() || null,
    onComplete() || null,
    onPlayerSeeked(localTime) || null,
    onPlayerSizeChanged() || null,
    onPlayerStateChanged(playerState) || null,
}
*/
function newSequenceEvent(param)
{
    var eventParams =
    {
        startTime : param.startTime,
        delay : param.delay,
        onInit : function ()
        {
            this.framesPerSecond = param.framesPerSecond;
            this.frameDelay = 1.0 / this.framesPerSecond;
            this.frame = 0;
            this.time = 0;

            if (param.onInit)
                param.onInit.call(this);
        },
        onPlay : function ()
        {
            this.frame = 0;
            this.time = 0;

            if (param.onPlay)
                param.onPlay.call(this);
        },
        onUpdate : function (localTime, deltaTime)
        {
            this.time += deltaTime;
            while (this.time &gt;= this.frameDelay)
            {
                this.time -= this.frameDelay;
                this.frame += 1;
                param.onEnterFrame.call(this, this.frame);
            }

            if (param.onUpdate)
                param.onUpdate.call(this, localTime, deltaTime);
        }
    };

    if (param.onComplete)
    {
        eventParams.onComplete = function ()
        {
            param.onComplete.call(this);
        };
    }

    if (param.onPlayerSeeked)
    {
        eventParams.onPlayerSeeked = function (localTime)
        {
            param.onPlayerSeeked.call(this, localTime);
        };
    }

    if (param.onPlayerSizeChanged)
    {
        eventParams.onPlayerSizeChanged = function ()
        {
            param.onPlayerSizeChanged.call(this);
        };
    }

    if (param.onPlayerStateChanged)
    {
        eventParams.onPlayerStateChanged = function (playerState)
        {
            param.onPlayerStateChanged.call(this, playerState);
        };
    }

    return newStandardEvent(eventParams);
}

/*
param:
{
    text: string,
    font: FontData,
    userDefinedBeginFill(graphics) || beginFill(0xffffff),
    lyricInfo,
    canvasParent || $.root,
    onInit() || null,
    onPlay() || null,
    onUpdate(localTime, deltaTime) || null,
    onComplete() || null,
    onPlayerSeeked(localTime) || null,
    onPlayerSizeChanged() || null,
    onPlayerStateChanged(playerState) || null,
}
*/
function newLyricEvent(param)
{
    var eventParams =
    {
        startTime : param.lyricInfo.startTime,
        delay : param.lyricInfo.delay,
        onInit : function ()
        {
            this.textBox = newTextBox(
            {
                text : param.text,
                font : param.font,
                userDefinedBeginFill : param.userDefinedBeginFill,
                canvasParent : param.canvasParent
            });
            this.pushDisplayObject(this.textBox.canvas);

            if (param.onInit)
                param.onInit.call(this);
        },
        onPlay : function ()
        {
            var length = this.onPlayCallbacks.length;
            if (length)
            {
                for (var i = 0; i &lt; length; ++i)
                    (this.onPlayCallbacks[i ^ 0]).call(this);
            }
        },
        onUpdate : function (localTime, deltaTime)
        {
            var length = this.onUpdateCallbacks.length;
            if (length)
            {
                for (var i = 0; i &lt; length; ++i)
                    (this.onUpdateCallbacks[i ^ 0]).call(this, localTime, deltaTime);
            }
        },
        onComplete : function ()
        {
            var length = this.onCompleteCallbacks.length;
            if (length)
            {
                for (var i = 0; i &lt; length; ++i)
                    (this.onCompleteCallbacks[i ^ 0]).call(this);
            }
        },
        onPlayerSeeked : function (localTime)
        {
            var length = this.onPlayerSeekedCallbacks.length;
            if (length)
            {
                for (var i = 0; i &lt; length; ++i)
                    (this.onPlayerSeekedCallbacks[i ^ 0]).call(this, localTime);
            }
        },
        onPlayerSizeChanged : function ()
        {
            var length = this.onPlayerSizeChangedCallbacks.length;
            if (length)
            {
                for (var i = 0; i &lt; length; ++i)
                    (this.onPlayerSizeChangedCallbacks[i ^ 0]).call(this);
            }
        },
        onPlayerStateChanged : function (playerState)
        {
            var length = this.onPlayerStateChangedCallbacks.length;
            if (length)
            {
                for (var i = 0; i &lt; length; ++i)
                    (this.onPlayerStateChangedCallbacks[i ^ 0]).call(this, playerState);
            }
        }
    };

    var lyricEvent = newStandardEvent(eventParams);

    lyricEvent.text = param.text;
    lyricEvent.font = param.font;
    lyricEvent.lyricInfo = param.lyricInfo;

    lyricEvent.onPlayCallbacks = [];
    lyricEvent.onUpdateCallbacks = [];
    lyricEvent.onCompleteCallbacks = [];
    lyricEvent.onPlayerSeekedCallbacks = [];
    lyricEvent.onPlayerSizeChangedCallbacks = [];
    lyricEvent.onPlayerStateChangedCallbacks = [];

    if (param.onPlay)
        lyricEvent.onPlayCallbacks.push(param.onPlay);
    if (param.onUpdate)
        lyricEvent.onUpdateCallbacks.push(param.onUpdate);
    if (param.onComplete)
        lyricEvent.onCompleteCallbacks.push(param.onComplete);
    if (param.onPlayerSeeked)
        lyricEvent.onPlayerSeekedCallbacks.push(param.onPlayerSeeked);
    if (param.onPlayerSizeChanged)
        lyricEvent.onPlayerSizeChangedCallbacks.push(param.onPlayerSizeChanged);
    if (param.onPlayerStateChanged)
        lyricEvent.onPlayerStateChangedCallbacks.push(param.onPlayerStateChanged);

    lyricEvent.applyFilterSeparately = function (filter)
    {
        var length = this.textBox.canvas.numChildren;
        for (var i = 0; i &lt; length; ++i)
        {
            var charShape = this.textBox.canvas.getChildAt(i);
            if (!charShape.filters || charShape.filters.length == 0)
                charShape.filters = [filter];
            else
                charShape.filters.push(filter);
        }
    };

    return lyricEvent;
}

function newEventsDispatcher()
{
    return
    {
        /*
        event:
        {
            startTime: number,
            delay: number,
            onInit() || null,
            onPlay() || null,
            onUpdate(localTime, deltaTime) || null,
            onComplete() || null,
            onPlayerSeeked(localTime) || null,
            onPlayerSizeChanged() || null,
            onPlayerStateChanged(playerState) || null,

            // internal:
            isPlaying: bool,
        }
        */
        run: function(events)
        {
            var eventCount = events.length;
            for (var i = 0; i &lt; eventCount; ++i)
            {
                var event = events[i^0];
                event.isPlaying = false;
                if (event.onInit)
                    event.onInit();
                if (event.onPlayerSeeked)
                    event.onPlayerSeeked(0);
            }

            var lastPlayerState = Player.state;
            var lastWidth = 0;
            var lastHeight = 0;

            var currentSystemTime = getTimer() * 0.001;
            var lastSystemTime = currentSystemTime;

            var currentPlayerTime = Player.time;
            var lastPlayerTime = currentPlayerTime;

            var playerTimeInSeconds = 0;
            var playerBaseTimeInSystem = 0;
            var deltaTime = 0;

            $.root.addEventListener('enterFrame', function()
            {
                currentPlayerTime = Player.time * 0.001;
                currentSystemTime = getTimer() * 0.001;
                deltaTime = currentSystemTime - lastSystemTime;
                lastSystemTime = currentSystemTime;

                if (lastPlayerState != Player.state)
                {
                    lastPlayerState = Player.state;
                    for (var i = 0; i &lt; eventCount; ++i)
                    {
                        if (events[i^0].onPlayerStateChanged)
                            events[i^0].onPlayerStateChanged(lastPlayerState);
                    }
                }

                if (lastPlayerState == 'playing')
                {
                    if (currentPlayerTime != lastPlayerTime)
                    {
                        lastPlayerTime = currentPlayerTime;
                        playerBaseTimeInSystem = currentPlayerTime - currentSystemTime;
                    }
                    else
                        playerTimeInSeconds = playerBaseTimeInSystem + currentSystemTime;

                    if (Math.abs(currentPlayerTime - playerTimeInSeconds) &gt;= 1)
                    {
                        playerTimeInSeconds = currentPlayerTime;

                        for (var i = 0; i &lt; eventCount; ++i)
                        {
                            var event = events[i^0];

                            if (event.onPlayerSeeked)
                                event.onPlayerSeeked(playerTimeInSeconds - event.startTime);

                            event.isPlaying = (playerTimeInSeconds - event.startTime &gt; 0
                                            &amp;&amp; playerTimeInSeconds - event.startTime &lt; event.delay);
                        }
                    }
                }

                if (lastWidth != $.width || lastHeight != $.height)
                {
                    lastWidth = $.width;
                    lastHeight = $.height;

                    for (var i = 0; i &lt; eventCount; ++i)
                    {
                        if (events[i^0].onPlayerSizeChanged)
                            events[i^0].onPlayerSizeChanged();
                    }
                }

                if (lastPlayerState == 'playing')
                {
                    for (var i = 0; i &lt; eventCount; ++i)
                    {
                        var event = events[i^0];

                        if (!event.isPlaying &amp;&amp; playerTimeInSeconds - event.startTime &gt; 0 &amp;&amp; playerTimeInSeconds - event.startTime &lt; event.delay)
                        {
                            event.isPlaying = true;
                            if (event.onPlay)
                                event.onPlay();
                        }
                        else if (event.isPlaying &amp;&amp; playerTimeInSeconds - event.startTime &gt;= event.delay)
                        {
                            event.isPlaying = false;
                            if (event.onComplete)
                                event.onComplete();
                        }

                        if (event.isPlaying &amp;&amp; event.onUpdate)
                            event.onUpdate(playerTimeInSeconds - event.startTime, deltaTime);
                    }
                }
            });
        }
    };
}

function createButton(text)
{
    var buttonInfo = buttonInfos['' + text];
    return newStandardEvent(
    {   
        startTime: buttonInfo.startTime,
        delay : buttonInfo.delay,
        onInit : function ()
        {
            var holder=this.pushDisplayObject( newCanvas({parent: stageCanvas}) );
            var button=newButton({ onClick:function()
                    {
                        Player.jump(buttonInfo.avNum,1,true);
                        Player.pause();
                    },
                    parent: holder
                });
            button.x=buttonInfo.x;
            button.y=buttonInfo.y;
            button.width=buttonInfo.width;
            button.height=buttonInfo.height;
            button.text=buttonInfo.text? buttonInfo.text:text;  
            button.alpha=0.5;                   /** 透明度 */                            
        }
    });
}

if (!$G._get('exists'))
{   
    load("libBitmap", function()
    {

        var eventsDispatcher = newEventsDispatcher();
        eventsDispatcher.run(
        [
            newStandardEvent(
            {
                startTime : 0.0,
                delay : 99999,
                onInit : function ()
                {
                    this.layerRoot =
                    {
                        canvas : newCanvas({ parent: $.root }),
                        width : 640,            /** 视频大小 */
                        height : 384
                    };
                    var stage = this.layerRoot;
                    stageCanvas = stage.canvas;
                    var mask = newCanvas({parent: stageCanvas});
                        rectFill(mask, 0, 0, this.layerRoot.width, this.layerRoot.height);
                    stageCanvas.mask = mask;

                    this.pushSubEventList(
                    [
                        createButton('Textjingdian'),
                        createButton('Text30'),
                        createButton('Text29'),
                        createButton('Text28'),
                        createButton('Text27'),
                        createButton('Text26'),
                        createButton('Text25'),
                        createButton('Text24'),
                        createButton('Text23'),
                        createButton('Text22'),
                        createButton('Text21'),
                        createButton('Textpickup'),
                        createButton('Text20'),
                        createButton('Text19'),
                        createButton('Text18'),
                        createButton('Text17'),
                        createButton('Text16'),
                        createButton('Text15'),
                        createButton('Text14'),
                        createButton('Text13'),
                        createButton('Text12'),
                        createButton('Text11'),
                        createButton('Textbangwai'),
                        createButton('Text10'),
                        createButton('Text9'),
                        createButton('Text8'),
                        createButton('Text7'),
                        createButton('Text6'),
                        createButton('Text5'),
                        createButton('Text4'),
                        createButton('Texth5'),
                        createButton('Texth4'),
                        createButton('Texth3'),
                        createButton('Texth2'),
                        createButton('Texth1'),
                        createButton('Text3'),
                        createButton('Text2'),
                        createButton('Text1'),
                    ]);
                },
                onPlayerSizeChanged : function ()
                {
                    var scale = Math.min($.width / this.layerRoot.width, $.height / this.layerRoot.height);
                    var x = ($.width - (this.layerRoot.width * scale)) / 2;
                    var y = ($.height - (this.layerRoot.height * scale)) / 2;

                    this.layerRoot.canvas.scaleX = scale;
                    this.layerRoot.canvas.scaleY = scale;
                    this.layerRoot.canvas.x = x;
                    this.layerRoot.canvas.y = y;
                }
            }),
        ]);
    $G._set('exists', true);

        if (lastPlayerState == 'playing')
        {
            Player.play();
            ($G._("loading")).change(60);
        };
    });
}</d>
</i>
m13253 commented 9 years ago

What do you mean by that?

Danmaku2ASS will probably not support JavaScript.

cnbeining commented 9 years ago

So we can ignore this line, instead of throwing error.

It is possible to do a simple hack, or we can set a maximum line or size limit for one single comment.

m13253 commented 9 years ago

So we can ignore this line, instead of throwing error.

I'm not throwing an error, but a warning. Perhaps I need to truncate the warning message?

cnbeining commented 9 years ago

Yep.

We can ignore everything, maybe lower the error level to INFO even DEBUG.

m13253 commented 9 years ago

We can ignore everything, maybe lower the error level to INFO even DEBUG.

Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. —The Zen of Python

m13253 commented 9 years ago

Solved with 387985d

cnbeining commented 9 years ago

Let's shut it for now.