From 15fdd0bc452072c18def2f7b70bab446f11139a8 Mon Sep 17 00:00:00 2001
From: Sting <loic.allegre@ensiie.fr>
Date: Fri, 21 Jul 2023 12:10:08 +0200
Subject: [PATCH] Retrieve header+template from reference file

---
 autokara.py         |  4 ++--
 autosyl/assUtils.py | 21 ++++++++++++++++++---
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/autokara.py b/autokara.py
index 1da2d81..1f9c1c3 100644
--- a/autokara.py
+++ b/autokara.py
@@ -5,7 +5,7 @@ import subprocess
 import shlex
 from pathlib import Path
 
-from autosyl.assUtils import AssWriter, getSyls
+from autosyl.assUtils import AssWriter, getSyls, getHeader
 from autosyl.segment import segment
 
 
@@ -52,7 +52,7 @@ print(syls)
 print("Syls found, writing ASS file...")
 writer = AssWriter()
 writer.openAss(ass_file)
-writer.writeHeader()
+writer.writeHeader(header=getHeader(reference_file))
 writer.writeSyls(syls)
 writer.closeAss()
 
diff --git a/autosyl/assUtils.py b/autosyl/assUtils.py
index 9843d04..37b517c 100644
--- a/autosyl/assUtils.py
+++ b/autosyl/assUtils.py
@@ -41,6 +41,20 @@ def getSyls(ass_file):
     return SYLS
 
 
+def getHeader(ass_file):
+    HEADER = ""
+    with open(ass_file, 'r') as f:
+        events_section = False
+        for line in f.readlines():
+            if not events_section:
+                HEADER += line
+                if re.match("^\[Events\].*", line):
+                    events_section = True
+            else:
+                event_regex = "(?:Format:.*)|(?:^Comment:.*(\d+:\d{2}:\d{2}.\d{2}),(\d+:\d{2}:\d{2}.\d{2}),.*,((?!karaoke).)*,((?!karaoke).)*\n$)"
+                if re.match(event_regex, line):
+                    HEADER += line
+    return HEADER
 
 
 
@@ -55,8 +69,9 @@ class AssWriter:
     def closeAss(self):
         self.file.close()
     
-    def writeHeader(self):
-        header = '''[Script Info]
+    def writeHeader(self, header=None):
+        if not header:
+            header = '''[Script Info]
 Title: Default Aegisub file
 ScriptType: v4.00+
 WrapStyle: 0
@@ -79,7 +94,7 @@ Comment: 0,0:00:03.68,0:00:05.68,Default,,0,0,0,code syl all,bord = line.stylere
 Comment: 0,0:00:05.68,0:00:05.68,Default,,0,0,0,,
 Comment: 0,0:00:05.68,0:00:05.68,Default,,0,0,0,,
 Comment: 10,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("start2syl",line_in_retime,syl_shift)!{\\fad(!fade_in_dur!,0)\\bord!bord!\shad!shadow!\\blur!blur!\\3c!line.styleref.color3!\c!line.styleref.color3!\pos($x,$y)}
-Comment: 20,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("start2syl",line_in_retime,syl_shift)!{\fad(200,0)\\bord0\shad0\c!line.styleref.color2!\pos($x,$y)}
+Comment: 20,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("start2syl",line_in_retime,syl_shift)!{\\fad(200,0)\\bord0\shad0\c!line.styleref.color2!\pos($x,$y)}
 Comment: 10,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("syl",syl_shift,syl_shift-$dur/syl_in_speed)!{\\3c!line.styleref.color3!\c!line.styleref.color3!\\bord!bord!\shad!shadow!\\blur!blur!\move($x,$y,$x,!$y-($height/8)!,0,!($dur > syl_in_speed * 400 and 400 or $dur/syl_in_speed)!)}
 Comment: 40,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("syl",syl_shift,syl_shift-$dur/syl_in_speed)!{\\bord0\shad0\c!line.styleref.color2!\\t(0,!($dur > syl_in_speed * 400 and 400 or $dur/syl_in_speed)!,\c!line.styleref.color1!)\move($x,$y,$x,!$y-($height/8)!,0,!($dur > syl_in_speed * 400 and 400 or $dur/syl_in_speed)!)}
 Comment: 10,0:00:05.68,0:00:10.43,Default,,0,0,0,template char noblank all,!retime("postsyl",syl_shift-$dur/syl_in_speed,($lstart + $send + ($dur/12)) < ($lend + 300) and $dur/12 or $lend - $lstart - $send + 300)!{\\3c!line.styleref.color3!\c!line.styleref.color3!\\bord!bord!\shad!shadow!\\blur!blur!\move($x,!$y-($height/8)!,$x,!$y!,0,!$dur/syl_out_speed!)!($lstart + $end + $dur/12) < ($lend + 300) and "" or "\\fad(0,150)"!}
-- 
GitLab