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  }