From 8b16bfc888e801cf3f8d57378459f59b382388fa Mon Sep 17 00:00:00 2001 From: RblSb Date: Tue, 13 Jul 2021 22:43:13 +0300 Subject: Show subs correctly --- res/client.js | 31 ++++++++++++++++--------------- src/client/players/RawSubs.hx | 18 +++++++++++++----- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/res/client.js b/res/client.js index bb1b703..016a4e4 100644 --- a/res/client.js +++ b/res/client.js @@ -417,15 +417,6 @@ StringTools.lpad = function(s,c,l) { buf_b += s == null ? "null" : "" + s; return buf_b; }; -StringTools.rpad = function(s,c,l) { - if(c.length <= 0) { - return s; - } - var buf_b = ""; - buf_b = "" + (s == null ? "null" : "" + s); - while(buf_b.length < l) buf_b += c == null ? "null" : "" + c; - return buf_b; -}; StringTools.replace = function(s,sub,by) { return s.split(sub).join(by); }; @@ -2773,7 +2764,9 @@ client_players_RawSubs.parseAss = function(video,url) { var matchFormat = new EReg("^Format:",""); var matchDialogue = new EReg("^Dialogue:",""); var blockTags_r = new RegExp("\\{\\\\[^}]*\\}","g".split("u").join("")); - var tags_r = new RegExp("\\\\[^ ]+","g".split("u").join("")); + var spaceTags_r = new RegExp("\\\\(n|h)","g".split("u").join("")); + var newLineTag_r = new RegExp("\\\\N","g".split("u").join("")); + var manyNewLineTags_r = new RegExp("\\\\N(\\\\N)+","g".split("u").join("")); var drawingMode = new EReg("\\\\p[124]",""); var eventStart = false; var formatFound = false; @@ -2821,7 +2814,15 @@ client_players_RawSubs.parseAss = function(video,url) { text = ""; } text = text.replace(blockTags_r,""); - text = text.replace(tags_r,""); + text = text.replace(spaceTags_r," "); + text = text.replace(manyNewLineTags_r,"\\N"); + if(StringTools.startsWith(text,"\\N")) { + text = HxOverrides.substr(text,"\\N".length,null); + } + if(StringTools.endsWith(text,"\\N")) { + text = HxOverrides.substr(text,0,text.length - 2); + } + text = text.replace(newLineTag_r,"\n"); subs.push({ counter : subsCounter, start : client_players_RawSubs.convertAssTime(result[ids_h["Start"]]), end : client_players_RawSubs.convertAssTime(result[ids_h["End"]]), text : text}); ++subsCounter; } @@ -2840,13 +2841,13 @@ client_players_RawSubs.parseAss = function(video,url) { }; client_players_RawSubs.convertAssTime = function(time) { if(!client_players_RawSubs.assTimeStamp.match(time)) { - return "" + StringTools.lpad("" + 0,"0",2) + ":" + StringTools.lpad("" + 0,"0",2) + ":" + StringTools.lpad("" + 0,"0",2) + "." + HxOverrides.substr(StringTools.rpad("" + 0,"0",3),0,3); + return "" + StringTools.lpad("" + 0,"0",2) + ":" + StringTools.lpad("" + 0,"0",2) + ":" + StringTools.lpad("" + 0,"0",2) + "." + HxOverrides.substr(StringTools.lpad("" + 0,"0",3),0,3); } var h = Std.parseInt(client_players_RawSubs.assTimeStamp.matched(1)); var m = Std.parseInt(client_players_RawSubs.assTimeStamp.matched(2)); var s = Std.parseInt(client_players_RawSubs.assTimeStamp.matched(3)); - var ms = Std.parseInt(client_players_RawSubs.assTimeStamp.matched(4)); - return "" + StringTools.lpad("" + h,"0",2) + ":" + StringTools.lpad("" + m,"0",2) + ":" + StringTools.lpad("" + s,"0",2) + "." + HxOverrides.substr(StringTools.rpad("" + ms,"0",3),0,3); + var ms = Std.parseInt(client_players_RawSubs.assTimeStamp.matched(4)) * 10; + return "" + StringTools.lpad("" + h,"0",2) + ":" + StringTools.lpad("" + m,"0",2) + ":" + StringTools.lpad("" + s,"0",2) + "." + HxOverrides.substr(StringTools.lpad("" + ms,"0",3),0,3); }; client_players_RawSubs.onParsed = function(video,name,dataUrl) { var trackEl = window.document.createElement("track"); @@ -2854,8 +2855,8 @@ client_players_RawSubs.onParsed = function(video,name,dataUrl) { trackEl.kind = "subtitles"; trackEl.src = dataUrl; trackEl.default = true; - trackEl.track.mode = "showing"; video.appendChild(trackEl); + trackEl.track.mode = "showing"; }; var client_players_Youtube = function(main,player) { this.matchSeconds = new EReg("([0-9]+)S",""); diff --git a/src/client/players/RawSubs.hx b/src/client/players/RawSubs.hx index 5d1dff0..88a2f03 100644 --- a/src/client/players/RawSubs.hx +++ b/src/client/players/RawSubs.hx @@ -82,7 +82,9 @@ class RawSubs { final matchFormat = ~/^Format:/; final matchDialogue = ~/^Dialogue:/; final blockTags = ~/\{\\[^}]*\}/g; - final tags = ~/\\[^ ]+/g; + final spaceTags = ~/\\(n|h)/g; + final newLineTag = ~/\\N/g; + final manyNewLineTags = ~/\\N(\\N)+/g; final drawingMode = ~/\\p[124]/; var eventStart = false; var formatFound = false; @@ -115,7 +117,12 @@ class RawSubs { var text = list[ids["Text"]]; if (drawingMode.match(text)) text = ""; text = blockTags.replace(text, ""); - text = tags.replace(text, ""); + text = spaceTags.replace(text, " "); + final nTag = "\\N"; + text = manyNewLineTags.replace(text, nTag); + if (text.startsWith(nTag)) text = text.substr(nTag.length); + if (text.endsWith(nTag)) text = text.substr(0, text.length - 2); + text = newLineTag.replace(text, "\n"); subs.push({ counter: subsCounter, start: convertAssTime(list[ids["Start"]]), @@ -131,6 +138,7 @@ class RawSubs { data += '${sub.start} --> ${sub.end}\n'; data += '${sub.text}\n\n'; } + // trace(data); final textBase64 = "data:text/plain;base64,"; final url = textBase64 + Base64.encode(Bytes.ofString(data)); onParsed(video, "ASS subtitles", url); @@ -151,7 +159,7 @@ class RawSubs { final h:Int = Std.parseInt(assTimeStamp.matched(1)); final m:Int = Std.parseInt(assTimeStamp.matched(2)); final s:Int = Std.parseInt(assTimeStamp.matched(3)); - final ms:Int = Std.parseInt(assTimeStamp.matched(4)); + final ms:Int = Std.parseInt(assTimeStamp.matched(4)) * 10; return toVttTime({ h: h, m: m, @@ -174,9 +182,9 @@ class RawSubs { trackEl.kind = "subtitles"; trackEl.src = dataUrl; trackEl.default_ = true; + video.appendChild(trackEl); final track = trackEl.track; track.mode = SHOWING; - video.appendChild(trackEl); } static inline function encodeURI(data:String):String { @@ -187,7 +195,7 @@ class RawSubs { final h = '${time.h}'.lpad("0", 2); final m = '${time.m}'.lpad("0", 2); final s = '${time.s}'.lpad("0", 2); - final ms = '${time.ms}'.rpad("0", 3).substr(0, 3); + final ms = '${time.ms}'.lpad("0", 3).substr(0, 3); return '$h:$m:$s.$ms'; } -- cgit v1.2.3