/** * Parses SRT lists and W3C Timed Text captions. * * @author Jeroen Wijering * @version 1.2 **/ import com.jeroenwijering.utils.StringMagic; class com.jeroenwijering.utils.CaptionsParser { /** URL of the xml file to parse. **/ private var parseURL:String; /** The array the XML is parsed into **/ public var parseArray:Array; /** LoadVars Object the SRT file is loaded into. **/ private var parseLV:LoadVars; /** Flash XML object the TT file is loaded into. **/ private var parseXML:XML; /** Constructor. **/ function CaptionsParser() {}; /** Parse an XML list. **/ public function parse(url:String):Void { parseURL = url; parseArray = new Array(); parseURL.indexOf(".srt") == -1 ? parseTT(): parseSRT(); }; /** Convert SRT file to subtitle array **/ private function parseSRT() { var ref = this; parseLV = new LoadVars(); parseLV.onLoad = function(scs:Boolean) { if(scs) { var str = ""; var j = -2; while(j < unescape(this).length) { var oj = j; j = unescape(this).indexOf('=&',j+2); j == -1 ? j = unescape(this).length: null; str = "&"+unescape(this).substring(oj+2,j) + str; } var arr = str.split("\r\n\r\n"); for(var i=0; i -1) { var brp = arr[i].indexOf("\r\n",tst+5); arr[i] = arr[i].substr(0,brp)+"
" + arr[i].substr(brp+2); } obj["txt"] = arr[i].substr(tst); ref.parseArray.push(obj); } } else { parseArray.push( {txt:"File not found: " + ref.parseURL,bgn:1,dur:5}); } if( parseArray.length == 0) { parseArray.push({txt:"Empty file: " + ref.parseURL,bgn:1,dur:5}); } delete ref.parseLV; ref.onParseComplete(); }; if(_root._url.indexOf("file://") > -1) { parseLV.load(parseURL); } else if(parseURL.indexOf('?') > -1) { parseLV.load(parseURL+'&'+random(999)); } else { parseLV.load(parseURL+'?'+random(999)); } }; /** Covert TimedText file to subtitle array. **/ private function parseTT():Void { var ref = this; parseXML = new XML(); parseXML.ignoreWhite = true; parseXML.onLoad = function(scs:Boolean) { if(scs) { if(this.firstChild.nodeName.toLowerCase() == "tt") { var bdy = this.firstChild.childNodes[1]; for(var i=0; i -1) { parseXML.load(parseURL); } else if(parseURL.indexOf('?') > -1) { parseXML.load(parseURL+'&'+random(999)); } else { parseXML.load(parseURL+'?'+random(999)); } }; /** Invoked when parsing is completed. **/ public function onParseComplete() { }; }