subtitles-parser-vtt
Version:
NodeJS Parser for SubRip subtitles
1 lines • 1.27 kB
JavaScript
var parser=function(){var r={fromSrt:function(r,t,e){var n=!!e;(r=(r=r.replace(/\r/g,"")).split(/(\d+)?\n?(\d{2}:\d{2}:\d{2}[,.]\d{3}) --> (\d{2}:\d{2}:\d{2}[,.]\d{3}).*\n/g)).shift();for(var i=[],a=0;a<r.length;a+=4){var s=r[a+3];n&&((s=s.split("\n")).shift(),s=s.join("\n")),0!==s.trim().length&&i.push({id:r[a]?+r[a].trim():i.length+1,startTime:o(r[a+1].trim(),t),endTime:o(r[a+2].trim(),t),text:s.trim()})}return i},toSrt:function(r){if(!r instanceof Array)return"";for(var t="",e=0;e<r.length;e++){var n=r[e];isNaN(n.startTime)||isNaN(n.endTime)||(n.startTime=i(parseInt(n.startTime,10)),n.endTime=i(parseInt(n.endTime,10))),t+=n.id+"\r\n",t+=n.startTime+" --\x3e "+n.endTime+"\r\n",t+=n.text.replace("\n","\r\n")+"\r\n\r\n"}return t}},o=function(r,t){return"ms"===t?e(r):"s"===t?e(r)/1e3:r},e=function(r){var t=/(\d+):(\d{2}):(\d{2})[,.](\d{3})/.exec(r);if(null===t)return 0;for(var e=1;e<5;e++)t[e]=parseInt(t[e],10),isNaN(t[e])&&(t[e]=0);return 36e5*t[1]+6e4*t[2]+1e3*t[3]+t[4]},i=function(r){var t=[36e5,6e4,1e3],e=[];for(var n in t){var i=(r/t[n]>>0).toString();i.length<2&&(i="0"+i),r%=t[n],e.push(i)}var a=r.toString();if(a.length<3)for(n=0;n<=3-a.length;n++)a="0"+a;return e.join(":")+","+a};return r}();"object"==typeof exports&&(module.exports=parser);