@@ -134,6 +134,12 @@ var ssaRegexpEffect = regexp.MustCompile(`\{[^\{]+\}`)
134
134
135
135
// ReadFromSSA parses an .ssa content
136
136
func ReadFromSSA (i io.Reader ) (o * Subtitles , err error ) {
137
+ o , err = ReadFromSSAWithOptions (i , defaultSSAOptions ())
138
+ return o , err
139
+ }
140
+
141
+ // ReadFromSSAWithOptions parses an .ssa content
142
+ func ReadFromSSAWithOptions (i io.Reader , opts SSAOptions ) (o * Subtitles , err error ) {
137
143
// Init
138
144
o = NewSubtitles ()
139
145
var scanner = bufio .NewScanner (i )
@@ -175,7 +181,9 @@ func ReadFromSSA(i io.Reader) (o *Subtitles, err error) {
175
181
format = make (map [int ]string )
176
182
continue
177
183
default :
178
- log .Printf ("astisub: unknown section: %s" , line )
184
+ if opts .OnUnknownSectionName != nil {
185
+ opts .OnUnknownSectionName (line )
186
+ }
179
187
sectionName = ssaSectionNameUnknown
180
188
continue
181
189
}
@@ -195,7 +203,9 @@ func ReadFromSSA(i io.Reader) (o *Subtitles, err error) {
195
203
// Split on ":"
196
204
var split = strings .Split (line , ":" )
197
205
if len (split ) < 2 || split [0 ] == "" {
198
- log .Printf ("astisub: not understood: '%s', ignoring" , line )
206
+ if opts .OnInvalidLine != nil {
207
+ opts .OnInvalidLine (line )
208
+ }
199
209
continue
200
210
}
201
211
var header = strings .TrimSpace (split [0 ])
@@ -1268,3 +1278,20 @@ func (s Subtitles) WriteToSSA(o io.Writer) (err error) {
1268
1278
}
1269
1279
return
1270
1280
}
1281
+
1282
+ // SSAOptions
1283
+ type SSAOptions struct {
1284
+ OnUnknownSectionName func (name string )
1285
+ OnInvalidLine func (line string )
1286
+ }
1287
+
1288
+ func defaultSSAOptions () SSAOptions {
1289
+ return SSAOptions {
1290
+ OnUnknownSectionName : func (name string ) {
1291
+ log .Printf ("astisub: unknown section: %s" , name )
1292
+ },
1293
+ OnInvalidLine : func (line string ) {
1294
+ log .Printf ("astisub: not understood: '%s', ignoring" , line )
1295
+ },
1296
+ }
1297
+ }
0 commit comments