UNPKG

smi2vtt

Version:
94 lines (78 loc) 1.83 kB
'use strict'; var htmlparser = require('htmlparser2'); /** * generate time-text from milliseconds * @param {String} time * @return {String} */ function generateTime(time) { return new Date(time * 1).toISOString().slice(11, -1); } /** * try parse * @param {String} smiText * @return {Parser} */ function parse(smiText) { var vttText = 'WEBVTT\n'; var type = null; var caption = { start: 0, end: 0, text: '' }; var parser = new htmlparser.Parser({ onopentag: function onopentag(name, attribs) { switch (name) { // comment case 'title': type = 'comment'; vttText += '\nNOTE\n'; break; // text case 'sync': type = 'caption'; // start if (!caption.text) { caption.start = generateTime(attribs.start); } // end else { var time = generateTime(attribs.start); caption.end = time; vttText += caption.start + ' --> ' + caption.end + '\n'; vttText += caption.text + '\n\n'; caption.start = time; caption.text = ''; } break; // br case 'br': caption.text += '\n'; break; } }, onclosetag: function onclosetag(text) { switch (type) { case 'comment': vttText += '\n\n'; type = null; break; } }, ontext: function ontext(text) { switch (type) { case 'comment': vttText += text.trim(); break; case 'caption': caption.text += text.trim(); break; } } }, { decodeEntities: true }); parser.write(smiText); parser.end(); return vttText; } module.exports = parse;