ass-compiler
Advanced tools
Comparing version 0.0.3 to 0.0.4
@@ -49,34 +49,38 @@ (function (global, factory) { | ||
var numRegexs = numTags.map(function (nt) { return ({ name: nt, regex: new RegExp(("^" + nt + "-?\\d")) }); }); | ||
function parseTag(text) { | ||
var tag = {}; | ||
for (var i = 0; i < numTags.length; i++) { | ||
var nt = numTags[i]; | ||
var regex = new RegExp(("^" + nt + "-?\\d")); | ||
for (var i = 0; i < numRegexs.length; i++) { | ||
var ref = numRegexs[i]; | ||
var name = ref.name; | ||
var regex = ref.regex; | ||
if (regex.test(text)) { | ||
tag[nt] = text.slice(nt.length) * 1; | ||
tag[name] = text.slice(name.length) * 1; | ||
return tag; | ||
} | ||
} | ||
if (/^fn/.test(text)) { tag.fn = text.slice(2); } | ||
if (/^r/.test(text)) { tag.r = text.slice(1); } | ||
if (/^fs[\d+-]/.test(text)) { tag.fs = text.slice(2); } | ||
if (/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(text)) { | ||
var ref = text.match(/^(\d?)c&?H?(\w*)/); | ||
var num = ref[1]; | ||
var color = ref[2]; | ||
if (/^fn/.test(text)) { | ||
tag.fn = text.slice(2); | ||
} else if (/^r/.test(text)) { | ||
tag.r = text.slice(1); | ||
} else if (/^fs[\d+-]/.test(text)) { | ||
tag.fs = text.slice(2); | ||
} else if (/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(text)) { | ||
var ref$1 = text.match(/^(\d?)c&?H?(\w*)/); | ||
var num = ref$1[1]; | ||
var color = ref$1[2]; | ||
tag[("c" + (num || 1))] = color && ("000000" + color).slice(-6); | ||
} | ||
if (/^\da&?H?[0-9a-f]+/i.test(text)) { | ||
var ref$1 = text.match(/^(\d)a&?H?(\w\w)/); | ||
var num$1 = ref$1[1]; | ||
var alpha = ref$1[2]; | ||
} else if (/^\da&?H?[0-9a-f]+/i.test(text)) { | ||
var ref$2 = text.match(/^(\d)a&?H?(\w\w)/); | ||
var num$1 = ref$2[1]; | ||
var alpha = ref$2[2]; | ||
tag[("a" + num$1)] = alpha; | ||
} | ||
if (/^alpha&?H?[0-9a-f]+/i.test(text)) { | ||
} else if (/^alpha&?H?[0-9a-f]+/i.test(text)) { | ||
var assign; | ||
(assign = text.match(/^alpha&?H?(\w\w)/), tag.alpha = assign[1]); | ||
} | ||
if (/^(?:pos|org|move|fad|fade)\(/.test(text)) { | ||
var ref$2 = text.match(/^(\w+)\((.*?)\)/); | ||
var key = ref$2[1]; | ||
var value = ref$2[2]; | ||
} else if (/^(?:pos|org|move|fad|fade)\(/.test(text)) { | ||
var ref$3 = text.match(/^(\w+)\((.*?)\)/); | ||
var key = ref$3[1]; | ||
var value = ref$3[2]; | ||
tag[key] = value | ||
@@ -86,4 +90,3 @@ .trim() | ||
.map(Number); | ||
} | ||
if (/^i?clip/.test(text)) { | ||
} else if (/^i?clip/.test(text)) { | ||
var p = text | ||
@@ -109,4 +112,3 @@ .match(/^i?clip\((.*)\)/)[1] | ||
} | ||
} | ||
if (/^t\(/.test(text)) { | ||
} else if (/^t\(/.test(text)) { | ||
var p$1 = text | ||
@@ -146,16 +148,21 @@ .match(/^t\((.*)\)/)[1] | ||
function parseTags(text) { | ||
var tags = []; | ||
var depth = 0; | ||
return text | ||
.split('') | ||
.map(function (x) { | ||
if (x === '(') { depth++; } | ||
if (x === ')') { depth--; } | ||
if (depth < 0) { depth = 0; } | ||
return (depth && x === '\\') ? '\n' : x; | ||
}) | ||
.join('') | ||
.split(/\\/) | ||
.slice(1) | ||
.map(function (x) { return x.replace(/\n/g, '\\'); }) | ||
.map(parseTag); | ||
var str = ''; | ||
for (var i = 0; i < text.length; i++) { | ||
var x = text[i]; | ||
if (x === '(') { depth++; } | ||
if (x === ')') { depth--; } | ||
if (depth < 0) { depth = 0; } | ||
if (!depth && x === '\\') { | ||
if (str) { | ||
tags.push(str); | ||
} | ||
str = ''; | ||
} else { | ||
str += x; | ||
} | ||
} | ||
tags.push(str); | ||
return tags.map(parseTag); | ||
} | ||
@@ -285,19 +292,19 @@ | ||
function assign(target) { | ||
var sources = [], len = arguments.length - 1; | ||
while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; | ||
var assign = Object.assign || ( | ||
/* istanbul ignore next */ | ||
function assign(target) { | ||
var sources = [], len = arguments.length - 1; | ||
while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; | ||
if (Object.assign) { | ||
return Object.assign.apply(Object, [ target ].concat( sources )); | ||
} | ||
for (var i = 0; i < sources.length; i++) { | ||
if (!sources[i]) { continue; } | ||
var keys = Object.keys(sources[i]); | ||
for (var j = 0; j < keys.length; j++) { | ||
// eslint-disable-next-line no-param-reassign | ||
target[keys[j]] = sources[i][keys[j]]; | ||
for (var i = 0; i < sources.length; i++) { | ||
if (!sources[i]) { continue; } | ||
var keys = Object.keys(sources[i]); | ||
for (var j = 0; j < keys.length; j++) { | ||
// eslint-disable-next-line no-param-reassign | ||
target[keys[j]] = sources[i][keys[j]]; | ||
} | ||
} | ||
return target; | ||
} | ||
return target; | ||
} | ||
); | ||
@@ -304,0 +311,0 @@ function createCommand(arr) { |
@@ -1,1 +0,1 @@ | ||
(function(t,r){typeof exports==="object"&&typeof module!=="undefined"?r(exports):typeof define==="function"&&define.amd?define(["exports"],r):r(t.assCompiler={})})(this,function(t){"use strict";function r(t){var r=t.toLowerCase().trim().split(/\s*;\s*/);if(r[0]==="banner"){return{name:r[0],delay:r[1]*1||0,leftToRight:r[2]*1||0,fadeAwayWidth:r[3]*1||0}}if(/^scroll\s/.test(r[0])){return{name:r[0],y1:Math.min(r[1]*1,r[2]*1),y2:Math.max(r[1]*1,r[2]*1),delay:r[3]*1||0,fadeAwayHeight:r[4]*1||0}}return null}function a(t){return t.toLowerCase().replace(/([mnlbspc])/g," $1 ").trim().replace(/\s+/g," ").split(/\s(?=[mnlbspc])/).map(function(t){return t.split(" ")})}var e=["b","i","u","s","fsp","k","K","kf","ko","kt","fe","q","p","pbo","a","an","fscx","fscy","fax","fay","frx","fry","frz","fr","be","blur","bord","xbord","ybord","shad","xshad","yshad"];function n(t){var r={};for(var i=0;i<e.length;i++){var s=e[i];var f=new RegExp("^"+s+"-?\\d");if(f.test(t)){r[s]=t.slice(s.length)*1}}if(/^fn/.test(t)){r.fn=t.slice(2)}if(/^r/.test(t)){r.r=t.slice(1)}if(/^fs[\d+-]/.test(t)){r.fs=t.slice(2)}if(/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(t)){var l=t.match(/^(\d?)c&?H?(\w*)/);var v=l[1];var o=l[2];r["c"+(v||1)]=o&&("000000"+o).slice(-6)}if(/^\da&?H?[0-9a-f]+/i.test(t)){var c=t.match(/^(\d)a&?H?(\w\w)/);var u=c[1];var p=c[2];r["a"+u]=p}if(/^alpha&?H?[0-9a-f]+/i.test(t)){var d;d=t.match(/^alpha&?H?(\w\w)/),r.alpha=d[1]}if(/^(?:pos|org|move|fad|fade)\(/.test(t)){var h=t.match(/^(\w+)\((.*?)\)/);var y=h[1];var g=h[2];r[y]=g.trim().split(/\s*,\s*/).map(Number)}if(/^i?clip/.test(t)){var m=t.match(/^i?clip\((.*)\)/)[1].trim().split(/\s*,\s*/);r.clip={inverse:/iclip/.test(t),scale:1,drawing:null,dots:null};if(m.length===1){r.clip.drawing=a(m[0])}if(m.length===2){r.clip.scale=m[0]*1;r.clip.drawing=a(m[1])}if(m.length===4){r.clip.dots=m.map(Number)}}if(/^t\(/.test(t)){var x=t.match(/^t\((.*)\)/)[1].trim().replace(/\\.*/,function(t){return t.replace(/,/g,"\n")}).split(/\s*,\s*/);if(!x[0]){return r}r.t={t1:0,t2:0,accel:1,tags:x[x.length-1].replace(/\n/g,",").split("\\").slice(1).map(n)};if(x.length===2){r.t.accel=x[0]*1}if(x.length===3){r.t.t1=x[0]*1;r.t.t2=x[1]*1}if(x.length===4){r.t.t1=x[0]*1;r.t.t2=x[1]*1;r.t.accel=x[2]*1}}return r}function i(t){var r=0;return t.split("").map(function(t){if(t==="("){r++}if(t===")"){r--}if(r<0){r=0}return r&&t==="\\"?"\n":t}).join("").split(/\\/).slice(1).map(function(t){return t.replace(/\n/g,"\\")}).map(n)}function s(t){var r=t.split(/{([^{}]*?)}/);var e=[];if(r[0].length){e.push({tags:[],text:r[0],drawing:[]})}for(var n=1;n<r.length;n+=2){var s=i(r[n]);var f=s.reduce(function(t,r){return r.p===undefined?t:!!r.p},false);e.push({tags:s,text:f?"":r[n+1],drawing:f?a(r[n+1]):[]})}return{raw:t,combined:e.map(function(t){return t.text}).join(""),parsed:e}}function f(t){var r=t.split(":");return r[0]*3600+r[1]*60+r[2]*1}function l(t,a){var e=t.split(",");if(e.length>a.length){var n=e.slice(a.length-1).join();e=e.slice(0,a.length-1);e.push(n)}var i={};for(var l=0;l<e.length;l++){var v=a[l];var o=e[l].trim();switch(v){case"Layer":case"MarginL":case"MarginR":case"MarginV":i[v]=o*1;break;case"Start":case"End":i[v]=f(o);break;case"Effect":i[v]=r(o);break;case"Text":i[v]=s(o);break;default:i[v]=o}}return i}function v(t){return t.match(/Format\s*:\s*(.*)/i)[1].split(/\s*,\s*/)}function o(t){return t.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/)}function c(t){var r={info:{},styles:{format:[],style:[]},events:{format:[],comment:[],dialogue:[]}};var a=t.split(/\r?\n/);var e=0;for(var n=0;n<a.length;n++){var i=a[n].trim();if(/^;/.test(i)){continue}if(/^\[Script Info\]/i.test(i)){e=1}else if(/^\[V4\+? Styles\]/i.test(i)){e=2}else if(/^\[Events\]/i.test(i)){e=3}else if(/^\[.*\]/.test(i)){e=0}if(e===0){continue}if(e===1){if(/:/.test(i)){var s=i.match(/(.*?)\s*:\s*(.*)/);var f=s[1];var c=s[2];r.info[f]=c}}if(e===2){if(/^Format\s*:/i.test(i)){r.styles.format=v(i)}if(/^Style\s*:/i.test(i)){r.styles.style.push(o(i))}}if(e===3){if(/^Format\s*:/i.test(i)){r.events.format=v(i)}if(/^(?:Comment|Dialogue)\s*:/i.test(i)){var u=i.match(/^(\w+?)\s*:\s*(.*)/i);var p=u[1];var d=u[2];r.events[p.toLowerCase()].push(l(d,r.events.format))}}}return r}function u(t){var r=[],a=arguments.length-1;while(a-- >0)r[a]=arguments[a+1];if(Object.assign){return Object.assign.apply(Object,[t].concat(r))}for(var e=0;e<r.length;e++){if(!r[e]){continue}var n=Object.keys(r[e]);for(var i=0;i<n.length;i++){t[n[i]]=r[e][n[i]]}}return t}function p(t){var r={type:null,prev:null,next:null,points:[]};if(/[mnlbs]/.test(t[0])){r.type=t[0].toUpperCase().replace("N","L").replace("B","C")}for(var a=t.length-!(t.length&1),e=1;e<a;e+=2){r.points.push({x:t[e]*1,y:t[e+1]*1})}return r}function d(t){if(!t.points.length||!t.type){return false}if(/C|S/.test(t.type)&&t.points.length<3){return false}return true}function h(t){var r=Infinity;var a=Infinity;var e=-Infinity;var n=-Infinity;(i=[]).concat.apply(i,t.map(function(t){var r=t.points;return r})).forEach(function(t){var i=t.x;var s=t.y;r=Math.min(r,i);a=Math.min(a,s);e=Math.max(e,i);n=Math.max(n,s)});return{minX:r,minY:a,width:e-r,height:n-a};var i}function y(t,r,a){var e=[];var n=[0,2/3,1/3,0];var i=[0,1/3,2/3,0];var s=[0,1/6,2/3,1/6];var f=function(t,r){return t[0]*r[0]+t[1]*r[1]+t[2]*r[2]+t[3]*r[3]};var l=[t[t.length-1].x,t[0].x,t[1].x,t[2].x];var v=[t[t.length-1].y,t[0].y,t[1].y,t[2].y];e.push({type:r==="M"?"M":"L",points:[{x:f(s,l),y:f(s,v)}]});for(var o=3;o<t.length;o++){l=[t[o-3].x,t[o-2].x,t[o-1].x,t[o].x];v=[t[o-3].y,t[o-2].y,t[o-1].y,t[o].y];e.push({type:"C",points:[{x:f(n,l),y:f(n,v)},{x:f(i,l),y:f(i,v)},{x:f(s,l),y:f(s,v)}]})}if(a==="L"||a==="C"){var c=t[t.length-1];e.push({type:"L",points:[{x:c.x,y:c.y}]})}return e}function g(t){return t.map(function(t){var r=t.type;var a=t.points;return r+a.map(function(t){var r=t.x;var a=t.y;return r+","+a}).join(",")}).join("")}function m(t){var r=[];var a=0;while(a<t.length){var e=t[a];var n=p(e);if(n.type){if(n.type==="S"){var i=r[a-1].points.slice(-1)[0];var s=i.x;var f=i.y;n.points.unshift({x:s,y:f})}if(d(n)){if(a){n.prev=r[a-1].type;r[a-1].next=n.type}r.push(n)}a++}else{if(r[a-1].type==="S"){var l={p:n.points,c:r[a-1].points.slice(0,3)};r[a-1].points=r[a-1].points.concat((l[e[0]]||[]).map(function(t){var r=t.x;var a=t.y;return{x:r,y:a}}))}t.splice(a,1)}}var v=(o=[]).concat.apply(o,r.map(function(t){var r=t.type;var a=t.points;var e=t.prev;var n=t.next;return r==="S"?y(a,e,n):{type:r,points:a}}));return u({instructions:v,d:g(v)},h(r));var o}var x=["fs","clip","c1","c2","c3","c4","a1","a2","a3","a4","alpha","fscx","fscy","fax","fay","frx","fry","frz","fr","be","blur","bord","xbord","ybord","shad","xshad","yshad"];function b(t,r,a){var e,n,i;if(a===void 0)a={};var s=t[r];if(s===undefined){return null}if(r==="pos"||r==="org"){return s.length===2?(e={},e[r]={x:s[0],y:s[1]},e):null}if(r==="move"){var f=s[0];var l=s[1];var v=s[2];var o=s[3];var c=s[4];if(c===void 0)c=0;var p=s[5];if(p===void 0)p=0;return s.length===4||s.length===6?{move:{x1:f,y1:l,x2:v,y2:o,t1:c,t2:p}}:null}if(r==="fad"||r==="fade"){if(s.length===2){var d=s[0];var h=s[1];return{fade:{type:"fad",t1:d,t2:h}}}if(s.length===7){var y=s[0];var g=s[1];var w=s[2];var S=s[3];var M=s[4];var C=s[5];var O=s[6];return{fade:{type:"fade",a1:y,a2:g,a3:w,t1:S,t2:M,t3:C,t4:O}}}return null}if(r==="clip"){var j=s.inverse;var k=s.scale;var L=s.drawing;var E=s.dots;if(L){return{clip:{inverse:j,scale:k,drawing:m(L),dots:E}}}if(E){var H=E[0];var N=E[1];var I=E[2];var R=E[3];return{clip:{inverse:j,scale:k,drawing:L,dots:{x1:H,y1:N,x2:I,y2:R}}}}return null}if(/^[xy]?(bord|shad)$/.test(r)){s=Math.max(s,0)}if(r==="bord"){return{xbord:s,ybord:s}}if(r==="shad"){return{xshad:s,yshad:s}}if(/^c\d$/.test(r)){return n={},n[r]=s||a[r],n}if(r==="alpha"){return{a1:s,a2:s,a3:s,a4:s}}if(r==="fr"){return{frz:s}}if(r==="fs"){return{fs:/^\+|-/.test(s)?(s*1>-10?1+s/10:1)*a.fs:s*1}}if(r==="t"){var F=s.t1;var z=s.accel;var $=s.tags;var A=s.t2||(a.end-a.start)*1e3;var B={};$.forEach(function(t){var r=Object.keys(t)[0];if(~x.indexOf(r)&&!(r==="clip"&&!t[r].dots)){u(B,b(t,r,a))}});return{t:{t1:F,t2:A,accel:z,tag:B}}}return i={},i[r]=s,i}var w=[null,1,2,3,null,7,8,9,null,4,5,6];var S=["r","a","an","pos","org","move","fade","fad","clip"];function M(t,r){return{name:t,borderStyle:r[t].style.BorderStyle,tag:r[t].tag,fragments:[]}}function C(t){var r=t.styles;var a=t.name;var e=t.parsed;var n=t.start;var i=t.end;var s;var f;var l;var v;var o;var c;var p=[];var d=M(a,r);var h={};for(var y=0;y<e.length;y++){var g=e[y];var x=g.tags;var C=g.text;var O=g.drawing;var j=void 0;for(var k=0;k<x.length;k++){var L=x[k];j=L.r===undefined?j:L.r}var E={tag:j===undefined?JSON.parse(JSON.stringify(h)):{},text:C,drawing:O.length?m(O):null};for(var H=0;H<x.length;H++){var N=x[H];s=s||w[N.a||0]||N.an;f=f||b(N,"pos");l=l||b(N,"org");v=v||b(N,"move");o=o||b(N,"fade")||b(N,"fad");c=b(N,"clip")||c;var I=Object.keys(N)[0];if(I&&!~S.indexOf(I)){var R=d.tag;var F=R.c1;var z=R.c2;var $=R.c3;var A=R.c4;var B=h.fs||d.tag.fs;var P=b(N,I,{start:n,end:i,c1:F,c2:z,c3:$,c4:A,fs:B});if(I==="t"){E.tag.t=E.tag.t||[];E.tag.t.push(P.t)}else{u(E.tag,P)}}}h=E.tag;if(j!==undefined){p.push(d);d=M(j||a,r)}if(E.text||E.drawing){var T=d.fragments[d.fragments.length-1]||{};if(T.text&&E.text&&!Object.keys(E.tag).length){T.text+=E.text}else{d.fragments.push(E)}}}p.push(d);return u({alignment:s,slices:p},f,l,v,o,c)}function O(t){var r=t.info;var a=t.styles;var e=t.dialogues;var n=Infinity;var i=[];for(var s=0;s<e.length;s++){var f=e[s];if(f.Start>=f.End){continue}var l=a[f.Style].style;var v=r.Timer/100||1;var o=C({styles:a,name:f.Style,parsed:f.Text.parsed,start:f.Start,end:f.End});var c=o.alignment||l.Alignment;n=Math.min(n,f.Layer);i.push(u({layer:f.Layer,start:f.Start/v,end:f.End/v,margin:{left:f.MarginL||l.MarginL,right:f.MarginR||l.MarginR,vertical:f.MarginV||l.MarginV},effect:f.Effect},o,{alignment:c}))}for(var p=0;p<i.length;p++){i[p].layer-=n}return i.sort(function(t,r){return t.start-r.start||t.end-r.end})}function j(t){var r=t.match(/&H(\w\w)?(\w{6})&?/);var a=r[1];var e=r[2];return[a||"00",e]}function k(t){var r=t.info;var a=t.style;var e=t.format;var n={};for(var i=0;i<a.length;i++){var s=a[i];var f={};for(var l=0;l<e.length;l++){var v=e[l];f[v]=v==="Name"||v==="Fontname"||/Colour/.test(v)?s[l]:s[l]*1}var o=j(f.PrimaryColour);var c=o[0];var u=o[1];var p=j(f.SecondaryColour);var d=p[0];var h=p[1];var y=j(f.OutlineColour);var g=y[0];var m=y[1];var x=j(f.BackColour);var b=x[0];var w=x[1];var S={fn:f.Fontname,fs:f.Fontsize,c1:u,a1:c,c2:h,a2:d,c3:m,a3:g,c4:w,a4:b,b:Math.abs(f.Bold),i:Math.abs(f.Italic),u:Math.abs(f.Underline),s:Math.abs(f.StrikeOut),fscx:f.ScaleX,fscy:f.ScaleY,fsp:f.Spacing,frz:f.Angle,xbord:f.Outline,ybord:f.Outline,xshad:f.Shadow,yshad:f.Shadow,q:/^[0-3]$/.test(r.WrapStyle)?r.WrapStyle*1:2};n[f.Name]={style:f,tag:S}}return n}function L(t){var r=c(t);var a=k({info:r.info,style:r.styles.style,format:r.styles.format});return{info:r.info,width:r.info.PlayResX*1||null,height:r.info.PlayResY*1||null,collisions:r.info.Collisions||"Normal",styles:a,dialogues:O({info:r.info,styles:a,dialogues:r.events.dialogue})}}t.parse=c;t.compile=L;Object.defineProperty(t,"__esModule",{value:true})}); | ||
(function(t,r){typeof exports==="object"&&typeof module!=="undefined"?r(exports):typeof define==="function"&&define.amd?define(["exports"],r):r(t.assCompiler={})})(this,function(t){"use strict";function r(t){var r=t.toLowerCase().trim().split(/\s*;\s*/);if(r[0]==="banner"){return{name:r[0],delay:r[1]*1||0,leftToRight:r[2]*1||0,fadeAwayWidth:r[3]*1||0}}if(/^scroll\s/.test(r[0])){return{name:r[0],y1:Math.min(r[1]*1,r[2]*1),y2:Math.max(r[1]*1,r[2]*1),delay:r[3]*1||0,fadeAwayHeight:r[4]*1||0}}return null}function a(t){return t.toLowerCase().replace(/([mnlbspc])/g," $1 ").trim().replace(/\s+/g," ").split(/\s(?=[mnlbspc])/).map(function(t){return t.split(" ")})}var e=["b","i","u","s","fsp","k","K","kf","ko","kt","fe","q","p","pbo","a","an","fscx","fscy","fax","fay","frx","fry","frz","fr","be","blur","bord","xbord","ybord","shad","xshad","yshad"];var n=e.map(function(t){return{name:t,regex:new RegExp("^"+t+"-?\\d")}});function i(t){var r={};for(var e=0;e<n.length;e++){var s=n[e];var f=s.name;var l=s.regex;if(l.test(t)){r[f]=t.slice(f.length)*1;return r}}if(/^fn/.test(t)){r.fn=t.slice(2)}else if(/^r/.test(t)){r.r=t.slice(1)}else if(/^fs[\d+-]/.test(t)){r.fs=t.slice(2)}else if(/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(t)){var v=t.match(/^(\d?)c&?H?(\w*)/);var o=v[1];var c=v[2];r["c"+(o||1)]=c&&("000000"+c).slice(-6)}else if(/^\da&?H?[0-9a-f]+/i.test(t)){var u=t.match(/^(\d)a&?H?(\w\w)/);var p=u[1];var d=u[2];r["a"+p]=d}else if(/^alpha&?H?[0-9a-f]+/i.test(t)){var h;h=t.match(/^alpha&?H?(\w\w)/),r.alpha=h[1]}else if(/^(?:pos|org|move|fad|fade)\(/.test(t)){var g=t.match(/^(\w+)\((.*?)\)/);var y=g[1];var m=g[2];r[y]=m.trim().split(/\s*,\s*/).map(Number)}else if(/^i?clip/.test(t)){var x=t.match(/^i?clip\((.*)\)/)[1].trim().split(/\s*,\s*/);r.clip={inverse:/iclip/.test(t),scale:1,drawing:null,dots:null};if(x.length===1){r.clip.drawing=a(x[0])}if(x.length===2){r.clip.scale=x[0]*1;r.clip.drawing=a(x[1])}if(x.length===4){r.clip.dots=x.map(Number)}}else if(/^t\(/.test(t)){var b=t.match(/^t\((.*)\)/)[1].trim().replace(/\\.*/,function(t){return t.replace(/,/g,"\n")}).split(/\s*,\s*/);if(!b[0]){return r}r.t={t1:0,t2:0,accel:1,tags:b[b.length-1].replace(/\n/g,",").split("\\").slice(1).map(i)};if(b.length===2){r.t.accel=b[0]*1}if(b.length===3){r.t.t1=b[0]*1;r.t.t2=b[1]*1}if(b.length===4){r.t.t1=b[0]*1;r.t.t2=b[1]*1;r.t.accel=b[2]*1}}return r}function s(t){var r=[];var a=0;var e="";for(var n=0;n<t.length;n++){var s=t[n];if(s==="("){a++}if(s===")"){a--}if(a<0){a=0}if(!a&&s==="\\"){if(e){r.push(e)}e=""}else{e+=s}}r.push(e);return r.map(i)}function f(t){var r=t.split(/{([^{}]*?)}/);var e=[];if(r[0].length){e.push({tags:[],text:r[0],drawing:[]})}for(var n=1;n<r.length;n+=2){var i=s(r[n]);var f=i.reduce(function(t,r){return r.p===undefined?t:!!r.p},false);e.push({tags:i,text:f?"":r[n+1],drawing:f?a(r[n+1]):[]})}return{raw:t,combined:e.map(function(t){return t.text}).join(""),parsed:e}}function l(t){var r=t.split(":");return r[0]*3600+r[1]*60+r[2]*1}function v(t,a){var e=t.split(",");if(e.length>a.length){var n=e.slice(a.length-1).join();e=e.slice(0,a.length-1);e.push(n)}var i={};for(var s=0;s<e.length;s++){var v=a[s];var o=e[s].trim();switch(v){case"Layer":case"MarginL":case"MarginR":case"MarginV":i[v]=o*1;break;case"Start":case"End":i[v]=l(o);break;case"Effect":i[v]=r(o);break;case"Text":i[v]=f(o);break;default:i[v]=o}}return i}function o(t){return t.match(/Format\s*:\s*(.*)/i)[1].split(/\s*,\s*/)}function c(t){return t.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/)}function u(t){var r={info:{},styles:{format:[],style:[]},events:{format:[],comment:[],dialogue:[]}};var a=t.split(/\r?\n/);var e=0;for(var n=0;n<a.length;n++){var i=a[n].trim();if(/^;/.test(i)){continue}if(/^\[Script Info\]/i.test(i)){e=1}else if(/^\[V4\+? Styles\]/i.test(i)){e=2}else if(/^\[Events\]/i.test(i)){e=3}else if(/^\[.*\]/.test(i)){e=0}if(e===0){continue}if(e===1){if(/:/.test(i)){var s=i.match(/(.*?)\s*:\s*(.*)/);var f=s[1];var l=s[2];r.info[f]=l}}if(e===2){if(/^Format\s*:/i.test(i)){r.styles.format=o(i)}if(/^Style\s*:/i.test(i)){r.styles.style.push(c(i))}}if(e===3){if(/^Format\s*:/i.test(i)){r.events.format=o(i)}if(/^(?:Comment|Dialogue)\s*:/i.test(i)){var u=i.match(/^(\w+?)\s*:\s*(.*)/i);var p=u[1];var d=u[2];r.events[p.toLowerCase()].push(v(d,r.events.format))}}}return r}var p=Object.assign||function t(r){var a=[],e=arguments.length-1;while(e-- >0)a[e]=arguments[e+1];for(var n=0;n<a.length;n++){if(!a[n]){continue}var i=Object.keys(a[n]);for(var s=0;s<i.length;s++){r[i[s]]=a[n][i[s]]}}return r};function d(t){var r={type:null,prev:null,next:null,points:[]};if(/[mnlbs]/.test(t[0])){r.type=t[0].toUpperCase().replace("N","L").replace("B","C")}for(var a=t.length-!(t.length&1),e=1;e<a;e+=2){r.points.push({x:t[e]*1,y:t[e+1]*1})}return r}function h(t){if(!t.points.length||!t.type){return false}if(/C|S/.test(t.type)&&t.points.length<3){return false}return true}function g(t){var r=Infinity;var a=Infinity;var e=-Infinity;var n=-Infinity;(i=[]).concat.apply(i,t.map(function(t){var r=t.points;return r})).forEach(function(t){var i=t.x;var s=t.y;r=Math.min(r,i);a=Math.min(a,s);e=Math.max(e,i);n=Math.max(n,s)});return{minX:r,minY:a,width:e-r,height:n-a};var i}function y(t,r,a){var e=[];var n=[0,2/3,1/3,0];var i=[0,1/3,2/3,0];var s=[0,1/6,2/3,1/6];var f=function(t,r){return t[0]*r[0]+t[1]*r[1]+t[2]*r[2]+t[3]*r[3]};var l=[t[t.length-1].x,t[0].x,t[1].x,t[2].x];var v=[t[t.length-1].y,t[0].y,t[1].y,t[2].y];e.push({type:r==="M"?"M":"L",points:[{x:f(s,l),y:f(s,v)}]});for(var o=3;o<t.length;o++){l=[t[o-3].x,t[o-2].x,t[o-1].x,t[o].x];v=[t[o-3].y,t[o-2].y,t[o-1].y,t[o].y];e.push({type:"C",points:[{x:f(n,l),y:f(n,v)},{x:f(i,l),y:f(i,v)},{x:f(s,l),y:f(s,v)}]})}if(a==="L"||a==="C"){var c=t[t.length-1];e.push({type:"L",points:[{x:c.x,y:c.y}]})}return e}function m(t){return t.map(function(t){var r=t.type;var a=t.points;return r+a.map(function(t){var r=t.x;var a=t.y;return r+","+a}).join(",")}).join("")}function x(t){var r=[];var a=0;while(a<t.length){var e=t[a];var n=d(e);if(n.type){if(n.type==="S"){var i=r[a-1].points.slice(-1)[0];var s=i.x;var f=i.y;n.points.unshift({x:s,y:f})}if(h(n)){if(a){n.prev=r[a-1].type;r[a-1].next=n.type}r.push(n)}a++}else{if(r[a-1].type==="S"){var l={p:n.points,c:r[a-1].points.slice(0,3)};r[a-1].points=r[a-1].points.concat((l[e[0]]||[]).map(function(t){var r=t.x;var a=t.y;return{x:r,y:a}}))}t.splice(a,1)}}var v=(o=[]).concat.apply(o,r.map(function(t){var r=t.type;var a=t.points;var e=t.prev;var n=t.next;return r==="S"?y(a,e,n):{type:r,points:a}}));return p({instructions:v,d:m(v)},g(r));var o}var b=["fs","clip","c1","c2","c3","c4","a1","a2","a3","a4","alpha","fscx","fscy","fax","fay","frx","fry","frz","fr","be","blur","bord","xbord","ybord","shad","xshad","yshad"];function w(t,r,a){var e,n,i;if(a===void 0)a={};var s=t[r];if(s===undefined){return null}if(r==="pos"||r==="org"){return s.length===2?(e={},e[r]={x:s[0],y:s[1]},e):null}if(r==="move"){var f=s[0];var l=s[1];var v=s[2];var o=s[3];var c=s[4];if(c===void 0)c=0;var u=s[5];if(u===void 0)u=0;return s.length===4||s.length===6?{move:{x1:f,y1:l,x2:v,y2:o,t1:c,t2:u}}:null}if(r==="fad"||r==="fade"){if(s.length===2){var d=s[0];var h=s[1];return{fade:{type:"fad",t1:d,t2:h}}}if(s.length===7){var g=s[0];var y=s[1];var m=s[2];var S=s[3];var M=s[4];var C=s[5];var k=s[6];return{fade:{type:"fade",a1:g,a2:y,a3:m,t1:S,t2:M,t3:C,t4:k}}}return null}if(r==="clip"){var O=s.inverse;var L=s.scale;var j=s.drawing;var E=s.dots;if(j){return{clip:{inverse:O,scale:L,drawing:x(j),dots:E}}}if(E){var H=E[0];var N=E[1];var I=E[2];var R=E[3];return{clip:{inverse:O,scale:L,drawing:j,dots:{x1:H,y1:N,x2:I,y2:R}}}}return null}if(/^[xy]?(bord|shad)$/.test(r)){s=Math.max(s,0)}if(r==="bord"){return{xbord:s,ybord:s}}if(r==="shad"){return{xshad:s,yshad:s}}if(/^c\d$/.test(r)){return n={},n[r]=s||a[r],n}if(r==="alpha"){return{a1:s,a2:s,a3:s,a4:s}}if(r==="fr"){return{frz:s}}if(r==="fs"){return{fs:/^\+|-/.test(s)?(s*1>-10?1+s/10:1)*a.fs:s*1}}if(r==="t"){var F=s.t1;var z=s.accel;var $=s.tags;var A=s.t2||(a.end-a.start)*1e3;var B={};$.forEach(function(t){var r=Object.keys(t)[0];if(~b.indexOf(r)&&!(r==="clip"&&!t[r].dots)){p(B,w(t,r,a))}});return{t:{t1:F,t2:A,accel:z,tag:B}}}return i={},i[r]=s,i}var S=[null,1,2,3,null,7,8,9,null,4,5,6];var M=["r","a","an","pos","org","move","fade","fad","clip"];function C(t,r){return{name:t,borderStyle:r[t].style.BorderStyle,tag:r[t].tag,fragments:[]}}function k(t){var r=t.styles;var a=t.name;var e=t.parsed;var n=t.start;var i=t.end;var s;var f;var l;var v;var o;var c;var u=[];var d=C(a,r);var h={};for(var g=0;g<e.length;g++){var y=e[g];var m=y.tags;var b=y.text;var k=y.drawing;var O=void 0;for(var L=0;L<m.length;L++){var j=m[L];O=j.r===undefined?O:j.r}var E={tag:O===undefined?JSON.parse(JSON.stringify(h)):{},text:b,drawing:k.length?x(k):null};for(var H=0;H<m.length;H++){var N=m[H];s=s||S[N.a||0]||N.an;f=f||w(N,"pos");l=l||w(N,"org");v=v||w(N,"move");o=o||w(N,"fade")||w(N,"fad");c=w(N,"clip")||c;var I=Object.keys(N)[0];if(I&&!~M.indexOf(I)){var R=d.tag;var F=R.c1;var z=R.c2;var $=R.c3;var A=R.c4;var B=h.fs||d.tag.fs;var P=w(N,I,{start:n,end:i,c1:F,c2:z,c3:$,c4:A,fs:B});if(I==="t"){E.tag.t=E.tag.t||[];E.tag.t.push(P.t)}else{p(E.tag,P)}}}h=E.tag;if(O!==undefined){u.push(d);d=C(O||a,r)}if(E.text||E.drawing){var T=d.fragments[d.fragments.length-1]||{};if(T.text&&E.text&&!Object.keys(E.tag).length){T.text+=E.text}else{d.fragments.push(E)}}}u.push(d);return p({alignment:s,slices:u},f,l,v,o,c)}function O(t){var r=t.info;var a=t.styles;var e=t.dialogues;var n=Infinity;var i=[];for(var s=0;s<e.length;s++){var f=e[s];if(f.Start>=f.End){continue}var l=a[f.Style].style;var v=r.Timer/100||1;var o=k({styles:a,name:f.Style,parsed:f.Text.parsed,start:f.Start,end:f.End});var c=o.alignment||l.Alignment;n=Math.min(n,f.Layer);i.push(p({layer:f.Layer,start:f.Start/v,end:f.End/v,margin:{left:f.MarginL||l.MarginL,right:f.MarginR||l.MarginR,vertical:f.MarginV||l.MarginV},effect:f.Effect},o,{alignment:c}))}for(var u=0;u<i.length;u++){i[u].layer-=n}return i.sort(function(t,r){return t.start-r.start||t.end-r.end})}function L(t){var r=t.match(/&H(\w\w)?(\w{6})&?/);var a=r[1];var e=r[2];return[a||"00",e]}function j(t){var r=t.info;var a=t.style;var e=t.format;var n={};for(var i=0;i<a.length;i++){var s=a[i];var f={};for(var l=0;l<e.length;l++){var v=e[l];f[v]=v==="Name"||v==="Fontname"||/Colour/.test(v)?s[l]:s[l]*1}var o=L(f.PrimaryColour);var c=o[0];var u=o[1];var p=L(f.SecondaryColour);var d=p[0];var h=p[1];var g=L(f.OutlineColour);var y=g[0];var m=g[1];var x=L(f.BackColour);var b=x[0];var w=x[1];var S={fn:f.Fontname,fs:f.Fontsize,c1:u,a1:c,c2:h,a2:d,c3:m,a3:y,c4:w,a4:b,b:Math.abs(f.Bold),i:Math.abs(f.Italic),u:Math.abs(f.Underline),s:Math.abs(f.StrikeOut),fscx:f.ScaleX,fscy:f.ScaleY,fsp:f.Spacing,frz:f.Angle,xbord:f.Outline,ybord:f.Outline,xshad:f.Shadow,yshad:f.Shadow,q:/^[0-3]$/.test(r.WrapStyle)?r.WrapStyle*1:2};n[f.Name]={style:f,tag:S}}return n}function E(t){var r=u(t);var a=j({info:r.info,style:r.styles.style,format:r.styles.format});return{info:r.info,width:r.info.PlayResX*1||null,height:r.info.PlayResY*1||null,collisions:r.info.Collisions||"Normal",styles:a,dialogues:O({info:r.info,styles:a,dialogues:r.events.dialogue})}}t.parse=u;t.compile=E;Object.defineProperty(t,"__esModule",{value:true})}); |
{ | ||
"name": "ass-compiler", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"description": "Parses and compiles ASS subtitle format to easy-to-use data structure.", | ||
@@ -44,3 +44,3 @@ "main": "dist/ass-compiler.js", | ||
"cross-env": "^5.1.1", | ||
"eslint": "^4.11.0", | ||
"eslint": "^4.12.1", | ||
"eslint-config-airbnb-base": "^12.1.0", | ||
@@ -51,8 +51,8 @@ "eslint-plugin-import": "^2.8.0", | ||
"mocha-istanbul": "^0.3.0", | ||
"rollup": "^0.51.7", | ||
"rollup": "^0.52.0", | ||
"rollup-plugin-buble": "^0.18.0", | ||
"rollup-plugin-istanbul": "^1.1.0", | ||
"rollup-plugin-multi-entry": "^2.0.2", | ||
"uglify-js": "^3.1.9" | ||
"uglify-js": "^3.2.0" | ||
} | ||
} |
@@ -11,26 +11,28 @@ import { parseDrawing } from './drawing.js'; | ||
const numRegexs = numTags.map(nt => ({ name: nt, regex: new RegExp(`^${nt}-?\\d`) })); | ||
export function parseTag(text) { | ||
const tag = {}; | ||
for (let i = 0; i < numTags.length; i++) { | ||
const nt = numTags[i]; | ||
const regex = new RegExp(`^${nt}-?\\d`); | ||
for (let i = 0; i < numRegexs.length; i++) { | ||
const { name, regex } = numRegexs[i]; | ||
if (regex.test(text)) { | ||
tag[nt] = text.slice(nt.length) * 1; | ||
tag[name] = text.slice(name.length) * 1; | ||
return tag; | ||
} | ||
} | ||
if (/^fn/.test(text)) tag.fn = text.slice(2); | ||
if (/^r/.test(text)) tag.r = text.slice(1); | ||
if (/^fs[\d+-]/.test(text)) tag.fs = text.slice(2); | ||
if (/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(text)) { | ||
if (/^fn/.test(text)) { | ||
tag.fn = text.slice(2); | ||
} else if (/^r/.test(text)) { | ||
tag.r = text.slice(1); | ||
} else if (/^fs[\d+-]/.test(text)) { | ||
tag.fs = text.slice(2); | ||
} else if (/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(text)) { | ||
const [, num, color] = text.match(/^(\d?)c&?H?(\w*)/); | ||
tag[`c${num || 1}`] = color && `000000${color}`.slice(-6); | ||
} | ||
if (/^\da&?H?[0-9a-f]+/i.test(text)) { | ||
} else if (/^\da&?H?[0-9a-f]+/i.test(text)) { | ||
const [, num, alpha] = text.match(/^(\d)a&?H?(\w\w)/); | ||
tag[`a${num}`] = alpha; | ||
} | ||
if (/^alpha&?H?[0-9a-f]+/i.test(text)) { | ||
} else if (/^alpha&?H?[0-9a-f]+/i.test(text)) { | ||
[, tag.alpha] = text.match(/^alpha&?H?(\w\w)/); | ||
} | ||
if (/^(?:pos|org|move|fad|fade)\(/.test(text)) { | ||
} else if (/^(?:pos|org|move|fad|fade)\(/.test(text)) { | ||
const [, key, value] = text.match(/^(\w+)\((.*?)\)/); | ||
@@ -41,4 +43,3 @@ tag[key] = value | ||
.map(Number); | ||
} | ||
if (/^i?clip/.test(text)) { | ||
} else if (/^i?clip/.test(text)) { | ||
const p = text | ||
@@ -64,4 +65,3 @@ .match(/^i?clip\((.*)\)/)[1] | ||
} | ||
} | ||
if (/^t\(/.test(text)) { | ||
} else if (/^t\(/.test(text)) { | ||
const p = text | ||
@@ -68,0 +68,0 @@ .match(/^t\((.*)\)/)[1] |
import { parseTag } from './tag.js'; | ||
export function parseTags(text) { | ||
const tags = []; | ||
let depth = 0; | ||
return text | ||
.split('') | ||
.map((x) => { | ||
if (x === '(') depth++; | ||
if (x === ')') depth--; | ||
if (depth < 0) depth = 0; | ||
return (depth && x === '\\') ? '\n' : x; | ||
}) | ||
.join('') | ||
.split(/\\/) | ||
.slice(1) | ||
.map(x => x.replace(/\n/g, '\\')) | ||
.map(parseTag); | ||
let str = ''; | ||
for (let i = 0; i < text.length; i++) { | ||
const x = text[i]; | ||
if (x === '(') depth++; | ||
if (x === ')') depth--; | ||
if (depth < 0) depth = 0; | ||
if (!depth && x === '\\') { | ||
if (str) { | ||
tags.push(str); | ||
} | ||
str = ''; | ||
} else { | ||
str += x; | ||
} | ||
} | ||
tags.push(str); | ||
return tags.map(parseTag); | ||
} |
@@ -1,14 +0,14 @@ | ||
export /* istanbul ignore next */ function assign(target, ...sources) { | ||
if (Object.assign) { | ||
return Object.assign(target, ...sources); | ||
} | ||
for (let i = 0; i < sources.length; i++) { | ||
if (!sources[i]) continue; | ||
const keys = Object.keys(sources[i]); | ||
for (let j = 0; j < keys.length; j++) { | ||
// eslint-disable-next-line no-param-reassign | ||
target[keys[j]] = sources[i][keys[j]]; | ||
export const assign = Object.assign || ( | ||
/* istanbul ignore next */ | ||
function assign(target, ...sources) { | ||
for (let i = 0; i < sources.length; i++) { | ||
if (!sources[i]) continue; | ||
const keys = Object.keys(sources[i]); | ||
for (let j = 0; j < keys.length; j++) { | ||
// eslint-disable-next-line no-param-reassign | ||
target[keys[j]] = sources[i][keys[j]]; | ||
} | ||
} | ||
return target; | ||
} | ||
return target; | ||
} | ||
); |
56184
1428
1495