libcmml 0.9.4
cmml.h
Go to the documentation of this file.
1/* Copyright (C) 2003 CSIRO Australia
2
3 Redistribution and use in source and binary forms, with or without
4 modification, are permitted provided that the following conditions
5 are met:
6
7 - Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9
10 - Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in the
12 documentation and/or other materials provided with the distribution.
13
14 - Neither the name of the CSIRO nor the names of its
15 contributors may be used to endorse or promote products derived from
16 this software without specific prior written permission.
17
18 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
21 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ORGANISATION OR
22 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*/
30
31/* cmml.h */
32
33#ifndef __CMML_H__
34#define __CMML_H__
35
43#include <stdio.h>
44#include <expat.h>
45
49#ifndef _CMML_PRIVATE
50typedef void CMML;
51#endif
52
53/* ------------------------- TYPES --------------------------------- */
54/* CMML_Time and CMML_List are kept here and not in cmml_private.h */
55/* because the library user may need detailed access to these fields */
56
61typedef struct {
62 short tm_hsec;
63 short tm_sec;
64 short tm_min;
65 short tm_hour;
66 short tm_mday;
67 short tm_mon;
68 short tm_year;
70} CMML_UTC;
71
79
80
85typedef struct {
86 char *tstr;
89 union {
91 double sec;
92 } t;
93} CMML_Time;
94
95
99typedef struct _CMML_List CMML_List;
110
114typedef void * (*CMML_CloneFunc) (void * data);
115
119typedef void * (*CMML_FreeFunc) (void * data);
120
128typedef int (*CMML_CmpFunc) (void * cmp_ctx, void * s1, void * s2);
129
130
147
148
153typedef struct {
154 char *id;
155 char *name;
156 char *value;
158
175
182typedef struct {
183 char *id;
186 CMML_List * import;
188
189
194typedef struct {
195 char *id;
196 char *lang;
197 char *dir;
198 char *name;
199 char *content;
200 char *scheme;
202
207typedef struct {
208 char *id;
210 char *title;
211 char *lang;
212 char *dir;
213 char *href;
214 char *type;
215 char *rel;
216 char *rev;
217 char *media;
219
223typedef struct {
224 char *head_id;
225 char *lang;
226 char *dir;
227 char *profile;
228 char *title;
229 char *title_id;
231 char *title_dir;
232 char *base_id;
233 char *base_href;
236} CMML_Head;
237
238
273
286
287
302
303
335
340typedef struct {
342 long line;
343 long col;
344} CMML_Error;
345
357typedef int (*CMMLReadStream) (CMML *cmml, const CMML_Stream *stream,
358 void * user_data);
370typedef int (*CMMLReadHead) (CMML *cmml, const CMML_Head *head,
371 void * user_data);
372
384typedef int (*CMMLReadClip) (CMML *cmml, const CMML_Clip *clip,
385 void * user_data);
386
387
388/* ---------------------- API --------------------------------*/
389
390/* --------------------------------- *
391 * CMML parsing: functions in cmml.c *
392 * --------------------------------- */
393
404CMML * cmml_open (const char *XMLfilename);
405
417CMML * cmml_new (FILE * file);
418
427FILE * cmml_destroy (CMML * cmml);
428
438
458 void * user_data);
459
472long cmml_read (CMML *cmml, long n); /* file */
473
483void cmml_set_sloppy (CMML *cmml, int value);
484
494
504
514
524
535
546
547
553void cmml_error_clear (CMML * cmml);
554
565int cmml_set_window (CMML * cmml, CMML_Time * start, CMML_Time * end);
566
576double cmml_skip_to_secs (CMML *cmml, double seconds);
577
587double cmml_skip_to_utc (CMML *cmml, const char * utc);
588
598double cmml_skip_to_id (CMML *cmml, const char * id);
599
609double cmml_skip_to_offset (CMML *cmml, const char * offset);
610
611
612/* ---------------------------------------------------- *
613 * CMML element handling: cmml_element.c cmml_snprint.c *
614 * ---------------------------------------------------- */
615
627CMML_Preamble * cmml_preamble_new (const char *encoding, const char *id, const char *lang, const char *dir, const char *granulerate);
628
637
644
651
660CMML_Clip * cmml_clip_new (CMML_Time *start_time, CMML_Time *end_time);
661
670
679
688
697
706
715
723
731
738
745
752
759
771int cmml_preamble_snprint(char *buf, int n, CMML_Preamble *pre);
772
785int cmml_element_snprint (char *buf, int n, CMML_Element *elem);
786
797int cmml_stream_snprint (char *buf, int n, CMML_Stream *stream);
798
809int cmml_stream_pretty_snprint (char *buf, int n, CMML_Stream *stream);
810
821int cmml_head_snprint (char *buf, int n, CMML_Head *head);
822
833int cmml_head_pretty_snprint (char *buf, int n, CMML_Head *head);
834
845int cmml_clip_snprint (char *buf, int n, CMML_Clip *clip);
846
857int cmml_clip_pretty_snprint (char *buf, int n, CMML_Clip *clip);
858
870int cmml_error_snprint (char *buf, int n, CMML_Error *error, CMML *cmml);
871
872
873/* ----------------------------------------------- *
874 * helper functions for list handling: cmml_list.c *
875 * ----------------------------------------------- */
876
883
892
902
911
920CMML_List * cmml_list_prepend (CMML_List * list, void * data);
921
930CMML_List * cmml_list_append (CMML_List * list, void * data);
931
943 CMML_List * node);
955 CMML_List * node);
956
965CMML_List * cmml_list_find (CMML_List * list, void * data);
966
976
985
994
1004
1015 CMML_FreeFunc free_func);
1016
1026
1027
1028/* ----------------------------------------------- *
1029 * helper functions for time handling: cmml_time.c *
1030 * ----------------------------------------------- */
1031
1040CMML_Time * cmml_time_new (const char * s);
1041
1049CMML_Time * cmml_sec_new (const char * s);
1050
1059
1067CMML_Time * cmml_utc_new (const char * s);
1068
1082int cmml_time_interval_new (const char * s,
1083 CMML_Time ** t_start, CMML_Time ** t_end);
1084
1096CMML_Time *cmml_time_new_in_sec (const char * s, CMML_Time * ref, double base);
1097
1109
1116
1125
1133double cmml_sec_parse (const char *s);
1134
1143CMML_UTC * cmml_utc_parse (const char * s);
1144
1153
1164
1175int cmml_npt_snprint (char * buf, int n, double seconds);
1176
1187int cmml_utc_snprint (char *buf, int n, CMML_UTC *t);
1188
1199int cmml_utc_pretty_snprint (char *buf, int n, CMML_UTC *t);
1200
1201
1202
1203#endif /* __CMML_H__ */
static int read_stream(CMML *cmml, const CMML_Stream *stream, void *user_data)
Definition cmml-validate.c:133
static int read_clip(CMML *cmml, const CMML_Clip *clip, void *user_data)
Definition cmml-validate.c:189
static int read_head(CMML *cmml, const CMML_Head *head, void *user_data)
Definition cmml-validate.c:161
CMML_Head * cmml_get_last_head(CMML *cmml)
CMML_List * cmml_list_tail(CMML_List *list)
double cmml_skip_to_id(CMML *cmml, const char *id)
int cmml_head_pretty_snprint(char *buf, int n, CMML_Head *head)
int(* CMML_CmpFunc)(void *cmp_ctx, void *s1, void *s2)
Definition cmml.h:128
CMML_Time * cmml_time_new_in_sec(const char *s, CMML_Time *ref, double base)
FILE * cmml_destroy(CMML *cmml)
int cmml_head_snprint(char *buf, int n, CMML_Head *head)
CMML_Error * cmml_error_new(CMML_Error_Type type)
double cmml_skip_to_offset(CMML *cmml, const char *offset)
CMML_UTC * cmml_utc_clone(CMML_UTC *t)
CMML_Head * cmml_head_clone(CMML_Head *src)
CMML_Time * cmml_time_clone(CMML_Time *t)
CMML_List * cmml_list_add_after(CMML_List *list, void *data, CMML_List *node)
int cmml_list_length(CMML_List *list)
CMML_List * cmml_list_free(CMML_List *list)
CMML_Error * cmml_get_last_error(CMML *cmml)
CMML_Time * cmml_time_new(const char *s)
enum _CMML_Error_Type CMML_Error_Type
void cmml_stream_destroy(CMML_Stream *stream)
int cmml_time_interval_new(const char *s, CMML_Time **t_start, CMML_Time **t_end)
CMML * cmml_open(const char *XMLfilename)
void *(* CMML_FreeFunc)(void *data)
Definition cmml.h:119
double cmml_sec_parse(const char *s)
_CMML_Element_Type
Definition cmml.h:278
@ CMML_NONE
Definition cmml.h:279
@ CMML_CLIP
Definition cmml.h:284
@ CMML_STREAM
Definition cmml.h:281
@ CMML_CMML
Definition cmml.h:280
@ CMML_HEAD
Definition cmml.h:283
@ CMML_IMPORT
Definition cmml.h:282
CMML_List * cmml_list_remove(CMML_List *list, CMML_List *node)
void cmml_error_destroy(CMML_Error *error)
CMML_Preamble * cmml_preamble_new(const char *encoding, const char *id, const char *lang, const char *dir, const char *granulerate)
CMML_List * cmml_list_clone(CMML_List *list)
CMML_UTC * cmml_utc_parse(const char *s)
void cmml_element_destroy(CMML_Element *element)
void CMML
Definition cmml.h:50
int cmml_clip_snprint(char *buf, int n, CMML_Clip *clip)
int cmml_utc_snprint(char *buf, int n, CMML_UTC *t)
void cmml_clip_destroy(CMML_Clip *clip)
CMML_List * cmml_list_add_before(CMML_List *list, void *data, CMML_List *node)
CMML_Time * cmml_time_utc_to_sec(CMML_Time *t, CMML_Time *ref, double base)
CMML * cmml_new(FILE *file)
int cmml_utc_pretty_snprint(char *buf, int n, CMML_UTC *t)
double cmml_skip_to_utc(CMML *cmml, const char *utc)
int cmml_preamble_snprint(char *buf, int n, CMML_Preamble *pre)
CMML_Time * cmml_sec_new(const char *s)
int cmml_set_window(CMML *cmml, CMML_Time *start, CMML_Time *end)
CMML_Preamble * cmml_get_preamble(CMML *cmml)
CMML_List * cmml_list_clone_with(CMML_List *list, CMML_CloneFunc clone)
void cmml_set_sloppy(CMML *cmml, int value)
void *(* CMML_CloneFunc)(void *data)
Definition cmml.h:114
CMML_List * cmml_list_append(CMML_List *list, void *data)
CMML_Element * cmml_element_new(CMML_Element_Type type)
double cmml_skip_to_secs(CMML *cmml, double seconds)
_CMML_Time_Type
Definition cmml.h:75
@ CMML_UTC_TIME
Definition cmml.h:77
@ CMML_SEC_TIME
Definition cmml.h:76
_CMML_Error_Type
Definition cmml.h:312
@ CMML_EXPAT_ERROR
Definition cmml.h:320
@ CMML_DUPLICATE_STREAM
Definition cmml.h:326
@ CMML_FORMAT_ERROR
Definition cmml.h:329
@ CMML_EOF
Definition cmml.h:315
@ CMML_NONSEQUENTIAL_CLIP
Definition cmml.h:333
@ CMML_STREAM_NOT_FIRST
Definition cmml.h:324
@ CMML_OK
Definition cmml.h:314
@ CMML_READ_ERROR
Definition cmml.h:317
@ CMML_NO_HEAD_TAG
Definition cmml.h:323
@ CMML_UNKNOWN_TAG
Definition cmml.h:330
@ CMML_TIME_ERROR
Definition cmml.h:318
@ CMML_MALLOC_ERROR
Definition cmml.h:319
@ CMML_PARSE_ERROR
Definition cmml.h:321
@ CMML_XMLNS_REDEFINED
Definition cmml.h:332
@ CMML_DUPLICATE_HEAD
Definition cmml.h:327
@ CMML_HEAD_AFTER_CLIP
Definition cmml.h:325
@ CMML_TAG_IGNORED
Definition cmml.h:331
@ CMML_NO_CMML_TAG
Definition cmml.h:322
int cmml_stream_pretty_snprint(char *buf, int n, CMML_Stream *stream)
CMML_Clip * cmml_clip_clone(CMML_Clip *src)
void cmml_preamble_destroy(CMML_Preamble *preamble)
CMML_Stream * cmml_stream_clone(CMML_Stream *src)
CMML_List * cmml_list_find(CMML_List *list, void *data)
enum _CMML_Element_Type CMML_Element_Type
enum _CMML_Time_Type CMML_Time_Type
int cmml_npt_snprint(char *buf, int n, double seconds)
void cmml_time_free(CMML_Time *t)
int(* CMMLReadStream)(CMML *cmml, const CMML_Stream *stream, void *user_data)
Definition cmml.h:357
CMML * cmml_close(CMML *cmml)
CMML_Head * cmml_head_new(void)
CMML_List * cmml_list_new(void)
CMML_Time * cmml_utc_new(const char *s)
CMML_Preamble * cmml_preamble_clone(CMML_Preamble *src)
int(* CMMLReadHead)(CMML *cmml, const CMML_Head *head, void *user_data)
Definition cmml.h:370
int cmml_error_snprint(char *buf, int n, CMML_Error *error, CMML *cmml)
void cmml_error_clear(CMML *cmml)
int cmml_list_is_singleton(CMML_List *list)
int(* CMMLReadClip)(CMML *cmml, const CMML_Clip *clip, void *user_data)
Definition cmml.h:384
int cmml_stream_snprint(char *buf, int n, CMML_Stream *stream)
int cmml_element_snprint(char *buf, int n, CMML_Element *elem)
CMML_Stream * cmml_get_last_stream(CMML *cmml)
long cmml_read(CMML *cmml, long n)
CMML_Clip * cmml_get_last_clip(CMML *cmml)
CMML_List * cmml_list_prepend(CMML_List *list, void *data)
int cmml_clip_pretty_snprint(char *buf, int n, CMML_Clip *clip)
int cmml_list_is_empty(CMML_List *list)
CMML_Clip * cmml_clip_new(CMML_Time *start_time, CMML_Time *end_time)
double cmml_utc_diff(CMML_UTC *t2, CMML_UTC *t1)
CMML_Clip * cmml_get_previous_clip(CMML *cmml)
CMML_Stream * cmml_stream_new(void)
CMML_Element * cmml_element_clone(CMML_Element *src)
CMML_List * cmml_list_free_with(CMML_List *list, CMML_FreeFunc free_func)
CMML_Time * cmml_time_new_secs(double seconds)
int cmml_set_read_callbacks(CMML *cmml, CMMLReadStream read_stream, CMMLReadHead read_head, CMMLReadClip read_clip, void *user_data)
void cmml_head_destroy(CMML_Head *head)
Definition cmml.h:242
char * track
Definition cmml.h:248
char * img_src
Definition cmml.h:264
char * dir
Definition cmml.h:247
char * anchor_lang
Definition cmml.h:255
char * img_class
Definition cmml.h:260
char * img_lang
Definition cmml.h:262
CMML_Time * end_time
Definition cmml.h:250
char * desc_id
Definition cmml.h:266
char * anchor_id
Definition cmml.h:252
char * anchor_title
Definition cmml.h:254
char * anchor_class
Definition cmml.h:253
char * desc_title
Definition cmml.h:268
char * desc_text
Definition cmml.h:271
char * img_dir
Definition cmml.h:263
char * desc_lang
Definition cmml.h:269
CMML_Time * start_time
Definition cmml.h:249
char * img_alt
Definition cmml.h:265
char * desc_dir
Definition cmml.h:270
char * lang
Definition cmml.h:246
char * img_id
Definition cmml.h:259
char * title
Definition cmml.h:245
char * anchor_text
Definition cmml.h:258
char * clip_class
Definition cmml.h:244
char * anchor_href
Definition cmml.h:257
char * desc_class
Definition cmml.h:267
char * anchor_dir
Definition cmml.h:256
char * img_title
Definition cmml.h:261
CMML_List * meta
Definition cmml.h:251
char * clip_id
Definition cmml.h:243
Definition cmml.h:293
CMML_Clip * clip
Definition cmml.h:299
CMML_Stream * stream
Definition cmml.h:297
CMML_Element_Type type
Definition cmml.h:294
CMML_Head * head
Definition cmml.h:298
Definition cmml.h:340
CMML_Error_Type type
Definition cmml.h:341
long line
Definition cmml.h:342
long col
Definition cmml.h:343
Definition cmml.h:223
char * dir
Definition cmml.h:226
char * base_href
Definition cmml.h:233
char * head_id
Definition cmml.h:224
char * title_lang
Definition cmml.h:230
char * base_id
Definition cmml.h:232
CMML_List * link
Definition cmml.h:235
char * title_dir
Definition cmml.h:231
CMML_List * meta
Definition cmml.h:234
char * title
Definition cmml.h:228
char * profile
Definition cmml.h:227
char * title_id
Definition cmml.h:229
char * lang
Definition cmml.h:225
Definition cmml.h:162
char * dir
Definition cmml.h:165
char * lang
Definition cmml.h:164
CMML_Time * end_time
Definition cmml.h:170
CMML_Time * start_time
Definition cmml.h:169
CMML_List * param
Definition cmml.h:172
char * title
Definition cmml.h:171
char * contenttype
Definition cmml.h:167
char * src
Definition cmml.h:168
char * granulerate
Definition cmml.h:166
char * id
Definition cmml.h:163
Definition cmml.h:207
char * rel
Definition cmml.h:215
char * lang
Definition cmml.h:211
char * link_class
Definition cmml.h:209
char * media
Definition cmml.h:217
char * id
Definition cmml.h:208
char * type
Definition cmml.h:214
char * title
Definition cmml.h:210
char * rev
Definition cmml.h:216
char * dir
Definition cmml.h:212
char * href
Definition cmml.h:213
Definition cmml.h:194
char * id
Definition cmml.h:195
char * lang
Definition cmml.h:196
char * dir
Definition cmml.h:197
char * content
Definition cmml.h:199
char * scheme
Definition cmml.h:200
char * name
Definition cmml.h:198
Definition cmml.h:153
char * name
Definition cmml.h:155
char * id
Definition cmml.h:154
char * value
Definition cmml.h:156
Definition cmml.h:136
char * cmml_xmlns
Definition cmml.h:144
char * xml_encoding
Definition cmml.h:138
int doctype_declared
Definition cmml.h:140
char * cmml_id
Definition cmml.h:143
char * cmml_granulerate
Definition cmml.h:145
char * cmml_lang
Definition cmml.h:141
char * cmml_dir
Definition cmml.h:142
int xml_standalone
Definition cmml.h:139
char * xml_version
Definition cmml.h:137
Definition cmml.h:182
CMML_Time * utc
Definition cmml.h:185
CMML_Time * basetime
Definition cmml.h:184
char * id
Definition cmml.h:183
Definition cmml.h:85
CMML_UTC * utc
Definition cmml.h:90
CMML_Time_Type type
Definition cmml.h:87
double sec
Definition cmml.h:91
char * tstr
Definition cmml.h:86
Definition cmml.h:61
short tm_sec
Definition cmml.h:63
short tm_hour
Definition cmml.h:65
short tm_hsec
Definition cmml.h:62
short tm_mday
Definition cmml.h:66
short tm_year
Definition cmml.h:68
short tm_mon
Definition cmml.h:67
short tm_min
Definition cmml.h:64
Definition cmml.h:105
void * data
Definition cmml.h:108
CMML_List * next
Definition cmml.h:107
CMML_List * prev
Definition cmml.h:106