ass-compiler
Advanced tools
Comparing version 0.0.11 to 0.1.0
@@ -5,3 +5,3 @@ (function (global, factory) { | ||
(global = global || self, factory(global.assCompiler = {})); | ||
}(this, function (exports) { 'use strict'; | ||
}(this, (function (exports) { 'use strict'; | ||
@@ -243,4 +243,30 @@ function parseEffect(text) { | ||
function parseStyle(text) { | ||
return text.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/); | ||
var assign = Object.assign || ( | ||
/* istanbul ignore next */ | ||
function assign(target) { | ||
var sources = [], len = arguments.length - 1; | ||
while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; | ||
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; | ||
} | ||
); | ||
var stylesFormat = ['Name', 'Fontname', 'Fontsize', 'PrimaryColour', 'SecondaryColour', 'OutlineColour', 'BackColour', 'Bold', 'Italic', 'Underline', 'StrikeOut', 'ScaleX', 'ScaleY', 'Spacing', 'Angle', 'BorderStyle', 'Outline', 'Shadow', 'Alignment', 'MarginL', 'MarginR', 'MarginV', 'Encoding']; | ||
var eventsFormat = ['Layer', 'Start', 'End', 'Style', 'Name', 'MarginL', 'MarginR', 'MarginV', 'Effect', 'Text']; | ||
function parseStyle(text, format) { | ||
var values = text.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/); | ||
return assign.apply(void 0, [ {} ].concat( format.map(function (fmt, idx) { | ||
var obj; | ||
return (( obj = {}, obj[fmt] = values[idx], obj )); | ||
}) )); | ||
} | ||
@@ -279,3 +305,3 @@ | ||
if (/^Style\s*:/i.test(line)) { | ||
tree.styles.style.push(parseStyle(line)); | ||
tree.styles.style.push(parseStyle(line, tree.styles.format)); | ||
} | ||
@@ -299,20 +325,108 @@ } | ||
var assign = Object.assign || ( | ||
/* istanbul ignore next */ | ||
function assign(target) { | ||
var sources = [], len = arguments.length - 1; | ||
while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; | ||
function stringifyInfo(info) { | ||
return Object.keys(info).map(function (key) { return (key + ": " + (info[key])); }).join('\n'); | ||
} | ||
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; | ||
function pad00(n) { | ||
return ("00" + n).slice(-2); | ||
} | ||
function stringifyTime(t) { | ||
var ms = t.toFixed(2).slice(-2); | ||
var s = (t | 0) % 60; | ||
var m = (t / 60 | 0) % 60; | ||
var h = t / 3600 | 0; | ||
return (h + ":" + (pad00(m)) + ":" + (pad00(s)) + "." + ms); | ||
} | ||
function stringifyEffect(eff) { | ||
if (!eff) { return ''; } | ||
if (eff.name === 'banner') { | ||
return ("Banner;" + (eff.delay) + ";" + (eff.leftToRight) + ";" + (eff.fadeAwayWidth)); | ||
} | ||
); | ||
return ((eff.name.replace(/^\w/, function (x) { return x.toUpperCase(); })) + ";" + (eff.y1) + ";" + (eff.y2) + ";" + (eff.delay) + ";" + (eff.fadeAwayHeight)); | ||
} | ||
function stringifyDrawing(drawing) { | ||
return drawing.map(function (cmds) { return cmds.join(' '); }).join(' '); | ||
} | ||
function stringifyTag(tag) { | ||
var ref = Object.keys(tag); | ||
var key = ref[0]; | ||
if (!key) { return ''; } | ||
var _ = tag[key]; | ||
if (['pos', 'org', 'move', 'fad', 'fade'].some(function (ft) { return ft === key; })) { | ||
return ("\\" + key + "(" + _ + ")"); | ||
} | ||
if (/^[ac]\d$/.test(key)) { | ||
return ("\\" + (key[1]) + (key[0]) + "&H" + _ + "&"); | ||
} | ||
if (key === 'alpha') { | ||
return ("\\alpha&H" + _ + "&"); | ||
} | ||
if (key === 'clip') { | ||
return ("\\" + (_.inverse ? 'i' : '') + "clip(" + (_.dots || ("" + (_.scale === 1 ? '' : ((_.scale) + ",")) + (stringifyDrawing(_.drawing)))) + ")"); | ||
} | ||
if (key === 't') { | ||
return ("\\t(" + ([_.t1, _.t2, _.accel, _.tags.map(stringifyTag).join('')]) + ")"); | ||
} | ||
return ("\\" + key + _); | ||
} | ||
function stringifyText(Text) { | ||
return Text.parsed.map(function (ref) { | ||
var tags = ref.tags; | ||
var text = ref.text; | ||
var drawing = ref.drawing; | ||
var tagText = tags.map(stringifyTag).join(''); | ||
var content = drawing.length ? stringifyDrawing(drawing) : text; | ||
return ("" + (tagText ? ("{" + tagText + "}") : '') + content); | ||
}).join(''); | ||
} | ||
function stringifyEvent(event) { | ||
var m0 = '0000'; | ||
return [ | ||
event.Layer, | ||
stringifyTime(event.Start), | ||
stringifyTime(event.End), | ||
event.Style, | ||
event.Name, | ||
event.MarginL || m0, | ||
event.MarginR || m0, | ||
event.MarginV || m0, | ||
stringifyEffect(event.Effect), | ||
stringifyText(event.Text) ].join(); | ||
} | ||
function stringify(ref) { | ||
var ref$1; | ||
var info = ref.info; | ||
var styles = ref.styles; | ||
var events = ref.events; | ||
return [ | ||
'[Script Info]', | ||
stringifyInfo(info), | ||
'', | ||
'[V4+ Styles]', | ||
("Format: " + (stylesFormat.join(', '))) ].concat( styles.style.map(function (style) { return ("Style: " + (stylesFormat.map(function (fmt) { return style[fmt]; }).join())); }), | ||
[''], | ||
['[Events]'], | ||
[("Format: " + (eventsFormat.join(', ')))], | ||
(ref$1 = []) | ||
.concat.apply(ref$1, ['Comment', 'Dialogue'].map(function (type) { return ( | ||
events[type.toLowerCase()].map(function (dia) { return ({ | ||
start: dia.Start, | ||
end: dia.End, | ||
string: (type + ": " + (stringifyEvent(dia))), | ||
}); }) | ||
); })) | ||
.sort(function (a, b) { return (a.start - b.start) || (a.end - b.end); }) | ||
.map(function (x) { return x.string; }), | ||
[''] ).join('\n'); | ||
} | ||
function createCommand(arr) { | ||
@@ -574,2 +688,5 @@ var cmd = { | ||
} | ||
if (key === 'K') { | ||
return { kf: value }; | ||
} | ||
if (key === 't') { | ||
@@ -599,9 +716,9 @@ var t1$3 = value.t1; | ||
function createSlice(name, styles) { | ||
return { | ||
name: name, | ||
borderStyle: styles[name].style.BorderStyle, | ||
tag: styles[name].tag, | ||
fragments: [], | ||
}; | ||
function inheritTag(pTag) { | ||
return JSON.parse(JSON.stringify(assign({}, pTag, { | ||
k: undefined, | ||
kf: undefined, | ||
ko: undefined, | ||
kt: undefined, | ||
}))); | ||
} | ||
@@ -611,3 +728,3 @@ | ||
var styles = ref.styles; | ||
var name = ref.name; | ||
var style = ref.style; | ||
var parsed = ref.parsed; | ||
@@ -624,3 +741,3 @@ var start = ref.start; | ||
var slices = []; | ||
var slice = createSlice(name, styles); | ||
var slice = { style: style, fragments: [] }; | ||
var prevTag = {}; | ||
@@ -638,3 +755,3 @@ for (var i = 0; i < parsed.length; i++) { | ||
var fragment = { | ||
tag: reset === undefined ? JSON.parse(JSON.stringify(prevTag)) : {}, | ||
tag: reset === undefined ? inheritTag(prevTag) : {}, | ||
text: text, | ||
@@ -653,8 +770,8 @@ drawing: drawing.length ? compileDrawing(drawing) : null, | ||
if (key && !~globalTags.indexOf(key)) { | ||
var ref$2 = slice.tag; | ||
var c1 = ref$2.c1; | ||
var c2 = ref$2.c2; | ||
var c3 = ref$2.c3; | ||
var c4 = ref$2.c4; | ||
var fs = prevTag.fs || slice.tag.fs; | ||
var sliceTag = styles[style].tag; | ||
var c1 = sliceTag.c1; | ||
var c2 = sliceTag.c2; | ||
var c3 = sliceTag.c3; | ||
var c4 = sliceTag.c4; | ||
var fs = prevTag.fs || sliceTag.fs; | ||
var compiledTag = compileTag(tag$1, key, { start: start, end: end, c1: c1, c2: c2, c3: c3, c4: c4, fs: fs }); | ||
@@ -672,3 +789,3 @@ if (key === 't') { | ||
slices.push(slice); | ||
slice = createSlice(styles[reset] ? reset : name, styles); | ||
slice = { style: styles[reset] ? reset : style, fragments: [] }; | ||
} | ||
@@ -707,3 +824,3 @@ if (fragment.text || fragment.drawing) { | ||
styles: styles, | ||
name: dia.Style, | ||
style: dia.Style, | ||
parsed: dia.Text.parsed, | ||
@@ -719,2 +836,4 @@ start: dia.Start, | ||
end: dia.End, | ||
style: dia.Style, | ||
name: dia.Name, | ||
// reset style by `\r` will not effect margin and alignment | ||
@@ -792,14 +911,6 @@ margin: { | ||
var style = ref.style; | ||
var format = ref.format; | ||
var defaultStyle = ref.defaultStyle; | ||
var result = {}; | ||
var styles = [ | ||
assign({}, DEFAULT_STYLE, defaultStyle, { Name: 'Default' }) ].concat( style.map(function (stl) { | ||
var s = {}; | ||
for (var i = 0; i < format.length; i++) { | ||
s[format[i]] = stl[i]; | ||
} | ||
return s; | ||
}) ); | ||
var styles = [assign({}, DEFAULT_STYLE, defaultStyle, { Name: 'Default' })].concat(style); | ||
var loop = function ( i ) { | ||
@@ -851,2 +962,3 @@ var s = styles[i]; | ||
yshad: s.Shadow, | ||
fe: s.Encoding, | ||
q: /^[0-3]$/.test(info.WrapStyle) ? info.WrapStyle * 1 : 2, | ||
@@ -868,3 +980,2 @@ }; | ||
style: tree.styles.style, | ||
format: tree.styles.format, | ||
defaultStyle: options.defaultStyle || {}, | ||
@@ -885,7 +996,164 @@ }); | ||
function decompileStyle(ref) { | ||
var style = ref.style; | ||
var tag = ref.tag; | ||
var obj = assign({}, style, { | ||
PrimaryColour: ("&H" + (tag.a1) + (tag.c1)), | ||
SecondaryColour: ("&H" + (tag.a2) + (tag.c2)), | ||
OutlineColour: ("&H" + (tag.a3) + (tag.c3)), | ||
BackColour: ("&H" + (tag.a4) + (tag.c4)), | ||
}); | ||
return ("Style: " + (stylesFormat.map(function (fmt) { return obj[fmt]; }).join())); | ||
} | ||
var drawingInstructionMap = { | ||
M: 'm', | ||
L: 'l', | ||
C: 'b', | ||
}; | ||
function decompileDrawing(ref) { | ||
var instructions = ref.instructions; | ||
return instructions.map(function (ref) { | ||
var ref$1; | ||
var type = ref.type; | ||
var points = ref.points; | ||
return ( | ||
(ref$1 = [drawingInstructionMap[type]]) | ||
.concat.apply(ref$1, points.map(function (ref) { | ||
var x = ref.x; | ||
var y = ref.y; | ||
return [x, y]; | ||
})) | ||
.join(' ') | ||
); | ||
}).join(' '); | ||
} | ||
var ca = function (x) { return function (n) { return function (_) { return ("" + n + x + "&H" + _ + "&"); }; }; }; | ||
var c = ca('c'); | ||
var a = ca('a'); | ||
var tagDecompiler = { | ||
c1: c(1), | ||
c2: c(2), | ||
c3: c(3), | ||
c4: c(4), | ||
a1: a(1), | ||
a2: a(2), | ||
a3: a(3), | ||
a4: a(4), | ||
pos: function (_) { return ("pos(" + ([_.x, _.y]) + ")"); }, | ||
org: function (_) { return ("org(" + ([_.x, _.y]) + ")"); }, | ||
move: function (_) { return ("move(" + ([_.x1, _.y1, _.x2, _.y2, _.t1, _.t2]) + ")"); }, | ||
fade: function (_) { return ( | ||
_.type === 'fad' | ||
? ("fad(" + ([_.t1, _.t2]) + ")") | ||
: ("fade(" + ([_.a1, _.a2, _.a3, _.t1, _.t2, _.t3, _.t4]) + ")") | ||
); }, | ||
clip: function (_) { return ((_.inverse ? 'i' : '') + "clip(" + (_.dots | ||
? ("" + ([_.dots.x1, _.dots.y1, _.dots.x2, _.dots.y2])) | ||
: ("" + (_.scale === 1 ? '' : ((_.scale) + ",")) + (decompileDrawing(_.drawing)))) + ")"); }, | ||
// eslint-disable-next-line no-use-before-define | ||
t: function (arr) { return arr.map(function (_) { return ("t(" + ([_.t1, _.t2, _.accel, decompileTag(_.tag)]) + ")"); }).join('\\'); }, | ||
}; | ||
function decompileTag(tag) { | ||
return Object.keys(tag).map(function (key) { | ||
var fn = tagDecompiler[key] || (function (_) { return ("" + key + _); }); | ||
return ("\\" + (fn(tag[key]))); | ||
}).join(''); | ||
} | ||
function decompileSlice(slice) { | ||
return slice.fragments.map(function (ref) { | ||
var tag = ref.tag; | ||
var text = ref.text; | ||
var drawing = ref.drawing; | ||
var tagText = decompileTag(tag); | ||
return ("" + (tagText ? ("{" + tagText + "}") : '') + (drawing ? decompileDrawing(drawing) : text)); | ||
}).join(''); | ||
} | ||
function decompileText(dia, style) { | ||
return dia.slices | ||
.map(function (slice, idx) { | ||
var sliceCopy = JSON.parse(JSON.stringify(slice)); | ||
var ref = sliceCopy.fragments[0]; | ||
var tag = ref.tag; | ||
if (idx) { | ||
tag.r = slice.style === dia.style ? '' : slice.style; | ||
} else { | ||
if (style.Alignment !== dia.alignment) { | ||
tag.an = dia.alignment; | ||
} | ||
['pos', 'org', 'move', 'fade', 'clip'].forEach(function (key) { | ||
if (dia[key]) { | ||
tag[key] = dia[key]; | ||
} | ||
}); | ||
} | ||
return sliceCopy; | ||
}) | ||
.map(decompileSlice) | ||
.join(''); | ||
} | ||
function getMargin(margin, styleMargin) { | ||
return margin === styleMargin ? '0000' : margin; | ||
} | ||
function decompileDialogue(dia, style) { | ||
return ("Dialogue: " + ([ | ||
dia.layer, | ||
stringifyTime(dia.start), | ||
stringifyTime(dia.end), | ||
dia.style, | ||
dia.name, | ||
getMargin(dia.margin.left, style.MarginL), | ||
getMargin(dia.margin.right, style.MarginR), | ||
getMargin(dia.margin.vertical, style.MarginV), | ||
stringifyEffect(dia.effect), | ||
decompileText(dia, style) ].join())); | ||
} | ||
function decompile(ref) { | ||
var info = ref.info; | ||
var width = ref.width; | ||
var height = ref.height; | ||
var collisions = ref.collisions; | ||
var styles = ref.styles; | ||
var dialogues = ref.dialogues; | ||
return [ | ||
'[Script Info]', | ||
stringifyInfo(assign({}, info, { | ||
PlayResX: width, | ||
PlayResY: height, | ||
Collisions: collisions, | ||
})), | ||
'', | ||
'[V4+ Styles]', | ||
("Format: " + (stylesFormat.join(', '))) ].concat( Object.keys(styles).map(function (name) { return decompileStyle(styles[name]); }), | ||
[''], | ||
['[Events]'], | ||
[("Format: " + (eventsFormat.join(', ')))], | ||
dialogues | ||
.sort(function (x, y) { return x.start - y.start || x.end - y.end; }) | ||
.map(function (dia) { return decompileDialogue(dia, styles[dia.style].style); }), | ||
[''] ).join('\n'); | ||
} | ||
exports.compile = compile; | ||
exports.decompile = decompile; | ||
exports.parse = parse; | ||
exports.stringify = stringify; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
})); | ||
}))); |
@@ -1,1 +0,1 @@ | ||
(function(t,r){typeof exports==="object"&&typeof module!=="undefined"?r(exports):typeof define==="function"&&define.amd?define(["exports"],r):(t=t||self,r(t.assCompiler={}))})(this,function(t){"use strict";function f(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 m(t){return t.toLowerCase().replace(/([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)/g," $1 ").replace(/([mnlbspc])/g," $1 ").trim().replace(/\s+/g," ").split(/\s(?=[mnlbspc])/).map(function(t){return t.split(" ").filter(function(t,r){return!(r&&isNaN(t*1))})})}var r=["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 x=r.map(function(t){return{name:t,regex:new RegExp("^"+t+"-?\\d")}});function b(t){var r;var a={};for(var e=0;e<x.length;e++){var n=x[e];var i=n.name;var s=n.regex;if(s.test(t)){a[i]=t.slice(i.length)*1;return a}}if(/^fn/.test(t)){a.fn=t.slice(2)}else if(/^r/.test(t)){a.r=t.slice(1)}else if(/^fs[\d+-]/.test(t)){a.fs=t.slice(2)}else if(/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(t)){var l=t.match(/^(\d?)c&?H?(\w*)/);var f=l[1];var v=l[2];a["c"+(f||1)]=v&&("000000"+v).slice(-6)}else if(/^\da&?H?[0-9a-f]+/i.test(t)){var o=t.match(/^(\d)a&?H?(\w\w)/);var c=o[1];var u=o[2];a["a"+c]=u}else if(/^alpha&?H?[0-9a-f]+/i.test(t)){r=t.match(/^alpha&?H?([0-9a-f]+)/i),a.alpha=r[1];a.alpha=("00"+a.alpha).slice(-2)}else if(/^(?:pos|org|move|fad|fade)\(/.test(t)){var p=t.match(/^(\w+)\((.*?)\)?$/);var d=p[1];var g=p[2];a[d]=g.trim().split(/\s*,\s*/).map(Number)}else if(/^i?clip/.test(t)){var y=t.match(/^i?clip\((.*?)\)?$/)[1].trim().split(/\s*,\s*/);a.clip={inverse:/iclip/.test(t),scale:1,drawing:null,dots:null};if(y.length===1){a.clip.drawing=m(y[0])}if(y.length===2){a.clip.scale=y[0]*1;a.clip.drawing=m(y[1])}if(y.length===4){a.clip.dots=y.map(Number)}}else if(/^t\(/.test(t)){var h=t.match(/^t\((.*?)\)?$/)[1].trim().replace(/\\.*/,function(t){return t.replace(/,/g,"\n")}).split(/\s*,\s*/);if(!h[0]){return a}a.t={t1:0,t2:0,accel:1,tags:h[h.length-1].replace(/\n/g,",").split("\\").slice(1).map(b)};if(h.length===2){a.t.accel=h[0]*1}if(h.length===3){a.t.t1=h[0]*1;a.t.t2=h[1]*1}if(h.length===4){a.t.t1=h[0]*1;a.t.t2=h[1]*1;a.t.accel=h[2]*1}}return a}function s(t){var r=[];var a=0;var e="";for(var n=0;n<t.length;n++){var i=t[n];if(i==="("){a++}if(i===")"){a--}if(a<0){a=0}if(!a&&i==="\\"){if(e){r.push(e)}e=""}else{e+=i}}r.push(e);return r.map(b)}function v(t){var r=t.split(/{([^{}]*?)}/);var a=[];if(r[0].length){a.push({tags:[],text:r[0],drawing:[]})}for(var e=1;e<r.length;e+=2){var n=s(r[e]);var i=n.reduce(function(t,r){return r.p===undefined?t:!!r.p},false);a.push({tags:n,text:i?"":r[e+1],drawing:i?m(r[e+1]):[]})}return{raw:t,combined:a.map(function(t){return t.text}).join(""),parsed:a}}function o(t){var r=t.split(":");return r[0]*3600+r[1]*60+r[2]*1}function u(t,r){var a=t.split(",");if(a.length>r.length){var e=a.slice(r.length-1).join();a=a.slice(0,r.length-1);a.push(e)}var n={};for(var i=0;i<a.length;i++){var s=r[i];var l=a[i].trim();switch(s){case"Layer":case"MarginL":case"MarginR":case"MarginV":n[s]=l*1;break;case"Start":case"End":n[s]=o(l);break;case"Effect":n[s]=f(l);break;case"Text":n[s]=v(l);break;default:n[s]=l}}return n}function p(t){return t.match(/Format\s*:\s*(.*)/i)[1].split(/\s*,\s*/)}function d(t){return t.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/)}function n(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 l=s[1];var f=s[2];r.info[l]=f}}if(e===2){if(/^Format\s*:/i.test(i)){r.styles.format=p(i)}if(/^Style\s*:/i.test(i)){r.styles.style.push(d(i))}}if(e===3){if(/^Format\s*:/i.test(i)){r.events.format=p(i)}if(/^(?:Comment|Dialogue)\s*:/i.test(i)){var v=i.match(/^(\w+?)\s*:\s*(.*)/i);var o=v[1];var c=v[2];r.events[o.toLowerCase()].push(u(c,r.events.format))}}}return r}var R=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 c(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 g(t){if(!t.points.length||!t.type){return false}if(/C|S/.test(t.type)&&t.points.length<3){return false}return true}function y(t){var r;var e=Infinity;var n=Infinity;var i=-Infinity;var s=-Infinity;(r=[]).concat.apply(r,t.map(function(t){var r=t.points;return r})).forEach(function(t){var r=t.x;var a=t.y;e=Math.min(e,r);n=Math.min(n,a);i=Math.max(i,r);s=Math.max(s,a)});return{minX:e,minY:n,width:i-e,height:s-n}}function h(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 l=function(t,r){return t[0]*r[0]+t[1]*r[1]+t[2]*r[2]+t[3]*r[3]};var f=[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:l(s,f),y:l(s,v)}]});for(var o=3;o<t.length;o++){f=[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:l(n,f),y:l(n,v)},{x:l(i,f),y:l(i,v)},{x:l(s,f),y:l(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 S(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 A(t){var r;var a=[];var e=0;while(e<t.length){var n=t[e];var i=c(n);if(g(i)){if(i.type==="S"){var s=(a[e-1]||{points:[{x:0,y:0}]}).points.slice(-1)[0];var l=s.x;var f=s.y;i.points.unshift({x:l,y:f})}if(e){i.prev=a[e-1].type;a[e-1].next=i.type}a.push(i);e++}else{if(e&&a[e-1].type==="S"){var v={p:i.points,c:a[e-1].points.slice(0,3)};a[e-1].points=a[e-1].points.concat((v[n[0]]||[]).map(function(t){var r=t.x;var a=t.y;return{x:r,y:a}}))}t.splice(e,1)}}var o=(r=[]).concat.apply(r,a.map(function(t){var r=t.type;var a=t.points;var e=t.prev;var n=t.next;return r==="S"?h(a,e,n):{type:r,points:a}}));return R({instructions:o,d:S(o)},y(a))}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 z(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 l=s[0];var f=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:l,y1:f,x2:v,y2:o,t1:c,t2:u}}:null}if(r==="fad"||r==="fade"){if(s.length===2){var p=s[0];var d=s[1];return{fade:{type:"fad",t1:p,t2:d}}}if(s.length===7){var g=s[0];var y=s[1];var h=s[2];var m=s[3];var x=s[4];var b=s[5];var S=s[6];return{fade:{type:"fade",a1:g,a2:y,a3:h,t1:m,t2:x,t3:b,t4:S}}}return null}if(r==="clip"){var w=s.inverse;var M=s.scale;var C=s.drawing;var O=s.dots;if(C){return{clip:{inverse:w,scale:M,drawing:A(C),dots:O}}}if(O){var k=O[0];var F=O[1];var N=O[2];var H=O[3];return{clip:{inverse:w,scale:M,drawing:C,dots:{x1:k,y1:F,x2:N,y2:H}}}}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 L=s.t1;var j=s.accel;var E=s.tags;var $=s.t2||(a.end-a.start)*1e3;var I={};E.forEach(function(t){var r=Object.keys(t)[0];if(~B.indexOf(r)&&!(r==="clip"&&!t[r].dots)){R(I,z(t,r,a))}});return{t:{t1:L,t2:$,accel:j,tag:I}}}return i={},i[r]=s,i}var D=[null,1,2,3,null,7,8,9,null,4,5,6];var P=["r","a","an","pos","org","move","fade","fad","clip"];function V(t,r){return{name:t,borderStyle:r[t].style.BorderStyle,tag:r[t].tag,fragments:[]}}function w(t){var r=t.styles;var a=t.name;var e=t.parsed;var n=t.start;var i=t.end;var s;var l;var f;var v;var o;var c;var u=[];var p=V(a,r);var d={};for(var g=0;g<e.length;g++){var y=e[g];var h=y.tags;var m=y.text;var x=y.drawing;var b=void 0;for(var S=0;S<h.length;S++){var w=h[S];b=w.r===undefined?b:w.r}var M={tag:b===undefined?JSON.parse(JSON.stringify(d)):{},text:m,drawing:x.length?A(x):null};for(var C=0;C<h.length;C++){var O=h[C];s=s||D[O.a||0]||O.an;l=l||z(O,"pos");f=f||z(O,"org");v=v||z(O,"move");o=o||z(O,"fade")||z(O,"fad");c=z(O,"clip")||c;var k=Object.keys(O)[0];if(k&&!~P.indexOf(k)){var F=p.tag;var N=F.c1;var H=F.c2;var L=F.c3;var j=F.c4;var E=d.fs||p.tag.fs;var $=z(O,k,{start:n,end:i,c1:N,c2:H,c3:L,c4:j,fs:E});if(k==="t"){M.tag.t=M.tag.t||[];M.tag.t.push($.t)}else{R(M.tag,$)}}}d=M.tag;if(b!==undefined){u.push(p);p=V(r[b]?b:a,r)}if(M.text||M.drawing){var I=p.fragments[p.fragments.length-1]||{};if(I.text&&M.text&&!Object.keys(M.tag).length){I.text+=M.text}else{p.fragments.push(M)}}}u.push(p);return R({alignment:s,slices:u},l,f,v,o,c)}function i(t){var r=t.styles;var a=t.dialogues;var e=Infinity;var n=[];for(var i=0;i<a.length;i++){var s=a[i];if(s.Start>=s.End){continue}if(!r[s.Style]){s.Style="Default"}var l=r[s.Style].style;var f=w({styles:r,name:s.Style,parsed:s.Text.parsed,start:s.Start,end:s.End});var v=f.alignment||l.Alignment;e=Math.min(e,s.Layer);n.push(R({layer:s.Layer,start:s.Start,end:s.End,margin:{left:s.MarginL||l.MarginL,right:s.MarginR||l.MarginR,vertical:s.MarginV||l.MarginV},effect:s.Effect},f,{alignment:v}))}for(var o=0;o<n.length;o++){n[o].layer-=e}return n.sort(function(t,r){return t.start-r.start||t.end-r.end})}var l={Name:"Default",Fontname:"Arial",Fontsize:"20",PrimaryColour:"&H00FFFFFF&",SecondaryColour:"&H000000FF&",OutlineColour:"&H00000000&",BackColour:"&H00000000&",Bold:"0",Italic:"0",Underline:"0",StrikeOut:"0",ScaleX:"100",ScaleY:"100",Spacing:"0",Angle:"0",BorderStyle:"1",Outline:"2",Shadow:"2",Alignment:"2",MarginL:"10",MarginR:"10",MarginV:"10",Encoding:"1"};function M(t){if(/^(&|H|&H)[0-9a-f]{6,}/i.test(t)){var r=t.match(/&?H?([0-9a-f]{2})?([0-9a-f]{6})/i);var a=r[1];var e=r[2];return[a||"00",e]}var n=parseInt(t,10);if(!isNaN(n)){var i=-2147483648;var s=2147483647;if(n<i){return["00","000000"]}var l=i<=n&&n<=s?("00000000"+(n<0?n+4294967296:n).toString(16)).slice(-8):String(n).slice(0,8);return[l.slice(0,2),l.slice(2)]}return["00","000000"]}function C(t){var g=t.info;var r=t.style;var e=t.format;var a=t.defaultStyle;var y={};var h=[R({},l,a,{Name:"Default"})].concat(r.map(function(t){var r={};for(var a=0;a<e.length;a++){r[e[a]]=t[a]}return r}));var n=function(t){var r=h[t];if(/^(\*+)Default$/.test(r.Name)){r.Name="Default"}Object.keys(r).forEach(function(t){if(t!=="Name"&&t!=="Fontname"&&!/Colour/.test(t)){r[t]*=1}});var a=M(r.PrimaryColour);var e=a[0];var n=a[1];var i=M(r.SecondaryColour);var s=i[0];var l=i[1];var f=M(r.OutlineColour);var v=f[0];var o=f[1];var c=M(r.BackColour);var u=c[0];var p=c[1];var d={fn:r.Fontname,fs:r.Fontsize,c1:n,a1:e,c2:l,a2:s,c3:o,a3:v,c4:p,a4:u,b:Math.abs(r.Bold),i:Math.abs(r.Italic),u:Math.abs(r.Underline),s:Math.abs(r.StrikeOut),fscx:r.ScaleX,fscy:r.ScaleY,fsp:r.Spacing,frz:r.Angle,xbord:r.Outline,ybord:r.Outline,xshad:r.Shadow,yshad:r.Shadow,q:/^[0-3]$/.test(g.WrapStyle)?g.WrapStyle*1:2};y[r.Name]={style:r,tag:d}};for(var i=0;i<h.length;i++)n(i);return y}function a(t,r){if(r===void 0)r={};var a=n(t);var e=C({info:a.info,style:a.styles.style,format:a.styles.format,defaultStyle:r.defaultStyle||{}});return{info:a.info,width:a.info.PlayResX*1||null,height:a.info.PlayResY*1||null,collisions:a.info.Collisions||"Normal",styles:e,dialogues:i({styles:e,dialogues:a.events.dialogue})}}t.compile=a;t.parse=n;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):(t=t||self,r(t.assCompiler={}))})(this,function(t){"use strict";function f(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 h(t){return t.toLowerCase().replace(/([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)/g," $1 ").replace(/([mnlbspc])/g," $1 ").trim().replace(/\s+/g," ").split(/\s(?=[mnlbspc])/).map(function(t){return t.split(" ").filter(function(t,r){return!(r&&isNaN(t*1))})})}var r=["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 x=r.map(function(t){return{name:t,regex:new RegExp("^"+t+"-?\\d")}});function S(t){var r;var e={};for(var a=0;a<x.length;a++){var n=x[a];var i=n.name;var s=n.regex;if(s.test(t)){e[i]=t.slice(i.length)*1;return e}}if(/^fn/.test(t)){e.fn=t.slice(2)}else if(/^r/.test(t)){e.r=t.slice(1)}else if(/^fs[\d+-]/.test(t)){e.fs=t.slice(2)}else if(/^\d?c&?H?[0-9a-f]+|^\d?c$/i.test(t)){var o=t.match(/^(\d?)c&?H?(\w*)/);var f=o[1];var l=o[2];e["c"+(f||1)]=l&&("000000"+l).slice(-6)}else if(/^\da&?H?[0-9a-f]+/i.test(t)){var u=t.match(/^(\d)a&?H?(\w\w)/);var c=u[1];var v=u[2];e["a"+c]=v}else if(/^alpha&?H?[0-9a-f]+/i.test(t)){r=t.match(/^alpha&?H?([0-9a-f]+)/i),e.alpha=r[1];e.alpha=("00"+e.alpha).slice(-2)}else if(/^(?:pos|org|move|fad|fade)\(/.test(t)){var p=t.match(/^(\w+)\((.*?)\)?$/);var d=p[1];var y=p[2];e[d]=y.trim().split(/\s*,\s*/).map(Number)}else if(/^i?clip/.test(t)){var g=t.match(/^i?clip\((.*?)\)?$/)[1].trim().split(/\s*,\s*/);e.clip={inverse:/iclip/.test(t),scale:1,drawing:null,dots:null};if(g.length===1){e.clip.drawing=h(g[0])}if(g.length===2){e.clip.scale=g[0]*1;e.clip.drawing=h(g[1])}if(g.length===4){e.clip.dots=g.map(Number)}}else if(/^t\(/.test(t)){var m=t.match(/^t\((.*?)\)?$/)[1].trim().replace(/\\.*/,function(t){return t.replace(/,/g,"\n")}).split(/\s*,\s*/);if(!m[0]){return e}e.t={t1:0,t2:0,accel:1,tags:m[m.length-1].replace(/\n/g,",").split("\\").slice(1).map(S)};if(m.length===2){e.t.accel=m[0]*1}if(m.length===3){e.t.t1=m[0]*1;e.t.t2=m[1]*1}if(m.length===4){e.t.t1=m[0]*1;e.t.t2=m[1]*1;e.t.accel=m[2]*1}}return e}function s(t){var r=[];var e=0;var a="";for(var n=0;n<t.length;n++){var i=t[n];if(i==="("){e++}if(i===")"){e--}if(e<0){e=0}if(!e&&i==="\\"){if(a){r.push(a)}a=""}else{a+=i}}r.push(a);return r.map(S)}function l(t){var r=t.split(/{([^{}]*?)}/);var e=[];if(r[0].length){e.push({tags:[],text:r[0],drawing:[]})}for(var a=1;a<r.length;a+=2){var n=s(r[a]);var i=n.reduce(function(t,r){return r.p===undefined?t:!!r.p},false);e.push({tags:n,text:i?"":r[a+1],drawing:i?h(r[a+1]):[]})}return{raw:t,combined:e.map(function(t){return t.text}).join(""),parsed:e}}function u(t){var r=t.split(":");return r[0]*3600+r[1]*60+r[2]*1}function v(t,r){var e=t.split(",");if(e.length>r.length){var a=e.slice(r.length-1).join();e=e.slice(0,r.length-1);e.push(a)}var n={};for(var i=0;i<e.length;i++){var s=r[i];var o=e[i].trim();switch(s){case"Layer":case"MarginL":case"MarginR":case"MarginV":n[s]=o*1;break;case"Start":case"End":n[s]=u(o);break;case"Effect":n[s]=f(o);break;case"Text":n[s]=l(o);break;default:n[s]=o}}return n}function p(t){return t.match(/Format\s*:\s*(.*)/i)[1].split(/\s*,\s*/)}var I=Object.assign||function t(r){var e=[],a=arguments.length-1;while(a-- >0)e[a]=arguments[a+1];for(var n=0;n<e.length;n++){if(!e[n]){continue}var i=Object.keys(e[n]);for(var s=0;s<i.length;s++){r[i[s]]=e[n][i[s]]}}return r};var o=["Name","Fontname","Fontsize","PrimaryColour","SecondaryColour","OutlineColour","BackColour","Bold","Italic","Underline","StrikeOut","ScaleX","ScaleY","Spacing","Angle","BorderStyle","Outline","Shadow","Alignment","MarginL","MarginR","MarginV","Encoding"];var c=["Layer","Start","End","Style","Name","MarginL","MarginR","MarginV","Effect","Text"];function d(t,r){var a=t.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/);return I.apply(void 0,[{}].concat(r.map(function(t,r){var e;return e={},e[t]=a[r],e})))}function n(t){var r={info:{},styles:{format:[],style:[]},events:{format:[],comment:[],dialogue:[]}};var e=t.split(/\r?\n/);var a=0;for(var n=0;n<e.length;n++){var i=e[n].trim();if(/^;/.test(i)){continue}if(/^\[Script Info\]/i.test(i)){a=1}else if(/^\[V4\+? Styles\]/i.test(i)){a=2}else if(/^\[Events\]/i.test(i)){a=3}else if(/^\[.*\]/.test(i)){a=0}if(a===0){continue}if(a===1){if(/:/.test(i)){var s=i.match(/(.*?)\s*:\s*(.*)/);var o=s[1];var f=s[2];r.info[o]=f}}if(a===2){if(/^Format\s*:/i.test(i)){r.styles.format=p(i)}if(/^Style\s*:/i.test(i)){r.styles.style.push(d(i,r.styles.format))}}if(a===3){if(/^Format\s*:/i.test(i)){r.events.format=p(i)}if(/^(?:Comment|Dialogue)\s*:/i.test(i)){var l=i.match(/^(\w+?)\s*:\s*(.*)/i);var u=l[1];var c=l[2];r.events[u.toLowerCase()].push(v(c,r.events.format))}}}return r}function y(r){return Object.keys(r).map(function(t){return t+": "+r[t]}).join("\n")}function i(t){return("00"+t).slice(-2)}function e(t){var r=t.toFixed(2).slice(-2);var e=(t|0)%60;var a=(t/60|0)%60;var n=t/3600|0;return n+":"+i(a)+":"+i(e)+"."+r}function a(t){if(!t){return""}if(t.name==="banner"){return"Banner;"+t.delay+";"+t.leftToRight+";"+t.fadeAwayWidth}return t.name.replace(/^\w/,function(t){return t.toUpperCase()})+";"+t.y1+";"+t.y2+";"+t.delay+";"+t.fadeAwayHeight}function g(t){return t.map(function(t){return t.join(" ")}).join(" ")}function m(t){var r=Object.keys(t);var e=r[0];if(!e){return""}var a=t[e];if(["pos","org","move","fad","fade"].some(function(t){return t===e})){return"\\"+e+"("+a+")"}if(/^[ac]\d$/.test(e)){return"\\"+e[1]+e[0]+"&H"+a+"&"}if(e==="alpha"){return"\\alpha&H"+a+"&"}if(e==="clip"){return"\\"+(a.inverse?"i":"")+"clip("+(a.dots||""+(a.scale===1?"":a.scale+",")+g(a.drawing))+")"}if(e==="t"){return"\\t("+[a.t1,a.t2,a.accel,a.tags.map(m).join("")]+")"}return"\\"+e+a}function b(t){return t.parsed.map(function(t){var r=t.tags;var e=t.text;var a=t.drawing;var n=r.map(m).join("");var i=a.length?g(a):e;return""+(n?"{"+n+"}":"")+i}).join("")}function w(t){var r="0000";return[t.Layer,e(t.Start),e(t.End),t.Style,t.Name,t.MarginL||r,t.MarginR||r,t.MarginV||r,a(t.Effect),b(t.Text)].join()}function M(t){var r;var e=t.info;var a=t.styles;var n=t.events;return["[Script Info]",y(e),"","[V4+ Styles]","Format: "+o.join(", ")].concat(a.style.map(function(r){return"Style: "+o.map(function(t){return r[t]}).join()}),[""],["[Events]"],["Format: "+c.join(", ")],(r=[]).concat.apply(r,["Comment","Dialogue"].map(function(r){return n[r.toLowerCase()].map(function(t){return{start:t.Start,end:t.End,string:r+": "+w(t)}})})).sort(function(t,r){return t.start-r.start||t.end-r.end}).map(function(t){return t.string}),[""]).join("\n")}function j(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 e=t.length-!(t.length&1),a=1;a<e;a+=2){r.points.push({x:t[a]*1,y:t[a+1]*1})}return r}function C(t){if(!t.points.length||!t.type){return false}if(/C|S/.test(t.type)&&t.points.length<3){return false}return true}function k(t){var r;var a=Infinity;var n=Infinity;var i=-Infinity;var s=-Infinity;(r=[]).concat.apply(r,t.map(function(t){var r=t.points;return r})).forEach(function(t){var r=t.x;var e=t.y;a=Math.min(a,r);n=Math.min(n,e);i=Math.max(i,r);s=Math.max(s,e)});return{minX:a,minY:n,width:i-a,height:s-n}}function O(t,r,e){var a=[];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 o=function(t,r){return t[0]*r[0]+t[1]*r[1]+t[2]*r[2]+t[3]*r[3]};var f=[t[t.length-1].x,t[0].x,t[1].x,t[2].x];var l=[t[t.length-1].y,t[0].y,t[1].y,t[2].y];a.push({type:r==="M"?"M":"L",points:[{x:o(s,f),y:o(s,l)}]});for(var u=3;u<t.length;u++){f=[t[u-3].x,t[u-2].x,t[u-1].x,t[u].x];l=[t[u-3].y,t[u-2].y,t[u-1].y,t[u].y];a.push({type:"C",points:[{x:o(n,f),y:o(n,l)},{x:o(i,f),y:o(i,l)},{x:o(s,f),y:o(s,l)}]})}if(e==="L"||e==="C"){var c=t[t.length-1];a.push({type:"L",points:[{x:c.x,y:c.y}]})}return a}function F(t){return t.map(function(t){var r=t.type;var e=t.points;return r+e.map(function(t){var r=t.x;var e=t.y;return r+","+e}).join(",")}).join("")}function B(t){var r;var e=[];var a=0;while(a<t.length){var n=t[a];var i=j(n);if(C(i)){if(i.type==="S"){var s=(e[a-1]||{points:[{x:0,y:0}]}).points.slice(-1)[0];var o=s.x;var f=s.y;i.points.unshift({x:o,y:f})}if(a){i.prev=e[a-1].type;e[a-1].next=i.type}e.push(i);a++}else{if(a&&e[a-1].type==="S"){var l={p:i.points,c:e[a-1].points.slice(0,3)};e[a-1].points=e[a-1].points.concat((l[n[0]]||[]).map(function(t){var r=t.x;var e=t.y;return{x:r,y:e}}))}t.splice(a,1)}}var u=(r=[]).concat.apply(r,e.map(function(t){var r=t.type;var e=t.points;var a=t.prev;var n=t.next;return r==="S"?O(e,a,n):{type:r,points:e}}));return I({instructions:u,d:F(u)},k(e))}var V=["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 $(t,r,e){var a,n,i;if(e===void 0)e={};var s=t[r];if(s===undefined){return null}if(r==="pos"||r==="org"){return s.length===2?(a={},a[r]={x:s[0],y:s[1]},a):null}if(r==="move"){var o=s[0];var f=s[1];var l=s[2];var u=s[3];var c=s[4];if(c===void 0)c=0;var v=s[5];if(v===void 0)v=0;return s.length===4||s.length===6?{move:{x1:o,y1:f,x2:l,y2:u,t1:c,t2:v}}:null}if(r==="fad"||r==="fade"){if(s.length===2){var p=s[0];var d=s[1];return{fade:{type:"fad",t1:p,t2:d}}}if(s.length===7){var y=s[0];var g=s[1];var m=s[2];var h=s[3];var x=s[4];var S=s[5];var b=s[6];return{fade:{type:"fade",a1:y,a2:g,a3:m,t1:h,t2:x,t3:S,t4:b}}}return null}if(r==="clip"){var w=s.inverse;var M=s.scale;var j=s.drawing;var C=s.dots;if(j){return{clip:{inverse:w,scale:M,drawing:B(j),dots:C}}}if(C){var k=C[0];var O=C[1];var F=C[2];var E=C[3];return{clip:{inverse:w,scale:M,drawing:j,dots:{x1:k,y1:O,x2:F,y2:E}}}}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||e[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)*e.fs:s*1}}if(r==="K"){return{kf:s}}if(r==="t"){var H=s.t1;var L=s.accel;var N=s.tags;var R=s.t2||(e.end-e.start)*1e3;var A={};N.forEach(function(t){var r=Object.keys(t)[0];if(~V.indexOf(r)&&!(r==="clip"&&!t[r].dots)){I(A,$(t,r,e))}});return{t:{t1:H,t2:R,accel:L,tag:A}}}return i={},i[r]=s,i}var P=[null,1,2,3,null,7,8,9,null,4,5,6];var D=["r","a","an","pos","org","move","fade","fad","clip"];function z(t){return JSON.parse(JSON.stringify(I({},t,{k:undefined,kf:undefined,ko:undefined,kt:undefined})))}function E(t){var r=t.styles;var e=t.style;var a=t.parsed;var n=t.start;var i=t.end;var s;var o;var f;var l;var u;var c;var v=[];var p={style:e,fragments:[]};var d={};for(var y=0;y<a.length;y++){var g=a[y];var m=g.tags;var h=g.text;var x=g.drawing;var S=void 0;for(var b=0;b<m.length;b++){var w=m[b];S=w.r===undefined?S:w.r}var M={tag:S===undefined?z(d):{},text:h,drawing:x.length?B(x):null};for(var j=0;j<m.length;j++){var C=m[j];s=s||P[C.a||0]||C.an;o=o||$(C,"pos");f=f||$(C,"org");l=l||$(C,"move");u=u||$(C,"fade")||$(C,"fad");c=$(C,"clip")||c;var k=Object.keys(C)[0];if(k&&!~D.indexOf(k)){var O=r[e].tag;var F=O.c1;var E=O.c2;var H=O.c3;var L=O.c4;var N=d.fs||O.fs;var R=$(C,k,{start:n,end:i,c1:F,c2:E,c3:H,c4:L,fs:N});if(k==="t"){M.tag.t=M.tag.t||[];M.tag.t.push(R.t)}else{I(M.tag,R)}}}d=M.tag;if(S!==undefined){v.push(p);p={style:r[S]?S:e,fragments:[]}}if(M.text||M.drawing){var A=p.fragments[p.fragments.length-1]||{};if(A.text&&M.text&&!Object.keys(M.tag).length){A.text+=M.text}else{p.fragments.push(M)}}}v.push(p);return I({alignment:s,slices:v},o,f,l,u,c)}function H(t){var r=t.styles;var e=t.dialogues;var a=Infinity;var n=[];for(var i=0;i<e.length;i++){var s=e[i];if(s.Start>=s.End){continue}if(!r[s.Style]){s.Style="Default"}var o=r[s.Style].style;var f=E({styles:r,style:s.Style,parsed:s.Text.parsed,start:s.Start,end:s.End});var l=f.alignment||o.Alignment;a=Math.min(a,s.Layer);n.push(I({layer:s.Layer,start:s.Start,end:s.End,style:s.Style,name:s.Name,margin:{left:s.MarginL||o.MarginL,right:s.MarginR||o.MarginR,vertical:s.MarginV||o.MarginV},effect:s.Effect},f,{alignment:l}))}for(var u=0;u<n.length;u++){n[u].layer-=a}return n.sort(function(t,r){return t.start-r.start||t.end-r.end})}var L={Name:"Default",Fontname:"Arial",Fontsize:"20",PrimaryColour:"&H00FFFFFF&",SecondaryColour:"&H000000FF&",OutlineColour:"&H00000000&",BackColour:"&H00000000&",Bold:"0",Italic:"0",Underline:"0",StrikeOut:"0",ScaleX:"100",ScaleY:"100",Spacing:"0",Angle:"0",BorderStyle:"1",Outline:"2",Shadow:"2",Alignment:"2",MarginL:"10",MarginR:"10",MarginV:"10",Encoding:"1"};function N(t){if(/^(&|H|&H)[0-9a-f]{6,}/i.test(t)){var r=t.match(/&?H?([0-9a-f]{2})?([0-9a-f]{6})/i);var e=r[1];var a=r[2];return[e||"00",a]}var n=parseInt(t,10);if(!isNaN(n)){var i=-2147483648;var s=2147483647;if(n<i){return["00","000000"]}var o=i<=n&&n<=s?("00000000"+(n<0?n+4294967296:n).toString(16)).slice(-8):String(n).slice(0,8);return[o.slice(0,2),o.slice(2)]}return["00","000000"]}function R(t){var y=t.info;var r=t.style;var e=t.defaultStyle;var g={};var m=[I({},L,e,{Name:"Default"})].concat(r);var a=function(t){var r=m[t];if(/^(\*+)Default$/.test(r.Name)){r.Name="Default"}Object.keys(r).forEach(function(t){if(t!=="Name"&&t!=="Fontname"&&!/Colour/.test(t)){r[t]*=1}});var e=N(r.PrimaryColour);var a=e[0];var n=e[1];var i=N(r.SecondaryColour);var s=i[0];var o=i[1];var f=N(r.OutlineColour);var l=f[0];var u=f[1];var c=N(r.BackColour);var v=c[0];var p=c[1];var d={fn:r.Fontname,fs:r.Fontsize,c1:n,a1:a,c2:o,a2:s,c3:u,a3:l,c4:p,a4:v,b:Math.abs(r.Bold),i:Math.abs(r.Italic),u:Math.abs(r.Underline),s:Math.abs(r.StrikeOut),fscx:r.ScaleX,fscy:r.ScaleY,fsp:r.Spacing,frz:r.Angle,xbord:r.Outline,ybord:r.Outline,xshad:r.Shadow,yshad:r.Shadow,fe:r.Encoding,q:/^[0-3]$/.test(y.WrapStyle)?y.WrapStyle*1:2};g[r.Name]={style:r,tag:d}};for(var n=0;n<m.length;n++)a(n);return g}function A(t,r){if(r===void 0)r={};var e=n(t);var a=R({info:e.info,style:e.styles.style,defaultStyle:r.defaultStyle||{}});return{info:e.info,width:e.info.PlayResX*1||null,height:e.info.PlayResY*1||null,collisions:e.info.Collisions||"Normal",styles:a,dialogues:H({styles:a,dialogues:e.events.dialogue})}}function T(t){var r=t.style;var e=t.tag;var a=I({},r,{PrimaryColour:"&H"+e.a1+e.c1,SecondaryColour:"&H"+e.a2+e.c2,OutlineColour:"&H"+e.a3+e.c3,BackColour:"&H"+e.a4+e.c4});return"Style: "+o.map(function(t){return a[t]}).join()}var X={M:"m",L:"l",C:"b"};function Y(t){var r=t.instructions;return r.map(function(t){var r;var e=t.type;var a=t.points;return(r=[X[e]]).concat.apply(r,a.map(function(t){var r=t.x;var e=t.y;return[r,e]})).join(" ")}).join(" ")}var U=function(e){return function(r){return function(t){return""+r+e+"&H"+t+"&"}}};var J=U("c");var W=U("a");var q={c1:J(1),c2:J(2),c3:J(3),c4:J(4),a1:W(1),a2:W(2),a3:W(3),a4:W(4),pos:function(t){return"pos("+[t.x,t.y]+")"},org:function(t){return"org("+[t.x,t.y]+")"},move:function(t){return"move("+[t.x1,t.y1,t.x2,t.y2,t.t1,t.t2]+")"},fade:function(t){return t.type==="fad"?"fad("+[t.t1,t.t2]+")":"fade("+[t.a1,t.a2,t.a3,t.t1,t.t2,t.t3,t.t4]+")"},clip:function(t){return(t.inverse?"i":"")+"clip("+(t.dots?""+[t.dots.x1,t.dots.y1,t.dots.x2,t.dots.y2]:""+(t.scale===1?"":t.scale+",")+Y(t.drawing))+")"},t:function(t){return t.map(function(t){return"t("+[t.t1,t.t2,t.accel,K(t.tag)]+")"}).join("\\")}};function K(e){return Object.keys(e).map(function(r){var t=q[r]||function(t){return""+r+t};return"\\"+t(e[r])}).join("")}function _(t){return t.fragments.map(function(t){var r=t.tag;var e=t.text;var a=t.drawing;var n=K(r);return""+(n?"{"+n+"}":"")+(a?Y(a):e)}).join("")}function G(i,s){return i.slices.map(function(t,r){var e=JSON.parse(JSON.stringify(t));var a=e.fragments[0];var n=a.tag;if(r){n.r=t.style===i.style?"":t.style}else{if(s.Alignment!==i.alignment){n.an=i.alignment}["pos","org","move","fade","clip"].forEach(function(t){if(i[t]){n[t]=i[t]}})}return e}).map(_).join("")}function Q(t,r){return t===r?"0000":t}function Z(t,r){return"Dialogue: "+[t.layer,e(t.start),e(t.end),t.style,t.name,Q(t.margin.left,r.MarginL),Q(t.margin.right,r.MarginR),Q(t.margin.vertical,r.MarginV),a(t.effect),G(t,r)].join()}function tt(t){var r=t.info;var e=t.width;var a=t.height;var n=t.collisions;var i=t.styles;var s=t.dialogues;return["[Script Info]",y(I({},r,{PlayResX:e,PlayResY:a,Collisions:n})),"","[V4+ Styles]","Format: "+o.join(", ")].concat(Object.keys(i).map(function(t){return T(i[t])}),[""],["[Events]"],["Format: "+c.join(", ")],s.sort(function(t,r){return t.start-r.start||t.end-r.end}).map(function(t){return Z(t,i[t.style].style)}),[""]).join("\n")}t.compile=A;t.decompile=tt;t.parse=n;t.stringify=M;Object.defineProperty(t,"__esModule",{value:true})}); |
{ | ||
"name": "ass-compiler", | ||
"version": "0.0.11", | ||
"version": "0.1.0", | ||
"description": "Parses and compiles ASS subtitle format to easy-to-use data structure.", | ||
"main": "dist/ass-compiler.js", | ||
"module": "src/index.js", | ||
"sideEffects": false, | ||
"files": [ | ||
@@ -46,10 +47,10 @@ "dist", | ||
"chai": "^4.2.0", | ||
"cross-env": "^5.2.0", | ||
"eslint": "^6.1.0", | ||
"eslint-config-airbnb-base": "^14.0.0", | ||
"eslint-plugin-import": "^2.18.2", | ||
"cross-env": "^7.0.2", | ||
"eslint": "^6.8.0", | ||
"eslint-config-airbnb-base": "^14.1.0", | ||
"eslint-plugin-import": "^2.20.2", | ||
"istanbul": "^0.4.5", | ||
"mocha": "^6.2.0", | ||
"mocha": "^7.1.1", | ||
"mocha-istanbul": "^0.3.0", | ||
"rollup": "^1.19.4", | ||
"rollup": "^2.6.1", | ||
"rollup-plugin-buble": "^0.19.8", | ||
@@ -59,4 +60,4 @@ "rollup-plugin-istanbul": "^2.0.1", | ||
"rollup-plugin-replace": "^2.2.0", | ||
"uglify-js": "^3.6.0" | ||
"uglify-js": "^3.9.1" | ||
} | ||
} |
# ass-compiler | ||
[![Build status](https://badgen.net/travis/weizhenye/ass-compiler?icon=travis&label=build)](https://travis-ci.org/weizhenye/ass-compiler) | ||
[![GitHub Action](https://github.com/weizhenye/ass-compiler/workflows/CI/badge.svg)](https://github.com/weizhenye/ass-compiler/actions) | ||
[![Coverage](https://badgen.net/codecov/c/github/weizhenye/ass-compiler?icon=codecov)](https://codecov.io/gh/weizhenye/ass-compiler) | ||
@@ -24,5 +24,9 @@ [![Dependencies](https://badgen.net/david/dep/weizhenye/ass-compiler?icon=https://api.iconify.design/si-glyph:connect-2.svg?color=white)](https://david-dm.org/weizhenye/ass-compiler) | ||
```js | ||
import { parse, compile } from 'ass-compiler'; | ||
parse(text); | ||
compile(text, options); | ||
import { parse, stringify, compile, decompile } from 'ass-compiler'; | ||
const parsedASS = parse(text); | ||
const stringifiedText = stringify(parsedASS); | ||
const compiledASS = compile(text, options); | ||
const decompiledText = decompile(compiledASS); | ||
``` | ||
@@ -29,0 +33,0 @@ |
@@ -18,3 +18,3 @@ import { compileText } from './text.js'; | ||
styles, | ||
name: dia.Style, | ||
style: dia.Style, | ||
parsed: dia.Text.parsed, | ||
@@ -30,2 +30,4 @@ start: dia.Start, | ||
end: dia.End, | ||
style: dia.Style, | ||
name: dia.Name, | ||
// reset style by `\r` will not effect margin and alignment | ||
@@ -32,0 +34,0 @@ margin: { |
@@ -120,3 +120,3 @@ import { assign } from '../utils.js'; | ||
commands[i - 1].points = commands[i - 1].points.concat( | ||
(additionPoints[arr[0]] || []).map(({ x, y }) => ({ x, y })) | ||
(additionPoints[arr[0]] || []).map(({ x, y }) => ({ x, y })), | ||
); | ||
@@ -132,3 +132,3 @@ } | ||
: { type, points } | ||
)) | ||
)), | ||
); | ||
@@ -135,0 +135,0 @@ |
@@ -10,3 +10,2 @@ import { parse } from '../parser/index.js'; | ||
style: tree.styles.style, | ||
format: tree.styles.format, | ||
defaultStyle: options.defaultStyle || {}, | ||
@@ -13,0 +12,0 @@ }); |
@@ -55,14 +55,5 @@ import { assign } from '../utils.js'; | ||
export function compileStyles({ info, style, format, defaultStyle }) { | ||
export function compileStyles({ info, style, defaultStyle }) { | ||
const result = {}; | ||
const styles = [ | ||
assign({}, DEFAULT_STYLE, defaultStyle, { Name: 'Default' }), | ||
...style.map((stl) => { | ||
const s = {}; | ||
for (let i = 0; i < format.length; i++) { | ||
s[format[i]] = stl[i]; | ||
} | ||
return s; | ||
}), | ||
]; | ||
const styles = [assign({}, DEFAULT_STYLE, defaultStyle, { Name: 'Default' })].concat(style); | ||
for (let i = 0; i < styles.length; i++) { | ||
@@ -106,2 +97,3 @@ const s = styles[i]; | ||
yshad: s.Shadow, | ||
fe: s.Encoding, | ||
q: /^[0-3]$/.test(info.WrapStyle) ? info.WrapStyle * 1 : 2, | ||
@@ -108,0 +100,0 @@ }; |
@@ -72,2 +72,5 @@ import { compileDrawing } from './drawing.js'; | ||
} | ||
if (key === 'K') { | ||
return { kf: value }; | ||
} | ||
if (key === 't') { | ||
@@ -74,0 +77,0 @@ const { t1, accel, tags } = value; |
@@ -13,12 +13,12 @@ import { compileDrawing } from './drawing.js'; | ||
function createSlice(name, styles) { | ||
return { | ||
name, | ||
borderStyle: styles[name].style.BorderStyle, | ||
tag: styles[name].tag, | ||
fragments: [], | ||
}; | ||
function inheritTag(pTag) { | ||
return JSON.parse(JSON.stringify(assign({}, pTag, { | ||
k: undefined, | ||
kf: undefined, | ||
ko: undefined, | ||
kt: undefined, | ||
}))); | ||
} | ||
export function compileText({ styles, name, parsed, start, end }) { | ||
export function compileText({ styles, style, parsed, start, end }) { | ||
let alignment; | ||
@@ -31,3 +31,3 @@ let pos; | ||
const slices = []; | ||
let slice = createSlice(name, styles); | ||
let slice = { style, fragments: [] }; | ||
let prevTag = {}; | ||
@@ -42,3 +42,3 @@ for (let i = 0; i < parsed.length; i++) { | ||
const fragment = { | ||
tag: reset === undefined ? JSON.parse(JSON.stringify(prevTag)) : {}, | ||
tag: reset === undefined ? inheritTag(prevTag) : {}, | ||
text, | ||
@@ -57,4 +57,5 @@ drawing: drawing.length ? compileDrawing(drawing) : null, | ||
if (key && !~globalTags.indexOf(key)) { | ||
const { c1, c2, c3, c4 } = slice.tag; | ||
const fs = prevTag.fs || slice.tag.fs; | ||
const sliceTag = styles[style].tag; | ||
const { c1, c2, c3, c4 } = sliceTag; | ||
const fs = prevTag.fs || sliceTag.fs; | ||
const compiledTag = compileTag(tag, key, { start, end, c1, c2, c3, c4, fs }); | ||
@@ -72,3 +73,3 @@ if (key === 't') { | ||
slices.push(slice); | ||
slice = createSlice(styles[reset] ? reset : name, styles); | ||
slice = { style: styles[reset] ? reset : style, fragments: [] }; | ||
} | ||
@@ -75,0 +76,0 @@ if (fragment.text || fragment.drawing) { |
export { parse } from './parser/index.js'; | ||
export { stringify } from './stringifier.js'; | ||
export { compile } from './compiler/index.js'; | ||
export { decompile } from './decompiler.js'; |
@@ -34,3 +34,3 @@ import { parseDialogue } from './dialogue.js'; | ||
if (/^Style\s*:/i.test(line)) { | ||
tree.styles.style.push(parseStyle(line)); | ||
tree.styles.style.push(parseStyle(line, tree.styles.format)); | ||
} | ||
@@ -37,0 +37,0 @@ } |
@@ -1,3 +0,6 @@ | ||
export function parseStyle(text) { | ||
return text.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/); | ||
import { assign } from '../utils.js'; | ||
export function parseStyle(text, format) { | ||
const values = text.match(/Style\s*:\s*(.*)/i)[1].split(/\s*,\s*/); | ||
return assign({}, ...format.map((fmt, idx) => ({ [fmt]: values[idx] }))); | ||
} |
@@ -15,1 +15,4 @@ export const assign = Object.assign || ( | ||
); | ||
export const stylesFormat = ['Name', 'Fontname', 'Fontsize', 'PrimaryColour', 'SecondaryColour', 'OutlineColour', 'BackColour', 'Bold', 'Italic', 'Underline', 'StrikeOut', 'ScaleX', 'ScaleY', 'Spacing', 'Angle', 'BorderStyle', 'Outline', 'Shadow', 'Alignment', 'MarginL', 'MarginR', 'MarginV', 'Encoding']; | ||
export const eventsFormat = ['Layer', 'Start', 'End', 'Style', 'Name', 'MarginL', 'MarginR', 'MarginV', 'Effect', 'Text']; |
@@ -1,41 +0,45 @@ | ||
import { Tags } from "./tags"; | ||
import { ParsedTag, CompiledTag } from './tags'; | ||
// Script Info | ||
interface ScriptInfo { | ||
Title: '<untitled>' | string; | ||
Title: string; | ||
ScriptType: 'V4.00' | 'V4.00+' | string; | ||
WrapStyle: '0' | '1' | '2' | '3'; | ||
PlayResX: string; | ||
PlayResY: string | ||
PlayResY: string; | ||
ScaledBorderAndShadow: 'yes' | 'no'; | ||
Collisions: 'Normal' | 'Reverse'; | ||
[name: string]: string; | ||
// 'Last Style Storage'?: string; | ||
// 'Video File'?: string; | ||
// 'Video Aspect Ratio'?: string; | ||
// 'Video Zoom'?: string; | ||
// 'Video Position'?: string; | ||
// 'Original Script'?: '<unknown>' | string; | ||
// 'Original Translation'?: string; | ||
// 'Original Editing'?: string; | ||
// 'Original Timing'?: string; | ||
// 'Synch Point'?: string; | ||
// 'Script Updated By'?: string; | ||
// 'Update Details'?: string; | ||
} | ||
// v4 Styles | ||
interface ParsedASSStyles { | ||
format: string[]; | ||
style: string[]; | ||
style: { | ||
Name: string; | ||
Fontname: string; | ||
Fontsize: string; | ||
PrimaryColour: string; | ||
SecondaryColour: string; | ||
OutlineColour: string; | ||
BackColour: string; | ||
Bold: string; | ||
Italic: string; | ||
Underline: string; | ||
StrikeOut: string; | ||
ScaleX: string; | ||
ScaleY: string; | ||
Spacing: string; | ||
Angle: string; | ||
BorderStyle: string; | ||
Outline: string; | ||
Shadow: string; | ||
Alignment: string; | ||
MarginL: string; | ||
MarginR: string; | ||
MarginV: string; | ||
Encoding: string; | ||
}[]; | ||
} | ||
type ParsedASSEventTextParsedTag = { | ||
[K in keyof Tags]: Tags[K]; | ||
} | ||
interface ParsedASSEventTextParsed { | ||
tags: ParsedASSEventTextParsedTag[]; | ||
tags: { [K in keyof ParsedTag]: ParsedTag[K]; }[]; | ||
text: string; | ||
@@ -45,2 +49,17 @@ drawing: string[][]; | ||
interface EffectBanner { | ||
name: 'banner'; | ||
delay: number; | ||
leftToRight: number; | ||
fadeAwayWidth: number; | ||
} | ||
interface EffectScroll { | ||
name: 'scroll up' | 'scroll down'; | ||
y1: number; | ||
y2: number; | ||
delay: number; | ||
fadeAwayHeight: number; | ||
} | ||
interface ParsedASSEventText { | ||
@@ -52,3 +71,3 @@ raw: string; | ||
interface ParsedASSEventObject { | ||
interface ParsedASSEvent { | ||
Layer: number; | ||
@@ -62,11 +81,10 @@ Start: number; | ||
MarginV: number; | ||
Effect: any; | ||
Effect?: EffectBanner | EffectScroll; | ||
Text: ParsedASSEventText; | ||
} | ||
// Events | ||
interface ParsedASSEvents { | ||
format: string[]; | ||
comment: ParsedASSEventObject[]; | ||
dialogue: ParsedASSEventObject[]; | ||
comment: ParsedASSEvent[]; | ||
dialogue: ParsedASSEvent[]; | ||
} | ||
@@ -86,29 +104,4 @@ | ||
export function stringify(obj: ParsedASS): string; | ||
// Compiled Script Info | ||
// interface CompiledAssInfo { | ||
// Title: '<untitled>' | string; | ||
// ScriptType: 'V4.00' | 'V4.00+' | string; | ||
// WrapStyle: '0' | '1' | '2' | '3'; | ||
// PlayResX: string; | ||
// PlayResY: string | ||
// ScaledBorderAndShadow: 'yes' | 'no'; | ||
// 'Last Style Storage'?: string; | ||
// 'Video File'?: string; | ||
// 'Video Aspect Ratio'?: string; | ||
// 'Video Zoom'?: string; | ||
// 'Video Position'?: string; | ||
// 'Original Script'?: '<unknown>' | string; | ||
// 'Original Translation'?: string; | ||
// 'Original Editing'?: string; | ||
// 'Original Timing'?: string; | ||
// 'Synch Point'?: string; | ||
// 'Script Updated By'?: string; | ||
// 'Update Details'?: string; | ||
// } | ||
export interface CompiledASSStyleTag { | ||
@@ -125,6 +118,6 @@ fn: string; | ||
a4: string; | ||
b: number; | ||
i: number; | ||
u: number; | ||
s: number; | ||
b: 0 | 1; | ||
i: 0 | 1; | ||
u: 0 | 1; | ||
s: 0 | 1; | ||
fscx: number; | ||
@@ -138,3 +131,4 @@ fscy: number; | ||
yshad: number; | ||
q: number; | ||
fe: number; | ||
q: 0 | 1 | 2 | 3; | ||
} | ||
@@ -160,4 +154,4 @@ | ||
BorderStyle: 1 | 3; | ||
Outline: 0 | 1 | 2 | 3 | 4; | ||
Shadow: 0 | 1 | 2 | 3 | 4; | ||
Outline: number; | ||
Shadow: number; | ||
Alignment: number; | ||
@@ -167,3 +161,3 @@ MarginL: number; | ||
MarginV: number; | ||
Encoding: 0 | 134 | 136 | number; | ||
Encoding: number; | ||
} | ||
@@ -173,22 +167,8 @@ tag: CompiledASSStyleTag; | ||
export interface DialogueFragment { | ||
tag: Tags; | ||
text: string; | ||
drawing?: DialogueDrawing; | ||
} | ||
export interface DialogueSlice { | ||
name: string; | ||
borderStyle: 1 | 3; | ||
fragments: DialogueFragment[]; | ||
} | ||
export interface DialogueDrawingInstructionPoint { | ||
x: number; | ||
y: number; | ||
} | ||
export interface DialogueDrawingInstruction { | ||
type: 'M' | 'N' | 'L' | 'B' | 'C' | 'S'; | ||
points: DialogueDrawingInstructionPoint[]; | ||
type: 'M' | 'L' | 'C'; | ||
points: { | ||
x: number; | ||
y: number; | ||
}[]; | ||
} | ||
@@ -205,14 +185,13 @@ | ||
export interface DialogueClip { | ||
inverse: boolean; | ||
scale: number; | ||
export interface DialogueFragment { | ||
tag: CompiledTag; | ||
text: string; | ||
drawing?: DialogueDrawing; | ||
dots?: { | ||
x1: number; | ||
y1: number; | ||
x2: number; | ||
y2: number; | ||
} | ||
} | ||
export interface DialogueSlice { | ||
style: string; | ||
fragments: DialogueFragment[]; | ||
} | ||
export interface Dialogue { | ||
@@ -222,2 +201,4 @@ layer: number; | ||
end: number; | ||
style: string; | ||
name: string; | ||
margin: { | ||
@@ -228,6 +209,46 @@ left: number; | ||
} | ||
effect: any; | ||
effect?: EffectBanner | EffectScroll; | ||
alignment: number; | ||
slices: DialogueSlice[]; | ||
clip?: DialogueClip; | ||
pos?: { | ||
x: number; | ||
y: number; | ||
}; | ||
org?: { | ||
x: number; | ||
y: number; | ||
}; | ||
move?: { | ||
x1: number; | ||
y1: number; | ||
x2: number; | ||
y2: number; | ||
t1: number; | ||
t2: number; | ||
}; | ||
fade?: { | ||
type: 'fad'; | ||
t1: number; | ||
t2: number; | ||
} | { | ||
type: 'fade'; | ||
a1: number; | ||
a2: number; | ||
a3: number; | ||
t1: number; | ||
t2: number; | ||
t3: number; | ||
t4: number; | ||
}; | ||
clip?: { | ||
inverse: boolean; | ||
scale: number; | ||
drawing?: DialogueDrawing; | ||
dots?: { | ||
x1: number; | ||
y1: number; | ||
x2: number; | ||
y2: number; | ||
} | ||
} | ||
} | ||
@@ -244,2 +265,4 @@ | ||
export function compile(text: string): CompiledASS; | ||
export function compile(text: string, options: object): CompiledASS; | ||
export function decompile(obj: CompiledASS): string; |
@@ -1,14 +0,18 @@ | ||
export interface Tags { | ||
a: 0 | 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11; | ||
a1: string; | ||
alpha: string; | ||
an: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; | ||
b: 0 | 1; | ||
be: number; | ||
blur: number; | ||
bord: number; | ||
c: string; | ||
c1: string; | ||
c2: string; | ||
clip: { | ||
export interface ParsedTag { | ||
a?: 0 | 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11; | ||
a1?: string; | ||
a2?: string; | ||
a3?: string; | ||
a4?: string; | ||
alpha?: string; | ||
an?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; | ||
b?: 0 | 1; | ||
be?: number; | ||
blur?: number; | ||
bord?: number; | ||
c1?: string; | ||
c2?: string; | ||
c3?: string; | ||
c4?: string; | ||
clip?: { | ||
inverse: boolean; | ||
@@ -19,42 +23,88 @@ scale: number; | ||
} | ||
fad: [number, number]; | ||
fade: [number, number, number, number, number, number]; | ||
fe: number; | ||
fn: string; | ||
fax: number; | ||
fay: number; | ||
fs: string; | ||
fscx: number; | ||
fscy: number; | ||
fsp: number; | ||
fr: number; | ||
frx: number; | ||
fry: number; | ||
frz: number; | ||
i: 0 | 1; | ||
k: number; | ||
kf: number; | ||
ko: number; | ||
kt: number; | ||
K: number; | ||
move: [number, number, number, number] | [number, number, number, number, number, number]; | ||
org: [number, number]; | ||
p: number; | ||
pbo: number; | ||
pos: [number, number]; | ||
q: 0 | 1 | 2 | 3; | ||
r: string; | ||
s: 0 | 1; | ||
shad: number; | ||
t: { | ||
fad?: [number, number]; | ||
fade?: [number, number, number, number, number, number]; | ||
fax?: number; | ||
fay?: number; | ||
fe?: number; | ||
fn?: string; | ||
fr?: number; | ||
frx?: number; | ||
fry?: number; | ||
frz?: number; | ||
fs?: string; | ||
fscx?: number; | ||
fscy?: number; | ||
fsp?: number; | ||
i?: 0 | 1; | ||
k?: number; | ||
kf?: number; | ||
ko?: number; | ||
kt?: number; | ||
K?: number; | ||
move?: [number, number, number, number] | [number, number, number, number, number, number]; | ||
org?: [number, number]; | ||
p?: number; | ||
pbo?: number; | ||
pos?: [number, number]; | ||
q?: 0 | 1 | 2 | 3; | ||
r?: string; | ||
s?: 0 | 1; | ||
shad?: number; | ||
t?: { | ||
t1: number; | ||
t2: number; | ||
accel: number; | ||
tags: { [K in keyof Tags]: Tags[K] }[] | ||
}; | ||
u: 0 | 1; | ||
xbord: number; | ||
xshad: number; | ||
ybord: number; | ||
yshad: number; | ||
tags: { [K in keyof ParsedTag]: ParsedTag[K]; }[]; | ||
} | ||
u?: 0 | 1; | ||
xbord?: number; | ||
xshad?: number; | ||
ybord?: number; | ||
yshad?: number; | ||
} | ||
export interface CompiledTag { | ||
a1?: string; | ||
a2?: string; | ||
a3?: string; | ||
a4?: string; | ||
an?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; | ||
b?: 0 | 1; | ||
be?: number; | ||
blur?: number; | ||
c1?: string; | ||
c2?: string; | ||
c3?: string; | ||
c4?: string; | ||
fax?: number; | ||
fay?: number; | ||
fe?: number; | ||
fn?: string; | ||
frx?: number; | ||
fry?: number; | ||
frz?: number; | ||
fs?: number; | ||
fscx?: number; | ||
fscy?: number; | ||
fsp?: number; | ||
i?: 0 | 1; | ||
k?: number; | ||
kf?: number; | ||
ko?: number; | ||
kt?: number; | ||
p?: number; | ||
pbo?: number; | ||
q?: 0 | 1 | 2 | 3; | ||
s?: 0 | 1; | ||
t?: { | ||
t1: number; | ||
t2: number; | ||
accel: number; | ||
tags: CompiledTag; | ||
}[]; | ||
u?: 0 | 1; | ||
xbord?: number; | ||
xshad?: number; | ||
ybord?: number; | ||
yshad?: number; | ||
} |
92024
27
2362
68