/** * Parses SRT lists and W3C Timed Text captions. * * @author Jeroen Wijering * @version 1.1 **/ 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. * * @param url URL of the playlist that should be parsed. **/ 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 arr = unescape(this).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"] = StringMagic.stripTagsBreaks(arr[i].substr(tst));; ref.parseArray.push(obj); } } else { parseArray.push( {txt:"File not found: "+ref.parseURL,bgn:1,dur:5}); } parseArray.length == 0 ? parseArray.push({txt:"Empty file: "+ref.parseURL,bgn:1,dur:5}): null; 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() { }; }