Skip to content

Commit 35b8100

Browse files
committed
Line: update for Tags and Transform changes.
1 parent 86f0180 commit 35b8100

File tree

2 files changed

+39
-27
lines changed

2 files changed

+39
-27
lines changed

src/Line.moon

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@ Transform = require 'a-mo.Transform'
55
util = require 'aegisub.util'
66
bit = require 'bit'
77

8+
frameFromMs = aegisub.frame_from_ms
9+
msFromFrame = aegisub.ms_from_frame
10+
811
class Line
9-
@version: 0x010300
12+
@version: 0x010400
1013
@version_major: bit.rshift( @version, 16 )
1114
@version_minor: bit.band( bit.rshift( @version, 8 ), 0xFF )
1215
@version_patch: bit.band( @version, 0xFF )
@@ -24,7 +27,8 @@ class Line
2427
}
2528

2629
splitChar: "\\\6"
27-
tPlaceholder: "\\\3"
30+
tPlaceholder: ( count ) -> "\\\3#{count}\\\3"
31+
tTokenPattern: "\\\3(%d+)\\\3"
2832

2933
defaultXPosition: {
3034
-- align 3, 6, 9
@@ -103,6 +107,10 @@ class Line
103107
hours = minutes/60
104108
return ("%d:%02d:%05.2f")\format math.floor( hours ), math.floor( minutes%60 ), seconds%60
105109

110+
__tostring: =>
111+
@createRaw!
112+
return @raw
113+
106114
createRaw: =>
107115
line = {
108116
(@comment and ("Comment: %d")\format( @layer ) or ("Dialogue: %d")\format( @layer ))
@@ -142,14 +150,13 @@ class Line
142150
tagCollection = { }
143151
positions = { }
144152
@runCallbackOnOverrides ( tagBlock, major ) =>
145-
for tagName in *tags.oneTimeTags
146-
tag = tags.allTags[tagName]
153+
for tag in *tags.oneTimeTags
147154
tagBlock = tagBlock\gsub tag.pattern, ( value ) ->
148-
unless tagCollection[tagName]
149-
tagCollection[tagName] = @.generateTagIndex major, tagBlock\find tag.pattern
155+
unless tagCollection[tag.name]
156+
tagCollection[tag.name] = @.generateTagIndex major, tagBlock\find tag.pattern
150157
return nil
151158
else
152-
log.debug "#{tagName} previously found at #{tagCollection[tagName]}"
159+
log.debug "#{tag.name} previously found at #{tagCollection[tag.name]}"
153160
return ""
154161
return tagBlock
155162

@@ -177,8 +184,7 @@ class Line
177184
tagBlock = tagBlock\gsub tags.allTags[v[1]].pattern, ""
178185

179186
@runCallbackOnOverrides ( tagBlock ) =>
180-
for tagName in *tags.repeatTags
181-
tag = tags.allTags[tagName]
187+
for tag in *tags.repeatTags
182188
-- Calculates the number of times the pattern will be replaced.
183189
_, num = tagBlock\gsub tag.pattern, ""
184190
-- Replaces all instances except the last one.
@@ -279,17 +285,16 @@ class Line
279285

280286
getPropertiesFromStyle: ( styleRef = @styleRef ) =>
281287
@properties = { }
282-
for name, tag in pairs tags.allTags
283-
if tag.style
284-
switch tag.type
285-
when "alpha"
286-
@properties[name] = tag\convert styleRef[tag.style]\sub( 3, 4 )
288+
for tag in *tags.styleTags
289+
switch tag.type
290+
when "alpha"
291+
@properties[tag] = tag\convert styleRef[tag.style]\sub( 3, 4 )
287292

288-
when "color"
289-
@properties[name] = tag\convert styleRef[tag.style]\sub( 5, 10 )
293+
when "color"
294+
@properties[tag] = tag\convert styleRef[tag.style]\sub( 5, 10 )
290295

291-
else
292-
@properties[name] = tag\convert styleRef[tag.style]
296+
else
297+
@properties[tag] = tag\convert styleRef[tag.style]
293298

294299
-- Because duplicate tags may exist within transforms, it becomes
295300
-- useful to remove transforms from a line before doing various
@@ -301,16 +306,18 @@ class Line
301306
@runCallbackOnOverrides ( tagBlock ) =>
302307
return tagBlock\gsub tags.allTags.transform.pattern, ( transform ) ->
303308
count += 1
309+
token = @.tPlaceholder count
304310
transform = Transform\fromString transform, @duration, @.generateTagIndex( tagBlock\find transform ), @
311+
transform.token = token
305312
@transforms[count] = transform
306313
-- create a token for the transforms
307-
return @tPlaceholder .. tostring( count ) .. @tPlaceholder
314+
return token
308315
@transformsAreTokenized = true
309316

310317
loopOverTokenizedTransforms: ( callback ) =>
311318
if @transformsAreTokenized
312319
@runCallbackOnOverrides ( tagBlock ) =>
313-
return tagBlock\gsub @tPlaceholder .. "(%d+)" .. @tPlaceholder, callback
320+
return tagBlock\gsub @tTokenPattern, callback
314321

315322
@transformsAreTokenized = false
316323

@@ -333,16 +340,21 @@ class Line
333340
return "\\t" .. @transforms[tonumber index].rawString
334341

335342
interpolateTransforms: =>
336-
@loopOverTokenizedTransforms ( index ) ->
337-
transform = @transforms[tonumber index]
343+
for transform in *@transforms
338344
transform.startTime -= @transformShift
339345
transform.endTime -= @transformShift
340-
transform\gatherTagsInEffect!
341-
transform\collectPriorState @
342-
result = transform\interpolate aegisub.ms_from_frame(aegisub.frame_from_ms(@start_time)+1) - @start_time
346+
347+
newText = @text
348+
@loopOverTokenizedTransforms ( index ) ->
349+
transform = @transforms[tonumber index]
350+
frame = frameFromMs @start_time
351+
newText = transform\interpolate @, newText, index, math.floor( 0.5*( msFromFrame( frame ) + msFromFrame( frame + 1 ) ) ) - @start_time
352+
return nil
353+
@text = newText
354+
355+
for transform in *@transforms
343356
transform.startTime += @transformShift
344357
transform.endTime += @transformShift
345-
return result
346358

347359
shiftKaraoke: ( shift = @karaokeShift ) =>
348360
karaokeTag = tags.allTags.karaoke

versions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"src/ConfigHandler.moon": "0x010102",
33
"src/DataHandler.moon": "0x010002",
44
"src/DataWrapper.moon": "0x010001",
5-
"src/Line.moon": "0x010300",
5+
"src/Line.moon": "0x010400",
66
"src/LineCollection.moon": "0x010100",
77
"src/Log.moon": "0x010000",
88
"src/Math.moon": "0x010000",

0 commit comments

Comments
 (0)