-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdetect-renderer.ass
490 lines (483 loc) · 59.3 KB
/
detect-renderer.ass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
[Script Info]
ScriptType: v4.00+
Kerning: yes
Language: en
PlayResX: 384
PlayResY: 288
YCbCr Matrix: None
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,18,&HFF000000,&HFF00FFFF,&H00000000,&H00000000,-1,0,0,0,0,0,0,0,1,0,0,5,40,40,20,1
Style: **Default,Arial,18,&H00000000,&HFF00FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,5,40,40,20,1
Style: Negative,Arial,18,&H00000000,&HFF00FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,-5,40,40,20,1
Style: Oops,Arial,18,&HFF000000:00000000,&HFF00FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,5,40,40,20,1
Style: TIFI,Arial,18,&H00000000:FF000000,&HFF00FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,11,40,40,20,1
Style: Red,Arial,18,&H000000FF,&HFF00FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,5,40,40,20,1
Style: Old,Arial,18,&H00000000,&H0000FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,5,40,40,20,1
Style: *Old,Arial,18,&HFF000000,&H0000FFFF,&H00000000,&H00000000,-1,0,0,0,0,0,0,0,1,0,0,5,40,40,20,1
Style: Hidden,Arial,18,&HFF000000,&H0000FFFF,&H00000000,&H00000000,-1,0,0,0,0,0,0,0,1,0,0,5,40,40,20,1
Style: Perian,Arial,18,&H00000000,&H0000FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,5,40,40,20,1
Style: Collision,Arial,18,&H00000000,&HFF00FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,2,40,40,232,1
Style: Box,Arial,18,&H00000000,&H0000FFFF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,0,0,7,40,40,20,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
; \{libass and asa display a brace and this text. VSFilter displays a backslash and reads this text as a comment/override.}
; {VSFilter and libass 3199a87+ display a brace and this text. libass 0908a56- and asa display nothing and read this text as a comment/override.
; Perian reads each brace group as {\bunch\of\well-formed\tags\all\of\which\it\knowsCOMMENT}. It also skips vector drawings (but not whole lines that contain them).
; Perian's application of Layer values is also odd. (TODO figure out the details)
; Mainline VSFilter history:
; Guliverkli:
; r8 2.24 1.0.0.0 initial commit
; r56 2.25 1.0.0.1 MEDIATYPE_Subtitle
; r65 2.26 1.0.0.2 ReadOrder in Matroska
; r83 2.27 1.0.0.3
; r98 2.28 1.0.0.4
; r109 2.29 1.0.0.5 dialogue.style.trimleft('*'), use "Default" if style doesn't exist (earlier versions crash): can't detect this because style.name.trimleft('*') in all versions
; r126 2.30 1.0.0.6
; r133 2.31 1.0.0.7
; r139 2.32 1.0.0.8
; r159 2.33 1.0.0.9 fix hanging (infinite loop) on unpaired { or <
; r280 2.34 1.0.1.0 no subtitle changes
; r331 2.35 1.0.1.1 no subtitle changes
; r357 2.36 1.0.1.2 no subtitle changes
; r453 2.37 1.0.1.3 ASS2, \kt, rectangle \clip when m_relativeTo == 1
; Aegisub:
; r1398 https://github.com/Aegisub/Aegisub.git@5d21970bbc9c63c928235ea1c62ac4127cc23100 \fax \fay \move(float) \org(float) \pos(float) (runs not split on \fax\fay changes) and some crash and pixmix fixes (imported from somewhere)
; r2276 https://github.com/Aegisub/Aegisub.git@c54cf755ac3447389803ddbd3fb984d3d1343b43 glyph fill excluded from outline always, even on \1a&H00&\2a&H00&\fad(...) which previously didn't exclude it
; r2278 https://github.com/Aegisub/Aegisub.git@13654219c26158e1d75cefc5467849686fdb22b3 \xbord \ybord \xshad \yshad (\xbord0\ybordX acts like \bord0), Banner effect position changed when \xbord != 0*, bord/shad scaling changed**
; r2279 https://github.com/Aegisub/Aegisub.git@5d3b1fe8c2cee5ff3bd861dae1839d5ed9bc947b \beN \t(\be) <------ tadadada, the single most troublesome ASS commit ever
; r2282 https://github.com/Aegisub/Aegisub.git@582dd39cbdcee6b55f5645a480599a17058a8985 fixed \xbord0\ybordX: TODO detect this using negative MarginV and collision stacking to display message
; r2284 https://github.com/Aegisub/Aegisub.git@ea79951788b45bc31286c6ced85bc6608ae625d4 \blur <------ runner-up
; (r2285 https://github.com/Aegisub/Aegisub.git@94d3185170800f87cc7e0e70e84f50f8d1e569df glyph fill excluded from outline iff not \1a&H00&\2a&H00&\fad(inactive right now) (only a qualitative change) (although may be usable for pixel-perfect tests))
; r2286 https://github.com/Aegisub/Aegisub.git@0e6dd47bf0546c548386a6bbbf85cc96e338f04d \iclip(rectangle) (\iclip(rect)\clip(rect) stays iclip)
; r2287 https://github.com/Aegisub/Aegisub.git@b5144d09a1458797cec3f34588add964c723e22e \iclip(vector), \iclip(rect)\clip(rect) becomes clip
; ??? switched to Guliverkli2
; r2958 https://github.com/Aegisub/Aegisub.git@6eb7206aa3f8344517a7ae3f80779ca4b7fbe4a7 removed internal copy of VSFilter
; * Banner tries to move the border beyond the edge of the screen. the net effect is:
; left-to-right banner left-aligned: exactly that (glyph moved by \xbord to the left)
; left-to-right banner center-aligned: glyph moved by half \xbord to the left
; left-to-right banner right-aligned: no effect (glyph starts just beyond the edge of the screen)
; right-to-left banner left-aligned: no effect (glyph starts just beyond the edge of the screen)
; right-to-left banner center-aligned: glyph moved by half \xbord to the right
; right-to-left banner right-aligned: exactly that (glyph moved by \xbord to the right)
; ** previously, \bord and \shad were scaled by (m_scalex+m_scaley)/2; now, \xblah and \yblah are scaled by mscalex and mscaley
; Guliverkli2: ({svn,http}://svn.code.sf.net/p/guliverkli2/code/)
; r1 guliverkli r611
; r2 \fax \fay \move(float) \org(float) \pos(float) (runs not split on \fax\fay changes) (imported from somewhere)
; r62 \beN \t(\be) \blur <------ the combined most troublesome ASS commit ever (notice how conveniently both leaders are compressed into a single commit!)
; r63 \xbord \ybord \xshad \yshad
; r64 \iclip
; VSFilterMod: (https://code.google.com/p/vsfiltermod/)
; r2 everything; includes these changes among others: runs split on \fax\fay changes, karaoke coordinates calculated after transform, leftmost pixel of CWord always shown in primary colour regardless of karaoke (except when +90<frz%360<+270 and kstart<=time<kend, when it is shown in secondary colour regardless of karaoke speed)
; r11 somewhat broken* nested parentheses, \[1-4]img now takes decimal positions instead of hexadecimal
; r17 fixed parentheses, \[1-4]img position now optional
; ......
; r76 broke \fay (it's now a no-op), \fax and \fay on SSE2-capable CPUs (missing "else") (when this is added to MPC-HC, it's mysteriousy fixed)
; ......
; r87 fixed \fay without rotations (it's no longer a no-op, but it's incorrect with rotations)
; ......
; r89 modified broken \frx\fry but didn't fix them
; ......
; r91 Lua, LuaLog headers: both file paths, Lua loads the file and calls init() if it is a function
; r92 \lua(funcname,arg1,arg2...) calls funcname(arg1,arg2...) which must return {style={bold=boolean}}
; r93 \lua disabled in \t, sends {time=,length=} as first arg, accepts booleans bold,italic,underline,strikeout, floats blur,be,frx,fry,frz,fax,fay,fsx,fsy,shadx,shady,bordx,bordy, integers a1,a2,a3,a4(&0xFF),c1,c2,c3,c4(&0xFFFFFF)
; r94 \lua accepts pos={x=float,y=float}
; r95 \blah(arg1,arg2...) acts like \lua(blah,arg1,arg2...) if blah is a Lua function (blah can mask built-in tags)
; r97 \lua accepts fscx,fscy instead of fsx,fsy, accepts fsc,shad,bord setting both x and y, accepts beforetransform=string,aftertransform=string,customtransform=string**
; r98 beforetransform and aftertransform applied even around customtransform
; r99 transforms are given layer=(1 for text, 3 for outline, 4 for shadow, 5 for opaque box, 6 for clip), id=int, user=(global "sub_%d" % id if it exists), \lua sends id= in first arg, enabled and sends animate=(coefficient) in first arg in \t, user=(global "sub_%d" % event id if it exists), accepts vcpos={x=float,y=float}, user=(stored in global "sub_%d" % event id), floats rndx,rndy,rndz,rnds,rnd,fsp,fvsp,frs (rnd sets rnd[xyz])
; r100 empty transform names ignored (transforms not unset), broke pixmix (wrong rounding? and SSE and non-SSE switched places)
; r101 fixed pixmix
; r102 \lua accepts clipstyle=string (TODO document), org={x=float,y=float}
; ... Lua improvements
; r107 something about karaoke applying to outline and shadow (#ifdef _LUA)
; * the outermost closing parenthesis is included in the argument value,
; which affects empty trailing arguments, \fn and \r
; ** if customtransform is set, it is called instead of built-in 3D transforms;
; otherwise beforetransform is called, then the built-in 3D transforms applied, then aftertransform called.
; calling: for every point in the outline, call function with given name with {minx=,maxx=,miny=,maxy=,frx=,fry=,frz=,fscx=,fscy=,fax=,fay=,size={w=,h=},pos={x=,y=,z=},org={x=,y=}} and accept {x=float,y=float}
; VSFilterMod fork: (https://github.com/sorayuki/VSFilterMod)
; r2 f885cfaf7d646c24de1ee2de5e968f587109ed2a modified \q3
; a4f55d12febe49a52428f34a362d1b518799d643 \mover fix
; a4d56e8bae79edff35c9276d759be0412449276c \movevc crash fix
; da27e74b3ef19d3a9b7d5b06b2075fd62a4c0f6a float in drawings: round()ed to 32.0 before scaling
; 77910427fa2443e21b38ef97317bd5eaaa0f4000 fixed gradient base colours on \r: reset to style colours, not zero
; 27a319bcddfdfa76e1a04dfd1dfb360bc73364bf gradient fixes
; r5.2.2 3299fbd6b157546fe205e62da8f184c5186221bf fixed \frx\fry
; Still broken in VSFilterMod fork:
; \fay with rotations, see MPC-HC f9c085d79a4057ba755fddf21f888445f2c4c378
; MPC-HC:
; 0709b6b6123f85d450e6010398d82dacb3847b57 fixed \frx on SSE2
; 1602a6c7af81cc538867ee5323a82e4110a5ec9c fixed \frx\fry
; f9c085d79a4057ba755fddf21f888445f2c4c378 fixed \fay with rotations on SSE2
; 2.37 https://github.com/mpc-hc/mpc-hc.git@0a1b11126125e4c1456673b31b25b2ed77d5f4a2 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@84 \fax \fay (runs not split on changes) and some crash and pixmix fixes
; 2.37 https://github.com/mpc-hc/mpc-hc.git@08e6f7c90b4c2d8ddd6cbe165ab883035a0b6abb https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@140 outline drawn even if \bord0, "fix : opaque box overlapped"
; 2.38 https://github.com/mpc-hc/mpc-hc.git@7c168f32ef65cb43adacceb4071aa503c382ce21 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@464 Guliverkli2@58: \move(float) \org(float) \pos(float)
; 2.39 https://github.com/mpc-hc/mpc-hc.git@19fb30b3effa1a8d221240ef42e47aaf8bf9e495 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@692 Guliverkli2@68* + outline not drawn if \bord0, "fix : opaque box overlapped" removed
; 2.39 https://github.com/mpc-hc/mpc-hc.git@3244957f4563575d22bf109de27a703558611b19 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@1688 MPC-HC 1.3.1688.0 VSFilterMod@20 including fix for \fax\fay run splitting
; 2.39 https://github.com/mpc-hc/mpc-hc.git@21c0cb78a588672ad4ce69f4d1c5b4cf60ba3ee9 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@1746 MPC-HC 1.3.1746.0 VSFilterMod@25 + extra fix for something
; 2.40.1924.0 https://github.com/mpc-hc/mpc-hc.git@101e56669d1821d15a201c4b0812e5555ae8a6e2 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@1924 MPC-HC 1.3.1924.0 VSFilterMod@84 with \fay on SSE2 fixed
; https://github.com/mpc-hc/mpc-hc.git@158e31fbcc38e59cba2451ad5a2bccf69ea697d1 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@1982 crash when clip mask has negative width and/or height (wat)
; https://github.com/mpc-hc/mpc-hc.git@c3872d95719d8d861a91b876263b707a03292abb https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@2008 crash fixed
; https://github.com/mpc-hc/mpc-hc.git@039daf85424e81631d840576e0e159757f1aba14 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@2128 ignore drawing commands without enough preceding points (rather than crash)
; https://github.com/mpc-hc/mpc-hc.git@c154c5d76d52a4311a899aeeaebd9cbac5cbb822 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@3259 CPolygon::Copy doesn't copy width, ascent, descent
; https://github.com/mpc-hc/mpc-hc.git@3392e0aae0e8bf7a1153e489a2a2e3dbfb469f6d https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@3270 CPolygon::Copy copies width, ascent, descent again
; https://github.com/mpc-hc/mpc-hc.git@bd96d9168129cbab728094c5b5773486fb291635 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@3560 words starting "m 0 0 l" not rendered, anything with either width or height > 3300px not rendered
; https://github.com/mpc-hc/mpc-hc.git@afd341e7291f3b9823fed7e33bdaebf885b907b1 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@3607 words starting "m 0 0 l" rendered again
; 2.41.2.4483 https://github.com/mpc-hc/mpc-hc.git@3723d940106be42a4361cba18c91de62054103ab https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@4483 MPC-HC 1.6.2.4483 VSFilterMod mostly removed
; 2.41.?.???? https://github.com/mpc-hc/mpc-hc.git@416429425afda70980bae06ef16a8bfb2dbb13bb https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@5569 MPC-HC 1.6.?.???? enabled VSFilterMod's SSE2 transform code, thereby breaking \fay\frx\fry on SSE2
; 2.41.6263 https://github.com/mpc-hc/mpc-hc.git@de14ef44e6cab14350be937ccb9664fdfcfe29a9 MPC-HC 1.6.5.6263 \fscx(float) \fscy(float)
; https://github.com/mpc-hc/mpc-hc.git@8f3d30412adad6bfa152c6ebf8738965bb79cf28 \frx\fry\frz converted to radians by multiplying by M_PI/180, z coordinate limit removed
; b98bbf8ea1c7a59725d88c57c4b5f534f11b7f23 supposedly reverts bd96d9168129cbab728094c5b5773486fb291635
; 2.41.308 https://github.com/mpc-hc/mpc-hc.git@fca1d9d3fb6170c2e2379de235f3f39417683ddf MPC-HC 1.7.1.308 parser cache, broke lots of stuff**
; 2.41.4 https://github.com/mpc-hc/mpc-hc.git@60b7492f4ab98c7c5fa901291d6a62a762c00fa2 MPC-HC 1.7.3.4 fixed karaoke effects on leftmost pixel of CWord
; 2.41.8 https://github.com/mpc-hc/mpc-hc.git@3cca9896ce2218d3c7169e54673d18e9c8010440 MPC-HC 1.7.3.8 \t with 4 arguments overreads buffer (crash or invalid acceleration)
; 2.41.9 https://github.com/mpc-hc/mpc-hc.git@a835ca39745acd38786e93c03006ca94a94a5377 MPC-HC 1.7.3.9 \t with incorrect number of arguments no longer crashes but does nothing instead
; 2.41.14 https://github.com/mpc-hc/mpc-hc.git@98ac57ea0ba5e8cbe22d114ff928c5edde4e3780 MPC-HC 1.7.3.14 buffer overread fixed
; 7147f46af1252e61bb502ce50a227b1926c6a632
; 67d0a292b5bb5383ba33c6c65303c36d3ea3bd77
; https://github.com/mpc-hc/mpc-hc.git@1f6b129d65e8de158e1119b348e59ac43d5ff7e6 integers in headers read via wcstol and hence saturate to LONG_MIN/LONG_MAX
; 2.41.14 https://github.com/mpc-hc/mpc-hc.git@90577746cc7dbbff742129ceb36ae8e85f56c3e8 MPC-HC 1.7.6.14 fixed \fs-
; 2.41.24 https://github.com/mpc-hc/mpc-hc.git@4470846b0cf494ca8bbb404bf91351c8c95251b4 MPC-HC 1.7.6.24 float in drawings: lround()ed to 26.6 before scaling
; https://github.com/mpc-hc/mpc-hc.git@c818580fc64a3e8cb7891e7dfca45231d5e7b85e coordinates in drawings rounded after scaling
; https://github.com/mpc-hc/mpc-hc.git@dd44bd9d6260d9202d22fffa92f0d266f9d2d34f MPC-HC 1.7.6.36 coordinates in drawings and \pbo rounded to whole pixels after scaling
; https://github.com/mpc-hc/mpc-hc.git@815d90f09e4287735a12e5af44daa85f9b48b770 hexadecimal integers in headers read via wcstoul and hence saturate to ULONG_MAX
; 2.41.190 https://github.com/mpc-hc/mpc-hc.git@fcac68f1e067549562adc0607ba0b6ebbe6ee33e MPC-HC 1.7.6.190 crash on zero-point or invalid vector clips
; 2.41.191 https://github.com/mpc-hc/mpc-hc.git@ec53662e33610c5c7504427dde3ce7de421d5cb4 MPC-HC 1.7.6.191 drawing parser optimized and broken: /[mnlbspc]*/ immediately following /\S/ (used as cmd) is skipped, trailing whitespace in \p drawings causes buffer overread
; 2.41.245 https://github.com/mpc-hc/mpc-hc.git@a74db2a6c1b2e710afbd35abbe0c7271c9651b06 MPC-HC 1.7.6.245 z coordinate limit readded (in display pixels)
; 2.41.55 https://github.com/mpc-hc/mpc-hc.git@11bb014771fcc1f73f4b92c06d29f0662fdda457 MPC-HC 1.7.7.55 opaque boxes not double-scaled
; 2.41.56 https://github.com/mpc-hc/mpc-hc.git@b20e86fad2a5d7729638d772a0a5cd144f9e7189 MPC-HC 1.7.7.56 opaque boxes drawn even if \bord0
; 2.41.114 https://github.com/mpc-hc/mpc-hc.git@76e410ec885d6ec7a51d7e9da0accdf6ed13ec0e MPC-HC 1.7.7.114 fixed crash on zero-point or invalid vector clips
; https://github.com/mpc-hc/mpc-hc.git@a8a5bed7a1ad8680987a82bfa3574cd7d0f963f1 YCbCr Matrix header
; 2.41.141 https://github.com/mpc-hc/mpc-hc.git@b7b2ee8af888639340494783edc5065d8379f797 MPC-HC 1.7.8.141 drawing parser partially fixed: only /[mnlbspc]/ rather than /\S/ recognized as cmd and no more buffer overread on trailing whitespace in \p drawings, but /[mnlbspc]*/ still skipped
; 2.41.67 https://github.com/mpc-hc/mpc-hc.git@701ceec81e37de1d9f89ce82ced9bab7735a2eae MPC-HC 1.7.13.67 crash on zero-point or invalid vector clips
; 2.41.85 https://github.com/mpc-hc/mpc-hc.git@4710d66dff7a2bba5a8091aa2b4abe0323b6f52a MPC-HC 1.7.13.85 zero-point or invalid vector clips no longer crash but also no longer do anything
; * \beN \t(\be) \blur \iclip \xbord \ybord \xshad \yshad,
; glyph fill excluded from outline if \1a&H00&\2a&H00&\fad(active right now),
; Banner effect position changed when \xbord != 0,
; bord/shad scaling changed,
; \move(startpos=endpos) rounding errors eliminated,
; some pixmix fixes
; ** unknown tags are now skipped before parentheses are parsed;
; inline and parenthesized arguments are now separated;
; alpha and color tags with a value consisting entirely of /^[&H]+$/ act as if they have a value of 0;
; \fs- now acts as \fs+;
; \fsN(+) and \fsN(-) now act as \fs+N (and \fs-N after \fs- is fixed);
; \t with an incorrect number of arguments crashes
; Stuff still broken in MPC-HC because of VSFilterMod:
; nested parentheses are supported (they shouldn't be)
; \[1-4]a and \alpha values are &0xFF (they shouldn't be) https://code.google.com/p/xy-vsfilter/issues/detail?id=80
; embedded fonts do not end at lines beginning with '[' (they should) (or is this a good thing? xy-VSFilter and libass have this too)
; karaoke coordinates are calculated after transform (should be before) (or is this a good thing? but MPC-HC is alone here)
; Stuff still broken in MPC-HC because speeeed:
; unknown tags should still skip the parenthesized arguments
; oh god dem single numeric arguments. they should be taken from the string argument array, not from cmd.Mid()
; alpha and color tags with a value consisting entirely of /^[&H]+$/ act as if they have a value of 0
; the last drawing command should be remembered, not the first in a series of consecutive commands
; \clip(m) should hide the event
; Stuff now broken in MPC-HC because this makes more sense rite:
; opaque boxes aren't double-scaled
; opaque boxes are rendered even when \bord0 (interesting: guliverkli actually had this case commented out!)
; Stuff still broken in MPC-HC because it never got fixed from the time of guliverkli:
; \be(float) \fs(float) \kt(float) \kf(float) \K(float) \ko(float) \k(float)
; scaling of blur etc. through video resolution
; anamorphic correction for 3D transforms (libass does this! ha!)
; anamorphic correction for blur
; Threaded VSFilter:
; r2 forked from MPC-HC 1.5.2.3160 (a6d0a45ebdc54198bae2c0279bc75f498be2c539)
; r114 \be(float) \fscx(float) \fscy(float) \fs(float)
; Stuff still broken in Threaded VSFilter because it never got fixed from the time of guliverkli:
; \kt(float) \kf(float) \K(float) \ko(float) \k(float)
; float in drawings
; xy-VSFilter/XySubFilter:
; forked from Guliverkli2 r113 (despite r114, the last revision, being made less than two minutes later) er no, the first commit is not just that. it even has some VSFilterMod SSE code in it. the commit msg says "import from ... my personal repository"
; (20111003) https://github.com/Cyberbeing/xy-VSFilter.git@50eda5f2c3ddd149097bf4ca68db0522b8b42589 runs split on \fax\fay changes, fixed false path data cache hits when only \fscx\fscy\frx\fry\frz\fax\fay differ, new false hits when they or \xbord\ybord differ by < 0.000001
; (20111009) https://github.com/Cyberbeing/xy-VSFilter.git@eaf70dbe6c3756fd57788c9bb40686ddffb6e178 (if I am to believe the 2ea8ac6de08446f778aa599e48554d54b434f037 commit message) broke \frx\fry\frz when \shad != 0
; (20111025) https://github.com/Cyberbeing/xy-VSFilter.git@9aad0c99aae8fcaec9f23572ecfd859a1f30bf09 broke comma-delimited arguments: \blah(blah,\s*,any,thing\follows) and \blah(blah\s+,any,thing\follows) get arguments `blah` and `,any,thing\follows` (possibly just `,`)
; (20111119) https://github.com/Cyberbeing/xy-VSFilter.git@2ea8ac6de08446f778aa599e48554d54b434f037 fixed \frx\fry\frz when \shad != 0
; 3.0.0.11 https://github.com/Cyberbeing/xy-VSFilter.git@7b1e5c6e3b390ca7f0a9803786f1369878f7ae94 float in drawings, ignore drawing commands without enough preceding points (rather than crash)
; 3.0.0.45 https://github.com/Cyberbeing/xy-VSFilter.git@404301a33f40978526382e69777d9e6a864edd65 \be(float) \fscx(float) \fscy(float) \fs(float) \kt(float) \kf(float) \K(float) \ko(float) \k(float), \clip(float+0.5) \iclip(float+0.5)
; 3.0.0.301 3.1.0.698 fixed comma-delimited arguments
; 3.1.0.738 https://github.com/Cyberbeing/xy-VSFilter.git@12c5a9efe0268afd7735b1af2218e276052b0519 MPC-HC tag parser including remnants of VSFilterMod, \rblah acts as \r, \r looks up a style with an empty name
; 3.1.0.746 https://github.com/Cyberbeing/xy-VSFilter.git@e67b464d9e992489bfb57ffa48ab9bddc5a43f97 fixed \r
; 3.1.0.753 https://github.com/Cyberbeing/xy-VSFilter.git@e64afafba2fa630013579207cf517a46b8b48085 reverted MPC-HC tag parser
; Version number history (mainly MPC-HC):
; major version, version in the filter property dialogue, version in the resource file embedded in the DLL
; 2.37 2.37 1.0.1.3 guliverkli@453
; 2.38 2.38 1.0.1.4 Guliverkli2@2
; 2.38 1.0.1.4 https://github.com/mpc-hc/mpc-hc.git@b271b75623e1034b309bd8402d5a577fb0ab9b06 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@349
; 2.38 1.1.604.0 https://github.com/mpc-hc/mpc-hc.git@ed928975f3dc8f3f13cd78a48aa2e157f8b5f03c https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@610
; 2.39 2.39 1.0.1.5 Guliverkli2@67
; 2.39 1.0.1.5 https://github.com/mpc-hc/mpc-hc.git@19fb30b3effa1a8d221240ef42e47aaf8bf9e495 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@692 (merges Guliverkli2@68)
; 2.39 1.1.604.0 https://github.com/mpc-hc/mpc-hc.git@aebfddb159555e132fb434e689321fef5689c4b6 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@694
; 2.39 1.1.714.0 https://github.com/mpc-hc/mpc-hc.git@3d4853aa593f0790fe91958a822552727403c829 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@722
; 2.39 1.2.0.0 https://github.com/mpc-hc/mpc-hc.git@9a174874a81309d5f3cc307245c0c15730c81b06 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@933
; 2.39 2.39.5.0 Guliverkli2@93
; 2.39 2.39.5.1 Guliverkli2@95
; 2.39 2.39.5.2 Guliverkli2@102 \ I don't think there are
; 2.39 2.39.5.3 Guliverkli2@106 / any real changes in here
; 2.39 MPC_VER https://github.com/mpc-hc/mpc-hc.git@4fede9d52c08fb0455baaad2973e8346fe413ac0 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@1576
; the version in the resource file is MPC_VER forever after, so it is omitted from here on
; 2.40 2.40.1875.0 https://github.com/mpc-hc/mpc-hc.git@2679ecc7eb344c3ee29fb060fcf214d75199c4b1 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@1875 MPC-HC 1.3.1875.0
; 2.40.XXXX.0 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@XXXX MPC-HC 1.?.XXXX.0 (up to 1.4.2833.0)
; *2.40.1.2834 https://github.com/mpc-hc/mpc-hc.git@8c25f2ac194ab67f7483106ab951458ff83b1ddc https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@2834 MPC-HC 1.4.1.2834
; *2.40.X.YYYY https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@YYYY MPC-HC 1.?.X.YYYY
; 2.41 2.41.2.4481 https://github.com/mpc-hc/mpc-hc.git@add073a3b74080eb2e9054e815ec801f04c13007 https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@4481 MPC-HC 1.6.2.4481
; 2.41.2.XXXX https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@XXXX MPC-HC 1.6.2.XXXX
; 2.41.4499 https://github.com/mpc-hc/mpc-hc.git@586dc17263770ebd799c8a4753af0cfc8b99bf8e https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@4499 MPC-HC 1.6.2.4499
; 2.41.XXXX MPC-HC 1.?.?.XXXX (up to 1.7.0.7859)
; 2.41.2 https://github.com/mpc-hc/mpc-hc.git@ece12e79d2631f3de2938783618cc2304302db25 MPC-HC 1.7.0.2
; 2.41.Xxx MPC-HC 1.7.?.Xxx
; (Xxx = from 1 to 3 figures)
; * CCCP styles these as 2.40.YYYY.X. (CCCP switched to xy-VSFilter before MPC-HC VSFilter's version number reached 2.41.)
; The Aegisub commits of interest have version numbers between version X and version X+1 styled as "X release preview" or "X pre-release", not "X+1 release preview".
; Aegisub used to contain the following comment:
; 2.38-0611 is base svn 611
; 2.38-0611-1 is with clipfix and fax/fay patch
; 2.38-0611-2 adds CSRI
; 2.38-0611-3 fixes a bug in CSRI and adds fontcrash-fix and float-pos
; 2.38-0611-4 fixes be1-dots and ugly-fade bugs and adds xbord/ybord/xshad/yshad/blur tags and extends be
; 2.39 merges with guliverkli2 fork
; TODO: "VSFilter" vs "DirectVobSub"?
; TODO: Kainote, MPC-BE, https://github.com/HomeOfVapourSynthEvolution/VSFilter, libjass, ASS.js, asa, old VLC, ffdshow, Subtitler, TextSub?
; TODO: try to fix this: VSFilter 2.39 and older are so slow they don't render anything at all until many seconds in if ever
; (and this probably keeps getting worse as I keep adding lines). \fay200 is the biggest (but not only) offender.
; ...Or is it? Now it's rather snappy again even with the \fay200 in. I have no idea what's going on.
; And now the \fay200 is causing xy-VSFilter 20111030 and 20111119 and threaded-VSFilter 07272012 to crash! What.
; And now it's crashing VSFilter 2.39.
; Maybe it depends on the amount of free RAM?
; Well, I've now hidden the \fay200 from everything that doesn't have VSFilterMod r11 code in it.
; TODO: 09:05:04 < lachs0r> older vsfilter had nice bugs like \blur doing nothing when the lines weren't sorted by start time
; TODO: investigate the various pixmix fixes
; More quirks:
; * It seems VSFilter keeps reusing /,[^,]*$/ as the next field when parsing Style, Dialogue etc. lines if there are not enough fields.
; * VSFilter appears to create opaque box borders using its own polygon parser. Which can be overflown. Is this interesting?
; * VSFilter automatically renames duplicate style definitions.
; * VSFilter, except MPC-HC and xy since ec9dd9eb48f65da1265e6ac1380d20afb6dba310, converts degrees to radians by multiplying by 3.1415/180. (MPC-HC and libass multiply by M_PI/180.)
; * VSFilter still read \pbo as an integer. (libass supports \pbo(float).)
; * \t(t1,t2,tags) accepts (int)float, while \t(t1,t2,accel,tags) accepts only integers.
; * In SSA styles, VSFilter applies alpha to OutlineColour (which is copied from ShadowColour) but not to ShadowColour.
; * VSFilter skips commas when looking for colons when parsing timestamps.
; * VSFilter seems to ignore Effect if the dialogue starts with the exact same text.
; Oh, lol, this is probably meant as "if there is no effect field, don't parse the dialogue as the effect" (see the first quirk).
; * VSFilter supports HTML tags.
; * Does VSFilter, at least MPC-HC, crash on <tag attr="lol> (with an unpaired quotation mark)?
; * VSFilter applies inconsistent alignment when an ASS style is defined with Alignment -2147483648:
; * Vertical alignment is bottom, like for \an1, \an2 and \an3.
; * Lines within the event are center-aligned, like for \an2.
; * Without \pos or \move, the center of the event is aligned with the right edge of the screen minus MarginR, like for \an3.
; * With \pos or \move, the left edge of the event is aligned with the position point, like for \an1.
; * Without \org, the rotation origin is aligned with the horizontal center of the event, like for \an2 (visually).
; * (With \org, the rotation origin is as specified.)
; * Don't forget VSFilter ignores the Format lines.
; When this script is muxed into a container that usually provides its own event timestamps in lieu of the plain-text timestamps given in the script,
; make sure to pretend that the following block is not events and copy it verbatim into the stream header/CodecPrivate for libass to parse during playback.
; Omit the space after Dialogue: to trick MKVToolNix into doing this. In case this gets fixed, add an explicit terminator so that MKVToolNix can be patched to do this explicitly.
; Add extra garbage after a timestamp to ensure that FFmpeg and VLC also put these lines in the stream header when parsing a standalone ASS file.
; When parsed by libass, these events will all have ReadOrder=0, so enforce ordering through the Layer field (otherwise they'd be reordered arbitrarily).
; VSFilter parses these events too, but then it somehow ignores them. Keep hiding these events from VSFilter just in case, but use this fact to detect mkvmerge+VSFilter.
; Add a zero replacing the removed space to ensure that Aegisub and FFmpeg read the correct Layer and that Aegisub is able to load the file at all,
; as they start reading the Layer field at a constant offset of 10 (and Aegisub aborts with an error if it is not a valid decimal integer).
; OUT OF ORDER: these versions are newer than 0.12.2+ 546f500 and older than 0.13.4+ 858196e.
; Take care to hide these lines from VSFilter, which stores timestamps in int.
; This assumes that (unsigned) (1.0 / 255 * -255u) + 1 == -1u / 255 and that (uint8_t) (double) (int32_t) (uint32_t) -1 is defined to be 255. If not, this might be visible in an older libass.
; Dialogue:01,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,288)\an1\c&H0000FF&\1a&HFF&}\{\fscx0{\1a&hFF&\fade(255,0,-255,00000000000000000010000,0,-1e16,254e16)}\N{\p1}m 0 0 l 384 0 384 288 0 288{\p0}
; Dialogue:02,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,135)\1a&HFF&}\{\fscx0{\1a&hFF&\fade(255,0,-255,00000000000000000010000,0,-1e16,254e16)}You are using libass 0.12.2+ 3bbd058 to 0.13.4+ 580ae21.\NYour copy is outdated!
; This assumes that uint32_t has an integer conversion rank at least as high as the rank of int. If not, in an older libass this may trigger an int overflow.
; This also assumes that unsigned int has at least 32 value bits. I think libass itself assumes this, so this should be rather safe.
; If either of these conditions does not hold (but the overflow does not occur or behaves like two's complement wraparound), these lines will be visible in an older libass with alpha FE, FD, FB, F7, EF, DF, BF or 7F.
; This also assumes that a conversion from uint32_t to int32_t is defined as a reinterpretation of the bit pattern as two's complement with the sign bit at 0x80000000.
Dialogue:01,0:00:00.00!,0:00:10.00,Box,,0,0,0,,{\pos(0,288)\an1\c&H0000FF&\1a&HFF&}\{\fscx0{\1a&hFF&\fade(255,0,-1,00000000000000000010000,0,0,0)}\N{\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue:02,0:00:00.00!,0:00:10.00,Default,,0,0,0,,{\pos(192,135)\1a&HFF&}\{\fscx0{\1a&hFF&\fade(255,0,-1,00000000000000000010000,0,0,0)}\NYou are using libass 0.12.2+\N3bbd058 to 0.13.4+ 580ae21\N(likely 0.12.2+ 8c8741f to 0.13.4+{\1a&HFF&}({\1a}\N580ae21, unless your platform\N{\1a&HFF&}).{\1a}has superwide integers).\NYour copy is outdated!
; This is shown only if unsigned int has at most 34 value bits. Otherwise, even in these libass versions, the above is shown instead.
; TODO: simplify message based on Aegisub detection
Dialogue:03,23860:55:45.92!,0:00:10.00,Box,,0,0,0,,{\pos(0,288)\an1\c&H0000FF&\1a&HFF&}\{\fscx0{\1a&hFF&\fade(255,0,-1,00000000000000000010000,0,0,0)}\N{\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue:04,23860:55:45.92!,0:00:10.00,Default,,0,0,0,,{\pos(192,135)\1a&HFF&}\{\fscx0{\1a&hFF&\fade(255,0,-1,00000000000000000010000,0,0,0)}\NYou are using libass 0.12.2+\N3bbd058 to 0.13.4+ 580ae21\N{\1a&HFF&},{\1a}(likely 0.12.2+ 3bbd058 to e0bde0b,{\1a&HFF&}({\1a}\N{\1a&HFF&}).{\1a}unless you are using Aegisub).\NYour copy is outdated!
; OUT OF ORDER: these versions are newer than 0.12.1+ b4c39b8 and older than 0.12.1+ 0d94ff4.
; can 4567ad1e3c373ee185d3ba7f044222442ea55534 be distinguished?
; I used to have &H008484& here too.
Dialogue:01,0:00:00.00!,00:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\p1}m 0 0 l 384 0 384 l 288 0 288{\p0}
Dialogue:02,0:00:00.00!,00:00:10.00,Default,,0,0,0,,{\pos(192,144)\clip(m 0 0 l 384 0 384 l 288 0 288)}\NYou are using libass 0.12.1+ 9beeecc or 4567ad1.\NYour copy is outdated!
Dialogue:-98,0:00:00.00!,0:00:10.00,Collision,,0,0,0,,\N\N\NYou are using Aegisub.\N\N\N
Dialogue:-98,0:00:00.00,0:00:00.00,Default,,0,0,0,,{ReadOrder padding for FFmpeg so libass doesn't skip the next event as a ReadOrder=0 duplicate}
; TODO: distinguish FFmpeg+VSFilter and FFmpeg+Perian; distinguish ASS+Aegisub from FFmpeg+Aegisub
; this quirky end timestamp is no longer necessary when this uses Collision to evade Aegisub
Dialogue:-98,0:00:00.00,0:00:00.0001000,Collision,,0,0,0,,You are using FFmpeg (unless you\N{\1a&HFF&}).{\1a&H00&}are viewing an FFmpeg-made MKV).
Dialogue:06,0:00:00.00,0:00:10.00,Collision,,0,0,0,,\h\N\N\N\N\N\N
Dialogue:099,0:00:00.00,0:00:10.00,Collision,,0,0,0,,\h\N\N\N\N\N\N
end of codec private
Dialogue: 6,0:00:00.00,0:00:10.00,Collision,,0,0,0,,{\1a&HFF&\1a}You are using VSFilter and viewing\N{\1aH&FF&}.{\1a}an MKVToolNix-made MKV.
Dialogue: 99,0:00:00.00,0:00:10.00,Collision,,0,0,0,,{\1a\1a&HFF&}You are using Perian and viewing\N{\1aH&FF&}.{\1a&H00&\1a\1a&HFF&}an MKVToolNix-made MKV.
Dialogue: 0,0:00:00.00,9:59:59.99,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\fscx4000\fscy4000}█{Perian ignores ASS vector drawings and mishandles the video this script comes with in various mysterious ways.}
; Perian deletes at most one leading asterisk from the style name in style definitions (and none in Dialogue lines),
; so this could be *Default, but that makes VSFilter 2.28 and older dereference NULL and display nothing.
Dialogue: 0,0:00:00.00,9:59:59.99,Perian,,0,0,0,,{\pos(192,144)\1a&HFF&}.{\1a&H00&}You are using Perian.\NIts support for styled\N{\1a&HFF&}.{\1a&H00&}subtitles is very limited.{But the code seems quite nice.}
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\iclip(0,0,0,0)\clip(0,0,0,0)}You are using Aegisub v2.1.2\N{\1a&HFF&}.{\1a}release preview SVN r2286.\NYour copy is severely outdated!
; TODO: mention Aegisub r2287 to xxx and Guliverkli2 r64 to r66 in this line?
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\iclip(0,0,384,288)\clip(0,0,384,288)}\h{\fax1\fay1}You are using VSFilter{\fax0\fay0}\h\N{\1a&HFF&}.{\1a}\h{\fax1\fay1}2.39 to 2.39.1687.{\fax0\fay0}\h\N\h{\fax1\fay1}Your copy is outdated!\h
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\iclip(0,0,384,288)\clip(0,0,384,288)\1a&HFF&}.{\1a}\h{\fax1\fay1}You are using VSFilter 2.39.{\fax0\fay0}\h\N\h{\fax1\fay1}Your copy is outdated!\h
; TODO: split on 20111009
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1va(FF,FF,FF,FF)\clip(0,0,0,0)\org(()\iclip(0,0,0,0,))\fax1\fay1}\h{\fax0\fay0}You are using xy-VSFilter{\fax1\fay1}\h\N.{\fax0\fay0}20111003 to 20111024.{\fax1\fay1}\N\h{\fax0\fay0}Your copy is outdated!\h
; TODO: add a message telling the user to stay away from VSFilterMod unless they know what they're doing
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1a&HFF&\org(()\1va(0,0,0,0))}You are using VSFilterMod r10 or older.\NYour copy is outdated!{Even though for the purpose of rendering proper SSA/ASS/ASS2, it is more correct than the later versions.}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1a&HFF&\1va(0,0,0,)\fscy0}.{\fscy}You are using VSFilterMod r11 to r16.\NYour copy is outdated!
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1a&HFF&\1va(0,0,0,0)\fscx100()\org(()\clip(0,0,0,0))\fscy0}.{\fscy}You are using VSFilterMod r17 to r91.{Red background.}
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1a&HFF&\1va(0,0,0,0)\fscx100()\org(()\clip(0,0,0,0))\lua(funcname,param1,param2)\fscy0}.{\fscy}You are using VSFilterMod r92 or newer.{Red background.}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1a&HFF&\1va(0,0,0,0)\fscx100()\org(()\clip(0,0,0,0))\fscy0}.{\fscy}You are using VSFilterMod r17 or newer.{Red background.}
; Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&HFF0000&}{with gradient activated, VSFilterMod treats colors as RGB rather than BGR}{\1a&HFF&\1va(0,0,0,0)\fay200\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\fay200\org(()\fay0\fscx0)\p1}m 0 0 l 384 0 384 288 0 288{\p0}
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1a&HFF&\1va(0,0,0,0)\fay200}You are using VSFilterMod 1.1 SVN\N{\fscy0}.{\fscy}r76 to r86 on an SSE2-capable CPU.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\fay200\org(()\fay0\fscx0)}You are using VSFilterMod 1.1 SVN\N{\fscy0}.{\fscy}r76 to r86 on an SSE2-capable CPU.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1va(FF,FF,FF,FF)\org(()\clip(0,0,0,0))\lalala(\clip(0,0,0,0))}You are using VSFilter\N{\fscy0},{\fscy}2.39.1688 to 2.41.6262,\N{\fscy0}.{\fscy}or threaded-VSFilter r113 or older.\NYour copy is outdated!
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\clip(0,0,0,0)\iclip(0,0,0,,)}You are using xy-VSFilter\N{\1a&HFF&}.{\1a}20111025 to 3.0.0.44.\NYour copy is outdated!
; With the Double Resolution feature enabled, as it is by default, the following set of lines:
; * is displayed correctly by builds up to 20111117 v2,
; * is displayed hilariously wrongly by builds 20111119 to 20111214,
; * (properly) crashes build 20111220.
; Build 20111223 removes the feature.
; TODO: use a bigger script resolution to avoid triggering this bug.
; Although the user can configure a bigger resolution in the Double Resolution settings...
; TODO: I *think* hanging punctuation is already factored into these positions. Not sure why I did it. Why not just do it like everywhere else?
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\clip(0,0,0,0)\iclip(0,0,0,,)\an7\shad271.529\fax-1\fay1\fscx71\fscy71\frz45\pos(94.011,117)}You are using xy-VSFilter
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\clip(0,0,0,0)\iclip(0,0,0,,)\an7\shad271.529\fax-1\fay1\fscx71\fscy71\frz45\pos(107.899,135)}20111025 to 20111118.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\clip(0,0,0,0)\iclip(0,0,0,,)\an7\shad271.529\fax-1\fay1\fscx71\fscy71\frz45\pos(104.366,153)}Your copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\clip(0,0,0,0)\iclip(0,0,0,,)\an7\shad271.529\fax-1\fay1\fscx71\fscy71\frz45\pos(-18.442,388.529)}You are using xy-VSFilter
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\clip(0,0,0,0)\iclip(0,0,0,,)\an7\shad271.529\fax-1\fay1\fscx71\fscy71\frz45\pos(2.189,406.529)}20111119 to 3.0.0.44.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\clip(0,0,0,0)\iclip(0,0,0,,)\an7\shad271.529\fax-1\fay1\fscx71\fscy71\frz45\pos(-8.09,424.529)}Your copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\fscx0.25\lalala(\clip(0,0,0,0))\p1}m 0 0 l 153600 0 153600 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,-144)\clip(0,0,0,0)\iclip(0,0,0,,)\fscy0.25\p1}m 0 0 m 0 230400{\p0\fscy100}\NYou are using xy-VSFilter 3.0.0.45 to\N3.0.0.300, or XySubFilter 3.1.0.697{ (both in trunk and in release branches)}\Nor older{, or CCCP xy-VSFilter 3.0.0.307 (2014-12-25-beta) or older}. Your copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\rHidden}You are using XySubFilter\N{\1a&HFF&}.{\1a}3.1.0.738 to 3.1.0.745.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,-144)\org(()\clip(0,0,0,0))\lalala(\clip(0,0,0,0))\fscy0.25\p1}m 0 0 m 0 230400{\p0\fscy100}\NYou are using MPC-HC 1.6.5.6263 to\N{\1a&HFF&},{\1a}1.7.1.307, the corresponding VSFilter,\N{\1a&HFF&}.{\1a}or threaded-VSFilter r114 or newer.\NYour copy is outdated!
; Take care to hide this line from VSFilter 2.39, which doesn't support \fs(float).
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,-144)\fs360\fs-6\clip(0,0,0,0)\lalala(\iclip(0,0,0,0))}\N\N{\fs}You are using MPC-HC\N{\1a&HFF&},{\1a}1.7.1.308 to 1.7.6.13,\N{\1a&HFF&}.{\1a}or the corresponding VSFilter.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,117)\an8\fs1800\fs-9\fs-9\clip(0,0,0,0)\lalala(\iclip(0,0,0,0))\iclip(m 0 0 l 384.0 0 384 288 0 288)}You are using MPC-HC\N{\1a&HFF&},{\1a}1.7.6.14 to 1.7.6.23,\N{\1a&HFF&}.{\1a}or the corresponding VSFilter.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\clip(m 0 0 l 384 0 !l 0 0 l 384 288 !l 0 0 l 0 288)}You are using MPC-HC\N{\1a&HFF&},{\1a}1.7.6.191 to 1.7.8.140,\N{\1a&HFF&}.{\1a}or the corresponding VSFilter.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\clip(m 0 0 !ln 384 0 384 288 0 288)}You are using MPC-HC\N{\1a&HFF&},{\1a}1.7.8.141 to 1.7.13.66,\N{\1a&HFF&}.{\1a}or the corresponding VSFilter.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Hidden,,0,0,0,,{\pos(192,135)\rBox\c&H009400&\clip(0,0,0,,)\lalala(\fs+0.32e3)}\N\N{\p1}m 0 0 nl 384.0 0 384 288 0 288{\p0}
; TODO: distinguish xy-VSFilter without support for float in drawings
; TODO: write "xy-VSFilter or XySubFilter" or something to that effect? No, apparently Cyberbeing's official POV is that 3.1 is XySubFilter and 3.0 is xy-VSFilter.
; TODO: find a way to distinguish XySubFilter
; I think I can use overlong UTF-8 encodings to pick out XySubFilter,
; but that will only work when detect-renderer.ass is an external script.
; In internal scripts, the distinction only exists for the header (if at all),
; because events are decoded using standard Win32 API functions.
; TODO: use &H008484& background for latest-but-incorrect xy-VSFilter, XySubFilter and MPC-HC?
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,-144)\clip(0,0,0,0)\org(()\iclip(0,0,0,0))\clip(0,0,0,,)\fscy0.25\p1}m 0 0 m 0 230400{\p0\fscy100}\NYou are using\N{\1a&HFF&},{\1a}xy-VSFilter 3.0.0.301 or newer,\N{\1a&HFF&},{\1a}XySubFilter 3.1.0.698 to 3.1.0.737,\N{\1a&HFF&},{\1a}XySubFilter 3.1.0.753 or newer,\N{\1a&HFF&}.{\1a}or some VSFilter newer than this file.
; Dialogue: 0,0:00:00.00,0:00:10.00,Hidden,,0,0,0,,{\pos(192,144)\rDefault\clip(0,0,0,0)\lalala(\iclip(0,0,0,0))\clip(m 0 0 nl 384.0 0 384 288 0 288)\fscy3686400\p1}m 0 0 m 0.01{\p0\fscy100}\NYou are using XySubFilter\N{\1a&HFF&}.{\1a}3.1.0.746 or newer.
; MPC-HC scales from script to display resolution before rounding, so make sure these are rounded up at as high display resolutions as possible by specifying nextafter(rounded_up, 0).
; Everyone else rounds before scaling.
; Dialogue: 0,0:00:00.00,0:00:10.00,Hidden,,0,0,0,,{\pos(192,-144)\rDefault\lalala(\fscy3686400\p1)}m 0 0 m 0 0.031249999999999997{\p0\fscy100}\NYou are using XySubFilter\N{\1a}.{\1a&H00&}3.1.0.746 or newer.
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,-144)\lalala(\fscy3686400\p1)}lm 0 0 lm 0 0.015624999999999998{\p0\fscy100}\NYou are using MPC-HC\N{\1a&HFF&},{\1a}1.7.6.24 to 1.7.6.190{35}{ or to .190 with the display height a multiple of 28*64=18432 pixels},\N{\1a&HFF&}.{\1a}or the corresponding VSFilter.{Green background and no "outdated" message because this version is more correct than the newer one. (But both are bugged due to VSFilterMod and the new tag parser.)}
; Take care to put \fs1440 before \fs- and the broken \org so that Perian sees it and renders this text effectively invisible.
Dialogue: 0,0:00:00.00,0:00:10.00,Hidden,,0,0,0,,{\pos(192,108)\an8\rDefault\fs1440\fs-0.9875e1\org(()\clip(0,0,0,0)))}You are using XySubFilter\N{\1a},{\1a&H00&}3.1.0.746 to 3.1.0.752,\Nor MPC-HC newer than this file\N{\1a}.{\1a&H00&}or the corresponding VSFilter.{Red background.}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,117)\an8\org(()\clip(0,0,0,0))\fs0.1422e4\clip(m 0 0 nl 384.0 0 384 288 0 288)}You are using MPC-HC\N{\1a&HFF&},{\1a}1.7.6.24 to 1.7.6.190,\N{\1a&HFF&}.{\1a}or the corresponding VSFilter.{Green background and no "outdated" message because this version is more correct than the newer one. (But both are bugged due to VSFilterMod and the new tag parser.)}
; Take care to avoid crashing MPC-HC 1.7.6.190 to 1.7.7.113
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H009400&\clip(!n 0 0 m 0 0)\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\clip(!n 0 0 m 0 0)}You are using MPC-HC 1.7.13.85 or\N{\1a&HFF&}.{\1a}newer, or the corresponding VSFilter.
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H008484&\1a&HFF&\1va(0,0,0,0)\p1}m 0 0 l 384.0 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1a&HFF&\1va(0,0,0,0)\clip(m 0 0 l 384.0 0 384 288 0 288)}You are using SoraYuki’s VSFilterMod\N{\fscy0}.{\fscy}r4+ da27e74 or newer.{Yellowish background because VSFilterMod.}
; TODO: maybe distinguish MPC-HC versions that don't double-scale opaque boxes by showing
; the two messages in different positions on screen and hiding the inappropriate one
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\iclip(0,0,384,288)\p1}m 0 0 l 384 0 384 288 0 288{\p0}
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\iclip(0,0,384,288)\1a&HFF&}.{\1a}You are using VSFilter 2.38.\NYour copy is severely outdated!
; TODO: check line wrapping
; When editing these lines, make sure to edit all copies of each line simultaneously.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\iclip(0,0,384,288)}You are using Aegisub v2.1.2\Nrelease preview SVN r2284\N{\1a&HFF&}.{\1a}or r2285, or Guliverkli2 r63.\NYour copy is severely outdated!
; These lines don't require the iclip, but I'm keeping it to ensure minimum visible noise in newer VSFilters
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(-192,-144)\iclip(0,0,384,288)\xshad384\yshad288\blur48\bord1\4c&H0000FF&}release preview SVN r2284\N{\4a&HFF&\blur0}.{\4a\blur48}or r2285, or Guliverkli2 r63.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(-192,-144)\iclip(0,0,384,288)\xshad384\yshad288\4a&HFF&}.{\4a\blur48}release preview SVN r2279 to r2283.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(-192,-144)\iclip(0,0,384,288)\xshad384\yshad288\bord1\4c&H0000FF&\4a&HFF&}.{\4a\be128}release preview SVN r2279 to r2283.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(-192,-144)\iclip(0,0,384,288)\xshad384\yshad288\4a&HFF&}.{\4a\be128}release preview SVN r2278.
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(-384,-384)\4c&H0000FF&\shad384\xshad0\yshad0\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(-192,-240)\shad384\xshad0\yshad0\4a&HFF&}.{\4a}You are using Guliverkli2 r62.\NYour copy is severely outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(-192,-240)\shad384\xshad0\yshad0\be128\bord1\4c&H0000FF&\4a&HFF&}.{\4a}You are using Guliverkli2 r62.\NYour copy is severely outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(-192,-240)\shad384\xshad0\yshad0\be128\4a&HFF&},{\4a}You are using Aegisub v2.00 pre-release SVN r1398 to v2.1.2 release preview SVN r2277,\N{\4a&HFF&}.{\4a}or Guliverkli2 r2 to r61.\NYour copy is severely outdated!
; Take care to hide these lines from VSFilterMod r76 to r86 with SSE2.
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\iclip(0,0,384,288)\fax1\fay1\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\iclip(0,0,384,288)\fax1\fay1\k1001\kt0\k0\1a&HFF&}.{\1a}You are using VSFilter 2.37.\NYour copy is severely outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\kt1001\1a&HFF&}.{\1a}You are using VSFilter 2.36 or older.\NYour copy is severely outdated!
; {\1a&HFF&}\{\1a&H00&}\N hides stuff from libass
; \NYou should upgrade to xy-VSFilter.
; You are using libass\Nnewer than this file.
; libass #285 (6080b45e01ae8da6f46dc0e93e71332eb55d04ac) fixes false cache hits when two clip masks differ only in vector coordinate scale and when two style-3 borders differ only in advance.x due to complex shaping
; libass 49eb2d2ecdc12d2dcd3af8ca00067cb4161679ff: no style-3 border around spaces? fixed in abfa6cfdb045d16383b72c78b2ee60929c575a87
; same thing? 04b51c2d, fixed in 98707694069b6f1808eef5e1d23bc63fb575e067
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,288)\an1\c&H009400&\1a&HFF&}\{\fscx0{\1a}\N{\p1}m 0 0 l 384 0 384 288 0 288{\p0}
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\an7\shad271.529\fax-1\fay1\fscx70.711\fscy70.711\frz45\pos(11.318,397.529)}You are using libass
; Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\an7\shad271.529\fax-1\fay1\fscx70.711\fscy70.711\frz45\pos(6.552,415.529)}newer than this file.
; TODO: hanging punctuation in all following lines
Dialogue: 0,0:00:00.00,0:00:10.00,Negative,,0,0,0,,{\pos(192,-9)\1a&HFF&}\{\fscx0{\1a}\N{\p1}m 0 0 m 0 288{\p0}\NYou are using libass 0.13.6+ 81ba39f or newer.
Dialogue: 0,0:00:00.00,0:00:10.00,Negative,,0,0,0,,{\pos(0,0)\c&H0000FF&\p1}m 0 0 l 384 0 384 288 0 288 m 0 576{\p0}
; Take care to hide this line from Perian, which treats it as \an2 but doesn't support vector drawings.
Dialogue: 0,0:00:00.00,0:00:10.00,TIFI,,0,0,0,,{\pos(192,450)}You are using libass 0.13.6+ 08092bd.\NYour copy is outdated!\N{\p1}m 0 0 m 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Oops,,0,0,0,,{\pos(192,135)\1a&HFF&\t(-1,-1,\clip(0,0,0, }){\1a}\NYou are using libass 0.13.4+ 3ebd194 to 0.13.6+ 7010ff3.\NYour copy is outdated!
; 86f65f88d805372fa53d64cb4d08e98180bd735f could be detected if assumptions could be made about size_t and (to avoid undefined behavior before 0b1eaa83fd46c3b56d68592639d358b0557dc427) int
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,135)\1a&HFF&\t(-1,-1,\clip(0,0,0,0, }){\1a\fade(0,0,255,00000000000000000010000,0,0,0)}\NYou are using libass 0.13.4+ 858196e to ca0ea14.\NYour copy is outdated!
; 5d7093a54ed23d76f9f6f5638a39a40b4640f90d could be detected if (long long) (10 * ((union { int i; unsigned u; }) {.i = -1}).u) was well-defined
; fontselect PostScript names
; 45ae478d2dd4576a09b0680e0b8b220a9c30330e
; fontselect
; 23de9995103c16ceceba19cae87e328be12fa8e4
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\fade(0,0,000000000000000000255,0,0,0,0)\1a&hFF&}You are using libass 0.12.2+ 36db47b or 546f500.\NYour copy is outdated!
; Take care to put \p1 before the broken \1a so that Perian sees the \p1 and doesn't try to render this box.
; I used to have &H008484& here for... what, "outdated but not outdated enough to be red"? Why?
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\p1\1a&HHFF&}m 0 0 l 384 0 384 288 0 288{\p0}
; e5b86309cf3117cb0a3a4523ae42d483c5356f15/5c3ed3e6feb6e15179d1bc9599cb15150fa07bff
; can be distinguished if assumptions are made about int and double.
; How about this: have a generic line that doesn't distinguish it, and then have three lines
; that hide it and split it on that commit if the assumptions about int and double hold.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\clip(m 0 0 l 0 l 384 0 384 288 384 l 0 288)\1a&HHFF&}\NYou are using libass 0.12.1+ 0d94ff4 to 0.12.2+ 409ce02.\NYour copy is outdated!
; b63d8931845af256523d1142abea5caf2f65685d
; 26ccc19c66298ee7783f45e6534d4ddee90cca15?
; 099f7fd5fad11d7b7c4820fc096be7180914222d
; ee94375e1d4c5d977e5e9c4ad5cba9a7f8e2d078 etc.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\clip(m 0 0 l 384 0 384 l 288 0 288)\1a&HFF(00)}You are using libass 0.11.2+ cc9aaeb to 0.12.1+ b4c39b8.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Red,,0,0,0,,{\pos(192,135)\1c&H000000&\1a&HFF&}\{\fscx0{\1a(FF)}\NYou are using libass 0.11.2+ 2c7fc01 to 722fc52.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Hidden,,0,0,0,,{\pos(192,135)\fscx100\fscy100\iclip(0,0,0,0)\clip(0,0,384,288)}\{\fscx0{\1a}\NYou are using libass 0.11.2+ 84b14ca.\NYour copy is outdated!
; Take care to hide the following two lines from Aegisub r2286.
; I used to have &H008484& here too.
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,288)\an1\c&H0000FF&\iclip(0,0,0,0)\clip(0,0,0,0)\1a&HFF&}\{\fscx0{\1a&H00&}\N{\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,135)\iclip(0,0,0,0)\clip(0,0,0,0)\1a&HFF&}\{\fscx0{\1a&H00&}\NYou are using libass 0.10.2+ a7ccf59 to 0.11.2+ b3c2b31.\NYour copy is outdated!
; From this point on, everything is so broken that hiding it from new libass automatically hides it from VSFilter.
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&H0000FF&\1a&&FF&\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\1a&&FF&\iclip(0,0,0,0)\iclip(m 0 0 l 1 0 1 1 0 1)\iclip()}You are using libass 0.10.2+ 190fb1e.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\clip(0,0,0,0)\clip(m 0 0 l 384 0 384 288 0 288)\clip()\fscx0\fsc\fscx100}You are using libass 0.10.2+ fc13f53 to 9f2ffc0.\NYour copy is outdated!
; For all of the above, just putting \fsc immediately before each } should be enough to hide the lines from old libass.
Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,{\pos(192,144)\fsc\fscx0}You are using libass 0.10.1+ 8d555a1 to 0.10.2+ c337e7a.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Old,,0,0,0,,{\pos(192,144)\r404\clip0,0,0,0}You are using libass 0.10.1+ 5523d3d.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Old,,0,0,0,,{\pos(192,144)\r*Old\clip0,0,0,0}You are using libass 0.10.1+ ed55e32 to b992975.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Old,,0,0,0,,{\pos(192,144)\clip(0,0,0,0)\iclip0,0,0,0\1a&HFF&\t(-1,0,\ \1a&H00&)}You are using libass 0.10.1+ 68c3268 or b55b225.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,0:00:10.00,Old,,0,0,0,,{\pos(192,144)\t(-1,0,\ \1a&HFF&)}You are using libass 0.10.1+ 5c9efa1 to d29915d.\NYour copy is outdated!
Dialogue: 0,0:00:00.00,9:59:59.99,Box,,0,0,0,,{\move(0,-576,0,0,-1,-1)\c&H0000FF&\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,9:59:59.99,Old,,0,0,0,,{\move(0,-576,192,144,-1,-1)}You are using libass 0.10.0+ 2ba3001 to 0.10.1+ 085666a.\NYour copy is outdated!
; 340ff8f4cbde87d2ce7d1133889e3afdd66d4e06 to
; 731e5a0503a8f430663032307244b2adde690777 to bbd6502caa2e6a023c863806c3aa63d7e3cf389d
; 071e23b7f41382fc07d657699574b24827fa240d to 5903771ec9e6a1c6840a3f48fde3fe2bde932326
; fb1109b4bdec040dab5cdb00a342557b977e9c12
; (91b0e50da385723853969b2d3814b70d21a36077) to 62275969552280956d6555f89b9a46427868d6ac
; to (7e4553211048d0cdf5f23fb7532e2d619f6edccb)
; ba0459b2a64ee2170c4c0e084633a57ec74dbfd0??
; c207000c7cdde335679b53a8cffc22bef61ffa45??
; e6c71d8a94172a11a17518387ae5f3db540490c8 to
; (758b15ecd437137bb9e794884fa8483430a0fee6) to b61d260b3e92a3fc4c0e054ad5b030182030f996
; 7af78014635dbe81c3328405aa68dd2cfef94bc4 to (7af78014635dbe81c3328405aa68dd2cfef94bc4)
; 31db1346d43e54e07bd563d8c9e6ffbdd195b84c
; 2ba300123f7e6e5b9bbc69976ca4017993af694b to 6d2b7f238ec20a88d7ced4a513c6262a0b39d9ff
; Take care to hide the following two lines from XySubFilter 3.1.0.738 to 3.1.0.745.
Dialogue: 0,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\rHidden\c&H0000FF&\1a&&FF&\p1}m 0 0 l 384 0 384 288 0 288{\p0}
Dialogue: 0,0:00:00.00,0:00:10.00,Old,,0,0,0,,{\pos(192,144)\rHidden}You are using libass 0.10.0+ 94b4c0d or older.\NYour copy is outdated!
; when \fa*\fsc* broken => "severely outdated"
Dialogue: 7,0:00:00.00,0:00:10.00,Collision,,0,0,0,,\h\N\N\N\N\N\N
Dialogue: 0000000000000007,0:00:00.00,0:00:10.00,Collision,,0,0,0,,{\1a&HFF&}\{\fscx0{\1a&H00&}\NYou are using VLC’s\N{\1a&HFF&}.{\1a}external subtitle parser.
Dialogue: 8,0:00:00.00,0:00:10.00,Collision,,0,0,0,,\h\N\N\N\N\N\N
[trick MKVToolNix into putting this in CodecPrivate and returning this here upon extraction]
Dialogue:08,0:00:00.00,0:00:10.00,Collision,,0,0,0,,You are using libass and viewing\N{\1a&HFF&}.{\1a}an MKVToolNix-made MKV.
Dialogue:0-1,0:00:00.00!,0:00:10.00,Collision,,0,0,0,,{\pos(192,56)\1a&HFF&}\{\fscx0{\1a&H00&}\NYou are using libass’s\N{\1a&HFF&}.{\1a}external subtitle parser.
Dialogue:0-1,0:00:00.00!,0:00:&HA.00,Collision,,0,0,0,\N{\1a&HFF&}\{\1a&H00&}\NYou are using VSFilter’s\N{\1a&HFF&}.{\1a}external subtitle parser.
Dialogue:0-1,0:00:00.00!,0:00:10.00,Collision,,0,0,0,You are using Perian’s\N{\fscy0}.{\fscy100}external subtitle parser.{Any alpha changes somehow turn this whole event invisible.}
; TODO: why do any non-Perian lines use \1a&H00&? is \1a not enough?
; Dialogue: 9,0:00:00.00,0:00:10.00,Box,,0,0,0,,{\pos(0,0)\c&HFFFFFF&\p1}m 0 0 l 384 0 384 288 0 288{\p0}
; Dialogue: 9,0:00:00.00,0:00:01.00,Box,,0,0,0,,{\an5\c&HFFFFFF&\t(\clip(0,0,384,144)\c&HFF0000&\frz90}A quick brown fox jumps over the lazy dog.
; Dialogue: 9,0:00:00.00,0:00:01.00,Box,,0,0,0,,{\an5\fs96\bord1\c&HFFFFFF&}{\blur10}\blur10\N{\blur0\blur(10)}\blur(10)
; Dialogue: 9,0:00:00.00,0:00:01.00,Box,,0,0,0,,{\an5\fs96\bord0.333\c&HFFFFFF&}\blur10\N\blur(10)