@sabre-js/sabre
Version:
A gpu accelerated ecmascript renderer for Advanced Substation Alpha (ASS) subtitles. Renders .ass and .ssa files over video in the browser.
29 lines (27 loc) • 13.1 kB
JavaScript
(function(global,external){var window=null;var self=null;var sabre=external.$;{"function"!==typeof require?sabre.import("global-constants"):require("./global-constants.min.js");"function"!==typeof require?sabre.import("util"):require("./util.min.js");"function"!==typeof require?sabre.import("color"):require("./color.min.js");"function"!==typeof require?sabre.import("style"):require("./style.min.js");"function"!==typeof require?sabre.import("style-override"):require("./style-override.min.js");"function"!==typeof require?sabre.import("subtitle-event"):require("./subtitle-event.min.js");
var p=new sabre.Complaint("Encountered a move tag where the animation ends before it starts, ignoring."),x=new sabre.Complaint("Encountered a parameterless or tagless \\t function tag, ignoring."),y=null;
function z(b,d,g,c,h,k,a){for(var f=/\\([^\\()]+)(?:\(([^)]*)\)?)?([^\\()]+)?/g,e=null,m=null,l=null,r,u=new sabre.SSATransitionTargetOverride,v=new sabre.SSALineTransitionTargetOverride;null!==(e=f.exec(a));){r=e[0];var n=void 0;m=null!=(n=e[2])?n:"";n=void 0;l=null!=(n=e[3])?n:"";e=e[1];n=!1;for(var t=y.length-1;0<=t;t--){var q=y[t].regular_expression;if(q.test(e)){n=!0;q=e.match(q);y[t].ignore_exterior?m=""!==m?m.split(","):[]:(e=e.slice(q[0].length),e=""!==e?e.split(","):[],l=""!==l?l.split(","):
[],m=""!==m?m.split(","):[],m=m.concat(e,l));for(e=q.length-1;0<e;e--)l=void 0,m.unshift(null!=(l=q[e])?l:null);m=m.map(function(w){return null===w?null:w.trim()});y[t].tag_handler.call(null,b,d,g,c,h,k,m,!0,u,v);break}}n||console.error("Unrecognized Override Tag: "+r)}return[u,v]}
sabre.getOverrideTags=function(){null===y&&(y=Object.freeze([{ass_only:!0,ignore_exterior:!1,regular_expression:/^([1-4])?a(?:lpha)?/,tag_handler:function(b,d,g,c,h,k,a,f,e){d=1;"undefined"!==typeof a[0]&&null!==a[0]&&""!==a[0]&&(d=global.parseInt(a[0],10));b=null;if("undefined"!==typeof a[1]&&null!==a[1]&&""!==a[1]){b=global.parseInt(sabre.cleanRawColor(a[1]),16);if(isNaN(b))return;b=(255-(b&255))/255}switch(d){case 1:null!==b&&(a=f?e.getPrimaryColor():c.getPrimaryColor(),null===a?f?e.setPrimaryColor(new sabre.SSAOverrideColor(null,
null,null,b)):c.setPrimaryColor(new sabre.SSAOverrideColor(null,null,null,b)):a.setA(b));break;case 2:null!==b&&(a=f?e.getSecondaryColor():c.getSecondaryColor(),null===a?f?e.setSecondaryColor(new sabre.SSAOverrideColor(null,null,null,b)):c.setSecondaryColor(new sabre.SSAOverrideColor(null,null,null,b)):a.setA(b));break;case 3:null!==b&&(a=f?e.getTertiaryColor():c.getTertiaryColor(),null===a?f?e.setTertiaryColor(new sabre.SSAOverrideColor(null,null,null,b)):c.setTertiaryColor(new sabre.SSAOverrideColor(null,
null,null,b)):a.setA(b));break;case 4:null!==b&&(a=f?e.getQuaternaryColor():c.getQuaternaryColor(),null===a?f?e.setQuaternaryColor(new sabre.SSAOverrideColor(null,null,null,b)):c.setQuaternaryColor(new sabre.SSAOverrideColor(null,null,null,b)):a.setA(b))}}},{ass_only:!1,ignore_exterior:!1,regular_expression:/^a(?=[0-9][0-9]?)/,tag_handler:function(b,d,g,c,h,k,a){b=global.parseInt(a[0],10);if(!isNaN(b))if(11<b)console.error("Invalid Alignment in legacy \\a tag.");else switch(d=b&3,b>>>2&3){case 1:d+=
3;case 2:c.setAlignment(d+3);break;case 0:c.setAlignment(d);break;default:console.error("Invalid Alignment in legacy \\a tag.")}}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^an/,tag_handler:function(b,d,g,c,h,k,a){"undefined"===typeof a[0]||null===a[0]||""===a[0]?c.setAlignment(null):(b=global.parseInt(a[0],10),isNaN(b)||c.setAlignment(b))}},{ass_only:!1,ignore_exterior:!1,regular_expression:/^b/,tag_handler:function(b,d,g,c,h,k,a){b=global.parseInt(a[0],10);isNaN(b)||(0===b?c.setWeight(400):
1===b?c.setWeight(700):c.setWeight(b))}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^be/,tag_handler:function(b,d,g,c,h,k,a,f,e){b=global.parseInt(a[0],10);isNaN(b)||(f?e.setEdgeBlur(b):c.setEdgeBlur(b))}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^blur/,tag_handler:function(b,d,g,c,h,k,a,f,e){b=global.parseFloat(a[0]);isNaN(b)||(f?e.setGaussianEdgeBlur(b):c.setGaussianEdgeBlur(b))}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^([xy])?bord/,tag_handler:function(b,d,g,c,
h,k,a,f,e){b=global.parseFloat(a[1]);c=f?e:c;isNaN(b)||(null===a[0]?c.setOutline(b):"x"===a[0]?c.setOutlineX(b):c.setOutlineY(b))}},{ass_only:!1,ignore_exterior:!1,regular_expression:/^([1-4])?c/,tag_handler:function(b,d,g,c,h,k,a,f,e){b=1;"undefined"!==typeof a[0]&&null!==a[0]&&""!==a[0]&&(b=global.parseInt(a[0],10));if("undefined"!==typeof a[1]&&null!==a[1]&&""!==a[1]){if(g=global.parseInt(sabre.cleanRawColor(a[1]),16),!isNaN(g))switch(a=(g&255)/255,g>>=8,d=(g&255)/255,g=(g>>8&255)/255,b){case 1:b=
f?e.getPrimaryColor():c.getPrimaryColor();null===b?f?e.setPrimaryColor(new sabre.SSAOverrideColor(a,d,g,null)):c.setPrimaryColor(new sabre.SSAOverrideColor(a,d,g,null)):(b.setR(a),b.setG(d),b.setB(g));break;case 2:b=f?e.getSecondaryColor():c.getSecondaryColor();null===b?f?e.setSecondaryColor(new sabre.SSAOverrideColor(a,d,g,null)):c.setSecondaryColor(new sabre.SSAOverrideColor(a,d,g,null)):(b.setR(a),b.setG(d),b.setB(g));break;case 3:b=f?e.getTertiaryColor():c.getTertiaryColor();null===b?f?e.setTertiaryColor(new sabre.SSAOverrideColor(a,
d,g,null)):c.setTertiaryColor(new sabre.SSAOverrideColor(a,d,g,null)):(b.setR(a),b.setG(d),b.setB(g));break;case 4:b=f?e.getQuaternaryColor():c.getQuaternaryColor(),null===b?f?e.setQuaternaryColor(new sabre.SSAOverrideColor(a,d,g,null)):c.setQuaternaryColor(new sabre.SSAOverrideColor(a,d,g,null)):(b.setR(a),b.setG(d),b.setB(g))}}else switch(b){case 1:b=f?e.getPrimaryColor():c.getPrimaryColor();null!==b&&(b.setR(null),b.setG(null),b.setB(null));break;case 2:b=f?e.getSecondaryColor():c.getSecondaryColor();
null!==b&&(b.setR(null),b.setG(null),b.setB(null));break;case 3:b=f?e.getTertiaryColor():c.getTertiaryColor();null!==b&&(b.setR(null),b.setG(null),b.setB(null));break;case 4:b=f?e.getQuaternaryColor():c.getQuaternaryColor(),null!==b&&(b.setR(null),b.setG(null),b.setB(null))}}},{ass_only:!0,ignore_exterior:!0,regular_expression:/^clip/,tag_handler:function(b,d,g,c,h,k,a,f,e,m){if(0!==a.length)if(b=global.parseInt(a[0],10),d=global.parseInt(a[1],10),global.isNaN(b)||global.isNaN(d)){f=1;global.isNaN(b)||
(f=b);var l;m=null!=(l=a[1])?l:a[0];null!==m&&h.setClip(f,m)}else l=global.parseInt(a[2],10),a=global.parseInt(a[3],10),f?m.setClip(b,d,l,a):h.setClip(b,d,l,a)}},{ass_only:!0,ignore_exterior:!0,regular_expression:/^fad/,tag_handler:function(b,d,g,c,h,k,a){d=global.parseInt(a[0],10);a=global.parseInt(a[1],10);isNaN(d)||isNaN(a)||(d=b.start+d/1E3,a=b.end-a/1E3,h.setFade(0,1,0,b.start,d,a,b.end))}},{ass_only:!0,ignore_exterior:!0,regular_expression:/^fade/,tag_handler:function(b,d,g,c,h,k,a){d=global.parseInt(a[0],
10);g=global.parseInt(a[1],10);c=global.parseInt(a[2],10);k=global.parseInt(a[3],10);var f=global.parseInt(a[4],10),e=global.parseInt(a[5],10);a=global.parseInt(a[6],10);isNaN(d)||isNaN(g)||isNaN(c)||isNaN(k)||isNaN(f)||isNaN(e)||isNaN(a)||(k=b.start+k/1E3,f=b.start+f/1E3,e=b.start+e/1E3,a=b.start+a/1E3,h.setFade(1-(d&255)/255,1-(g&255)/255,1-(c&255)/255,k,f,e,a))}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^fa([xy])/,tag_handler:function(b,d,g,c,h,k,a,f,e){b=global.parseFloat(a[1]);c=f?
e:c;isNaN(b)||("x"===a[0]?c.setShearX(b):c.setShearY(b))}},{ass_only:!1,ignore_exterior:!1,regular_expression:/^fe/,tag_handler:function(b,d,g,c,h,k,a){b=global.parseInt(a[0],10);c.setEncoding(b)}},{ass_only:!1,ignore_exterior:!1,regular_expression:/^fn/,tag_handler:function(b,d,g,c,h,k,a){b=a[0];null!==b&&c.setFontName(b)}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^fr([xyz])?/,tag_handler:function(b,d,g,c,h,k,a,f,e){b="z";null!==a[0]&&(b=a[0]);a=global.parseFloat(a[1]);if(!isNaN(a))if(f)switch(b){case "x":e.setRotation(a,
null,null);break;case "y":e.setRotation(null,a,null);break;default:e.setRotation(null,null,a)}else switch(b){case "x":c.setRotation(a,null,null);break;case "y":c.setRotation(null,a,null);break;default:c.setRotation(null,null,a)}}},{ass_only:!1,ignore_exterior:!1,regular_expression:/^fs([+-])?/,tag_handler:function(b,d,g,c,h,k,a,f,e){null!==a[0]?(f="+"===a[0],a=global.parseFloat(a[1]),f?c.increaseFontSizeMod(a):c.decreaseFontSizeMod(a)):(a=global.parseFloat(a[1]),f?e.setFontSize(a):(c.resetFontSizeMod(),
c.setFontSize(a)))}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^fsc([xy])/,tag_handler:function(b,d,g,c,h,k,a,f,e){b="x"===a[0];a=global.parseFloat(a[1]);isNaN(a)||(f?b?e.setScaleX(a):e.setScaleY(a):b?c.setScaleX(a):c.setScaleY(a))}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^fsp/,tag_handler:function(b,d,g,c,h,k,a,f,e){b=global.parseFloat(a[0]);isNaN(b)||(f?e.setSpacing(b):c.setSpacing(b))}},{ass_only:!1,ignore_exterior:!1,regular_expression:/^i/,tag_handler:function(b,d,g,c,
h,k,a){((b=global.parseInt(a[0],10))||0===b)&&c.setItalic(0!==b)}},{ass_only:!0,ignore_exterior:!0,regular_expression:/^iclip/,tag_handler:function(b,d,g,c,h,k,a,f,e,m){h.setClipInverted(!0);if(0!==a.length)if(b=global.parseInt(a[0],10),d=global.parseInt(a[1],10),global.isNaN(b)||global.isNaN(d)){f=1;global.isNaN(b)||(f=b);var l;m=null!=(l=a[1])?l:a[0];null!==m&&h.setClip(f,m)}else l=global.parseInt(a[2],10),a=global.parseInt(a[3],10),f?m.setClip(b,d,l,a):h.setClip(b,d,l,a)}},{ass_only:!1,ignore_exterior:!1,
regular_expression:/^([kK][fot]?)/,tag_handler:function(b,d,g,c,h,k,a){d=a[0];a=global.parseFloat(a[1]);if(!isNaN(a)){a/=100;g=c.getKaraokeEnd();h=g+a;switch(d){case "k":c.setKaraokeMode(sabre.KaraokeModes.COLOR_SWAP);break;case "K":case "kf":c.setKaraokeMode(sabre.KaraokeModes.COLOR_SWEEP);break;case "ko":c.setKaraokeMode(sabre.KaraokeModes.OUTLINE_TOGGLE);break;case "kt":h=g=b.start+a;break;default:return}c.setKaraokeStart(g);c.setKaraokeEnd(h)}}},{ass_only:!0,ignore_exterior:!0,regular_expression:/^move/,
tag_handler:function(b,d,g,c,h,k,a){d=global.parseInt(a[0],10);g=global.parseInt(a[1],10);c=global.parseInt(a[2],10);k=global.parseInt(a[3],10);if(!(isNaN(d)||isNaN(c)||isNaN(g)||isNaN(k))){var f=global.parseInt(a[4],10);a=global.parseInt(a[5],10);isNaN(f)||isNaN(a)?(f=b.start,a=b.end):(f=f/1E3+b.start,a=a/1E3+b.start);(b=a>=f)||p.grumble();b&&h.setMovement(d,g,c,k,f,a)}}},{ass_only:!0,ignore_exterior:!0,regular_expression:/^org/,tag_handler:function(b,d,g,c,h,k,a){b=global.parseInt(a[0],10);a=global.parseInt(a[1],
10);h.setRotationOrigin(b,a)}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^p/,tag_handler:function(b,d,g,c,h,k,a){b=global.parseFloat(a[0]);isNaN(b)||(0<b?(c.setDrawingMode(!0),c.setDrawingScale(b)):c.setDrawingMode(!1))}},{ignore_exterior:!1,regular_expression:/^pbo/,tag_handler:function(b,d,g,c,h,k,a){b=global.parseFloat(a[0]);isNaN(b)||c.setBaselineOffset(b)}},{ass_only:!0,ignore_exterior:!0,regular_expression:/^pos/,tag_handler:function(b,d,g,c,h,k,a){b=global.parseInt(a[0],10);a=global.parseInt(a[1],
10);isNaN(b)||isNaN(a)||h.setPosition(b,a)}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^q/,tag_handler:function(b,d,g,c,h,k,a){b=global.parseInt(a[0],10);isNaN(b)||0>b||3<b||c.setWrapStyle(b)}},{ass_only:!1,ignore_exterior:!1,regular_expression:/^r/,tag_handler:function(b,d,g,c,h,k,a){c.reset();b=a[0];if("undefined"!==typeof b&&null!==b&&""!==b){var f;g(null!=(f=d(b))?f:d("Default"))}}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^s/,tag_handler:function(b,d,g,c,h,k,a){((b=global.parseInt(a[0],
10))||0===b)&&c.setStrikeout(0!==b)}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^([xy])?shad/,tag_handler:function(b,d,g,c,h,k,a,f,e){b=a[0];a=global.parseFloat(a[1]);if(!isNaN(a))if(f)switch(b){case "x":e.setShadowX(a);break;case "y":e.setShadowY(a);default:case null:0>a||e.setShadow(a)}else switch(b){case "x":c.setShadowX(a);break;case "y":c.setShadowY(a);break;default:case null:0>a||c.setShadow(a)}}},{ass_only:!0,ignore_exterior:!0,regular_expression:/^t/,tag_handler:function(b,d,g,c,
h,k,a){var f=0,e=b.end-b.start,m=1,l=global.parseFloat(a[0]);if(global.isNaN(l))a=a.join(",");else{var r=global.parseFloat(a[1]);global.isNaN(r)?(m=l,a=a.slice(1).join(",")):(f=l/1E3,e=r/1E3,l=global.parseFloat(a[2]),global.isNaN(l)?a=a.slice(2).join(","):(m=l,a=a.slice(3).join(",")))}(l=""!==a)||x.grumble();l&&(a=z(b,d,g,c,h,k,a),a[0].setTransitionStart(f+b.start),a[0].setTransitionEnd(e+b.start),a[0].setTransitionAcceleration(m),a[1].setTransitionStart(f+b.start),a[1].setTransitionEnd(e+b.start),
a[1].setTransitionAcceleration(m),c.addTransition(a[0]),k(a[1]))}},{ass_only:!0,ignore_exterior:!1,regular_expression:/^u/,tag_handler:function(b,d,g,c,h,k,a){((b=global.parseInt(a[0],10))||0===b)&&c.setUnderline(0!==b)}}]));return y};}if(++sabre.$===19){external.$=null;sabre.$=null}})(((function(){try{return globalThis||self||window;}catch(e){try{return self;}catch(f){return window;}}})()),((function(){try{return globalThis||global||self||window;}catch(e){try{return self;}catch(f){return window;}}})()).sabre=(((function(){try{return globalThis||global||self||window;}catch(e){try{return self;}catch(f){return window;}}})()).sabre||{$:{$:0}}));
//# sourceMappingURL=subtitle-tags.map