github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/public/libs/CommentCoreLibrary/parsers/BilibiliFormat.js (about) 1 /** 2 Bilibili Format 3 Licensed Under MIT License 4 Takes in an XMLDoc and parses that into a Generic Comment List 5 **/ 6 function BilibiliParser(xmlDoc){ 7 //Parse into Array 8 function fillRGB(string){ 9 while(string.length < 6){ 10 string = "0" + string; 11 } 12 return string; 13 } 14 15 //Format the bili output to be json-valid 16 function format(string){ 17 return string.replace(/\t/,"\\t"); 18 } 19 20 var elems = xmlDoc.getElementsByTagName('d'); 21 var tlist = []; 22 for(var i=0;i<elems.length;i++){ 23 if(elems[i].getAttribute('p') != null){ 24 var opt = elems[i].getAttribute('p').split(','); 25 var text = elems[i].childNodes[0].nodeValue; 26 var obj = {}; 27 obj.stime = Math.round(parseFloat(opt[0]*1000)); 28 obj.size = parseInt(opt[2]); 29 obj.color = "#" + fillRGB(parseInt(opt[3]).toString(16)); 30 obj.mode = parseInt(opt[1]); 31 obj.date = parseInt(opt[4]); 32 obj.pool = parseInt(opt[5]); 33 if(opt[7] != null) 34 obj.dbid = parseInt(opt[7]); 35 obj.hash = opt[6]; 36 obj.border = false; 37 if(obj.mode < 7){ 38 obj.text = text.replace(/(\/n|\\n|\n|\r\n)/g, "\n"); 39 }else{ 40 if(obj.mode == 7){ 41 try{ 42 adv = JSON.parse(format(text)); 43 obj.shadow = true; 44 obj.x = parseInt(adv[0]); 45 obj.y = parseInt(adv[1]); 46 obj.text = adv[4].replace(/(\/n|\\n|\n|\r\n)/g, "\n"); 47 obj.rZ = 0; 48 obj.rY = 0; 49 if(adv.length >= 7){ 50 obj.rZ = parseInt(adv[5]); 51 obj.rY = parseInt(adv[6]); 52 } 53 obj.movable = false; 54 if(adv.length >= 11){ 55 obj.movable = true; 56 obj.toX = adv[7]; 57 obj.toY = adv[8]; 58 obj.moveDuration = 500; 59 obj.moveDelay = 0; 60 if(adv[9]!='') 61 obj.moveDuration = adv[9]; 62 if(adv[10]!="") 63 obj.moveDelay = adv[10]; 64 if(adv.length > 11){ 65 obj.shadow = adv[11]; 66 if(obj.shadow === "true"){ 67 obj.shadow = true; 68 } 69 if(obj.shadow === "false"){ 70 obj.shadow = false; 71 } 72 if(adv[12]!=null) 73 obj.font = adv[12]; 74 } 75 } 76 obj.duration = 2500; 77 if(adv[3] < 12){ 78 obj.duration = adv[3] * 1000; 79 } 80 obj.alphaFrom = 1; 81 obj.alphaTo = 1; 82 var tmp = adv[2].split('-'); 83 if(tmp != null && tmp.length>1){ 84 obj.alphaFrom = parseFloat(tmp[0]); 85 obj.alphaTo = parseFloat(tmp[1]); 86 } 87 }catch(e){ 88 console.log('[Err] Error occurred in JSON parsing'); 89 console.log('[Dbg] ' + text); 90 } 91 }else if(obj.mode == 8){ 92 obj.code = text; //Code comments are special 93 } 94 } 95 //Before we push 96 if(obj.text != null) 97 obj.text = obj.text.replace(/\u25a0/g,"\u2588"); 98 tlist.push(obj); 99 } 100 } 101 return tlist; 102 }