Source file conan_subtitle.ml

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
let tree = Conan.Tree.Unsafe.node
             [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                 ?line:(Some 32)
                 (let ty = Conan.Ty.search ~compact_whitespaces:false
                             ~optional_blank:false
                             ~lower_case_insensitive:false
                             ~upper_case_insensitive:false `Text ~trim:false
                             5L ~pattern:"<?xml" in
                  Conan.Tree.Unsafe.rule
                    ~offset:(Conan.Offset.Absolute (Conan.Offset.Value 0L))
                    ty
                    (Conan.Test.string (Conan.Comparison.equal_to "<?xml"))
                    (`Space "")),
               Conan.Tree.Unsafe.node
                 [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                     ?line:(Some 33)
                     (let ty = Conan.Ty.search ~compact_whitespaces:false
                                 ~optional_blank:false
                                 ~lower_case_insensitive:false
                                 ~upper_case_insensitive:false `Text
                                 ~trim:false 400L ~pattern:"\016xmlns=" in
                      Conan.Tree.Unsafe.rule
                        ~offset:(Conan.Offset.Absolute
                                 (Conan.Offset.Value 20L))
                        ty
                        (Conan.Test.string
                           (Conan.Comparison.equal_to "\016xmlns="))
                        (`Space "")),
                   Conan.Tree.Unsafe.node
                     [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                         ?line:(Some 34)
                         (let ty = Conan.Ty.regex
                                     ~case_insensitive:false ~start:false
                                     ~limit:8192L `Byte in
                          Conan.Tree.Unsafe.rule
                            ~offset:(Conan.Offset.Relative
                                     (Conan.Offset.Value 0L))
                            ty
                            (Conan.Test.regex
                               (Conan.Comparison.equal_to
                                  (Re.seq
                                     [Re.alt [Re.set "\""; Re.set "'"];
                                      Re.set "h"; Re.set "t"; Re.set "t";
                                      Re.set "p"; Re.set ":"; Re.set "/";
                                      Re.set "/"; Re.set "w"; Re.set "w";
                                      Re.set "w"; Re.set "\000"; Re.set "w";
                                      Re.set "3"; Re.set "\000"; Re.set "o";
                                      Re.set "r"; Re.set "g"; Re.set "/";
                                      Re.set "n"; Re.set "s"; Re.set "/";
                                      Re.set "t"; Re.set "t"; Re.set "m";
                                      Re.set "l"])))
                            (`Space "TTML subtitles")),
                       Conan.Tree.Unsafe.node
                         [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                             ?line:(Some 35)
                             (Conan.Tree.Unsafe.mime "application/ttml+xml"),
                           Conan.Tree.Unsafe.node
                             [(Conan.Tree.Unsafe.elt
                                 ?filename:(Some "subtitle") ?line:(Some 38)
                                 (Conan.Tree.Unsafe.extension ["ttml"]),
                               Conan.Tree.Unsafe.leaf)])])])]);
              (Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                 ?line:(Some 25)
                 (let ty = Conan.Ty.search ~compact_whitespaces:false
                             ~optional_blank:false
                             ~lower_case_insensitive:false
                             ~upper_case_insensitive:false `Text ~trim:false
                             6L ~pattern:"WEBVTT" in
                  Conan.Tree.Unsafe.rule
                    ~offset:(Conan.Offset.Absolute (Conan.Offset.Value 0L))
                    ty
                    (Conan.Test.string (Conan.Comparison.equal_to "WEBVTT"))
                    (`Space "")),
               Conan.Tree.Unsafe.node
                 [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                     ?line:(Some 26)
                     (let ty = Conan.Ty.regex
                                 ~case_insensitive:false ~start:false
                                 ~limit:255L `Byte in
                      Conan.Tree.Unsafe.rule
                        ~offset:(Conan.Offset.Relative
                                 (Conan.Offset.Value 0L))
                        ty
                        (Conan.Test.regex
                           (Conan.Comparison.equal_to
                              (Re.seq
                                 [Re.repn (Re.nest (Re.set "0")) 2 (Some 2);
                                  Re.set ":";
                                  Re.repn (Re.nest (Re.set "0")) 2 (Some 2);
                                  Re.set ".";
                                  Re.repn (Re.nest (Re.set "0")) 3 (Some 3);
                                  Re.set " "; Re.set "-"; Re.set "-";
                                  Re.set ">"])))
                        (`Space "WebVTT subtitles")),
                   Conan.Tree.Unsafe.node
                     [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                         ?line:(Some 27) (Conan.Tree.Unsafe.mime "text/vtt"),
                       Conan.Tree.Unsafe.node
                         [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                             ?line:(Some 28)
                             (Conan.Tree.Unsafe.extension ["vtt"]),
                           Conan.Tree.Unsafe.leaf)])])]);
              (Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                 ?line:(Some 19)
                 (let ty = Conan.Ty.regex
                             ~case_insensitive:false ~start:false ~limit:20L
                             `Byte in
                  Conan.Tree.Unsafe.rule
                    ~offset:(Conan.Offset.Absolute (Conan.Offset.Value 0L))
                    ty
                    (Conan.Test.regex
                       (Conan.Comparison.equal_to
                          (Re.seq
                             [Re.bos; Re.set "1";
                              Re.repn
                                (Re.nest (Re.alt [Re.set "\n"; Re.set "\r"]))
                                1 (None);
                              Re.set "0"; Re.alt [Re.set "1"; Re.set "0"];
                              Re.set ":";
                              Re.repn (Re.nest (Re.set "0")) 2 (Some 2);
                              Re.set ":";
                              Re.repn (Re.nest (Re.set "0")) 2 (Some 2);
                              Re.set ",";
                              Re.repn (Re.nest (Re.set "0")) 3 (Some 3);
                              Re.set " "; Re.set "-"; Re.set "-"; Re.set ">"])))
                    (`Space " SubRip")),
               Conan.Tree.Unsafe.node
                 [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                     ?line:(Some 20)
                     (Conan.Tree.Unsafe.mime "application/x-subrip"),
                   Conan.Tree.Unsafe.node
                     [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                         ?line:(Some 21)
                         (Conan.Tree.Unsafe.extension ["srt"]),
                       Conan.Tree.Unsafe.leaf)])]);
              (Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                 ?line:(Some 8)
                 (let ty = Conan.Ty.search ~compact_whitespaces:false
                             ~optional_blank:false
                             ~lower_case_insensitive:false
                             ~upper_case_insensitive:false `Text ~trim:false
                             3L ~pattern:"STL" in
                  Conan.Tree.Unsafe.rule
                    ~offset:(Conan.Offset.Absolute (Conan.Offset.Value 3L))
                    ty (Conan.Test.string (Conan.Comparison.equal_to "STL"))
                    (`Space "EBU-STL subtitles")),
               Conan.Tree.Unsafe.node
                 [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                     ?line:(Some 9)
                     (let ty = Conan.Ty.regex
                                 ~case_insensitive:false ~start:false
                                 ~limit:8192L `Byte in
                      Conan.Tree.Unsafe.rule
                        ~offset:(Conan.Offset.Absolute
                                 (Conan.Offset.Value 6L))
                        ty
                        (Conan.Test.regex
                           (Conan.Comparison.equal_to
                              (Re.seq [Re.bos; Re.set "0"; Re.set "0"])))
                        (`No_space ", rate %s")),
                   Conan.Tree.Unsafe.node
                     [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                         ?line:(Some 10)
                         (let ty = Conan.Ty.search ~compact_whitespaces:false
                                     ~optional_blank:false
                                     ~lower_case_insensitive:false
                                     ~upper_case_insensitive:false `Text
                                     ~trim:false 3L ~pattern:".01" in
                          Conan.Tree.Unsafe.rule
                            ~offset:(Conan.Offset.Absolute
                                     (Conan.Offset.Value 8L))
                            ty
                            (Conan.Test.string
                               (Conan.Comparison.equal_to ".01"))
                            (`No_space ", v1")),
                       Conan.Tree.Unsafe.node
                         [(Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                             ?line:(Some 12)
                             (let ty = Conan.Ty.regex
                                         ~case_insensitive:false ~start:false
                                         ~limit:8192L `Byte in
                              Conan.Tree.Unsafe.rule
                                ~offset:(Conan.Offset.Absolute
                                         (Conan.Offset.Value 16L))
                                ty
                                (Conan.Test.regex
                                   (Conan.Comparison.equal_to
                                      (Re.seq
                                         [Re.bos;
                                          Re.repn
                                            (Re.nest (Re.diff
                                                        (Re.compl
                                                           [Re.set " "])
                                                        (Re.set "\n")))
                                            0 (Some 32)])))
                                (`No_space ", title \"%s\"")),
                           Conan.Tree.Unsafe.node
                             [(Conan.Tree.Unsafe.elt
                                 ?filename:(Some "subtitle") ?line:(Some 13)
                                 (let ty = Conan.Ty.regex
                                             ~case_insensitive:false ~start:false
                                             ~limit:8192L `Byte in
                                  Conan.Tree.Unsafe.rule
                                    ~offset:(Conan.Offset.Absolute
                                             (Conan.Offset.Value 224L))
                                    ty
                                    (Conan.Test.regex
                                       (Conan.Comparison.equal_to
                                          (Re.seq
                                             [Re.bos;
                                              Re.repn (Re.nest (Re.set "0"))
                                                2 (Some 2)])))
                                    (`No_space ", created %-.2s")),
                               Conan.Tree.Unsafe.node
                                 [(Conan.Tree.Unsafe.elt
                                     ?filename:(Some "subtitle")
                                     ?line:(Some 14)
                                     (let ty = Conan.Ty.regex
                                                 ~case_insensitive:false ~start:false
                                                 ~limit:8192L `Byte in
                                      Conan.Tree.Unsafe.rule
                                        ~offset:(Conan.Offset.Relative
                                                 (Conan.Offset.Value 0L))
                                        ty
                                        (Conan.Test.regex
                                           (Conan.Comparison.equal_to
                                              (Re.seq
                                                 [Re.bos;
                                                  Re.repn
                                                    (Re.nest (Re.set "0")) 2
                                                    (Some 2)])))
                                        (`No_space "-%-.2s")),
                                   Conan.Tree.Unsafe.node
                                     [(Conan.Tree.Unsafe.elt
                                         ?filename:(Some "subtitle")
                                         ?line:(Some 15)
                                         (let ty = Conan.Ty.regex
                                                     ~case_insensitive:false ~start:false
                                                     ~limit:8192L `Byte in
                                          Conan.Tree.Unsafe.rule
                                            ~offset:(Conan.Offset.Relative
                                                     (Conan.Offset.Value 0L))
                                            ty
                                            (Conan.Test.regex
                                               (Conan.Comparison.equal_to
                                                  (Re.seq
                                                     [Re.bos;
                                                      Re.repn
                                                        (Re.nest (Re.set "0"))
                                                        2 (Some 2)])))
                                            (`No_space "-%-.2s")),
                                       Conan.Tree.Unsafe.node
                                         [(Conan.Tree.Unsafe.elt
                                             ?filename:(Some "subtitle")
                                             ?line:(Some 16)
                                             (Conan.Tree.Unsafe.extension
                                                ["stl"]),
                                           Conan.Tree.Unsafe.leaf)])])])]);
                          (Conan.Tree.Unsafe.elt ?filename:(Some "subtitle")
                             ?line:(Some 11)
                             (Conan.Tree.Unsafe.mime "application/x-ebu-stl"),
                           Conan.Tree.Unsafe.leaf)])])])]