libkate  0.3.8
kate.h
Go to the documentation of this file.
1 /* Copyright (C) 2008, 2009 Vincent Penquerc'h.
2  This file is part of the Kate codec library.
3  Written by Vincent Penquerc'h.
4 
5  Use, distribution and reproduction of this library is governed
6  by a BSD style source license included with this source in the
7  file 'COPYING'. Please read these terms before distributing. */
8 
9 
10 #ifndef KATE_kate_h_GUARD
11 #define KATE_kate_h_GUARD
12 
17 #include "kate/kate_config.h"
18 
21 #define KATE_VERSION_MAJOR 0
22 #define KATE_VERSION_MINOR 3
23 #define KATE_VERSION_PATCH 8
28 #define KATE_BITSTREAM_VERSION_MAJOR 0
29 #define KATE_BITSTREAM_VERSION_MINOR 5
33 typedef enum {
36 
38 typedef enum {
42 
44 typedef enum {
49 
51 typedef struct kate_region {
53  int x;
54  int y;
55  int w;
56  int h;
57  int style;
58  unsigned int clip:1;
59  unsigned int pad0:31;
60  kate_uintptr_t pad1[6];
61 } kate_region;
62 
64 typedef struct kate_color {
65  unsigned char r;
66  unsigned char g;
67  unsigned char b;
68  unsigned char a;
69 } kate_color;
70 
72 typedef enum {
76 
78 typedef struct kate_style {
79  kate_float halign;
80  kate_float valign;
87  kate_float font_width;
88  kate_float font_height;
91  kate_float left_margin;
92  kate_float top_margin;
93  kate_float right_margin;
94  kate_float bottom_margin;
96  unsigned int bold:1;
97  unsigned int italics:1;
98  unsigned int underline:1;
99  unsigned int strike:1;
100  unsigned int justify:1;
101  unsigned int wrap_mode:2;
102  unsigned int pad0:25;
103 
104  kate_const char *font;
106  kate_uintptr_t pad1[9];
107 } kate_style;
108 
110 typedef enum kate_curve_type {
118 
120 typedef struct kate_curve {
122  size_t npts;
123  kate_float *pts;
124  kate_uintptr_t pad[5];
125 } kate_curve;
126 
128 typedef enum kate_motion_mapping {
129  /* these can be used for a x/y position mapping */
137 #if 0
138  text is useful, find a way to readd it easily
139  kate_motion_mapping_text,
140 #endif
141 
142  /* more mapping may be added in future versions */
143 
146 
148 typedef enum kate_motion_semantics {
190  /* more semantics may be added in future versions */
191 
194 
196 typedef struct kate_motion {
197  size_t ncurves;
199  kate_float *durations;
203  unsigned int periodic:1;
204  unsigned int pad0:31;
205  kate_uintptr_t pad1[5];
206 } kate_motion;
207 
215 
217 typedef struct kate_palette {
218  size_t ncolors;
220  kate_uintptr_t pad[2];
221 } kate_palette;
222 
224 typedef enum kate_bitmap_type {
228 
230 typedef struct kate_bitmap {
231  size_t width;
232  size_t height;
233  unsigned char bpp;
235  unsigned char pad0[2];
236  int palette;
237  unsigned char *pixels;
238  size_t size;
239  int x_offset;
240  int y_offset;
241 } kate_bitmap;
242 
244 typedef struct kate_font_range {
248  kate_uintptr_t pad[5];
250 
252 typedef struct kate_font_mapping {
253  size_t nranges;
255  kate_uintptr_t pad[6];
257 
263 typedef struct kate_info {
264  unsigned char bitstream_version_major;
265  unsigned char bitstream_version_minor;
266  unsigned char pad0[2];
267 
271  unsigned char num_headers;
272  unsigned char granule_shift;
273  unsigned char pad1[2];
274 
275  kate_uint32_t gps_numerator;
276  kate_uint32_t gps_denominator;
278  kate_const char *language;
280  kate_const char *category;
282  size_t nregions;
283  kate_const kate_region *kate_const *regions;
285  size_t nstyles;
286  kate_const kate_style *kate_const *styles;
288  size_t ncurves;
289  kate_const kate_curve *kate_const *curves;
291  size_t nmotions;
292  kate_const kate_motion *kate_const *motions;
294  size_t npalettes;
295  kate_const kate_palette *kate_const *palettes;
297  size_t nbitmaps;
298  kate_const kate_bitmap *kate_const *bitmaps;
300  size_t nfont_ranges;
301  kate_const kate_font_range *kate_const *font_ranges;
303  size_t nfont_mappings;
304  kate_const kate_font_mapping *kate_const *font_mappings;
311  kate_uintptr_t pad2[11];
312 
313  /* internal */
314  int remove_markup;
315  int no_limits;
316  int probe;
317 
318  kate_uintptr_t pad3[13];
319 } kate_info;
320 
321 struct kate_encode_state; /* internal */
322 struct kate_decode_state; /* internal */
323 
325 typedef struct kate_state {
326  kate_const kate_info *ki;
328  /* internal */
329  kate_const struct kate_encode_state *kes;
330  kate_const struct kate_decode_state *kds;
331 
332  kate_uintptr_t pad[5];
333 } kate_state;
334 
336 typedef struct kate_comment {
337  char **user_comments;
339  int comments;
340  char *vendor;
341 } kate_comment;
342 
347 typedef struct kate_event {
348  kate_int64_t start;
349  kate_int64_t duration;
350  kate_int64_t backlink;
352  kate_float start_time;
353  kate_float end_time;
355  kate_int32_t id;
359  kate_const char *language;
360  kate_const char *text;
361  size_t len;
362  size_t len0;
364  size_t nmotions;
365  kate_const kate_motion *kate_const *motions;
367  kate_const kate_region *region;
368  kate_const kate_style *style;
371  kate_const kate_palette *palette;
372  kate_const kate_bitmap *bitmap;
376  size_t nbitmaps;
377  kate_const kate_bitmap *kate_const *bitmaps;
379  kate_uintptr_t pad0[6];
380 
381  /* internal */
382  const kate_info *ki;
383  size_t trackers;
384 
385  kate_uintptr_t pad1[10];
386 } kate_event;
387 
388 struct kate_tracker_internal; /* internal */
389 
391 typedef struct kate_tracker {
392  const kate_info *ki;
393  kate_const kate_event *event;
394  kate_float t;
396  struct {
397  unsigned int region:1;
398  unsigned int text_alignment_int:1;
399  unsigned int text_alignment_ext:1;
400  unsigned int text_pos:1;
401  unsigned int text_size:1;
402  unsigned int marker_pos:4;
403  unsigned int text_color:1;
404  unsigned int background_color:1;
405  unsigned int draw_color:1;
406  unsigned int glyph_pointer:4;
407  unsigned int path:1;
408  unsigned int draw:1;
409  unsigned int visible_section:1;
410  unsigned int z:1;
411  unsigned int hmargins:1;
412  unsigned int vmargins:1;
413  unsigned int bitmap_pos:1;
414  unsigned int bitmap_size:1;
415  unsigned int marker_bitmap:4;
416  unsigned int glyph_pointer_bitmap:4;
417  unsigned int draw_width:1;
418  /* 33 bits */
419  unsigned int pad0:31;
420  /* 64 bits */
421  } has;
423  int window_w;
424  int window_h;
425  int frame_x;
426  int frame_y;
427  int frame_w;
428  int frame_h;
430  /* has.region */
431  kate_float region_x;
432  kate_float region_y;
433  kate_float region_w;
434  kate_float region_h;
436  /* has.text_alignment (int/ext) */
437  kate_float text_halign;
438  kate_float text_valign;
440  /* has.text_pos */
441  kate_float text_x;
442  kate_float text_y;
444  /* has.text_size */
445  kate_float text_size_x;
446  kate_float text_size_y;
448  /* has.marker_pos&(1<<n) */
449  kate_float marker_x[4];
450  kate_float marker_y[4];
452  /* has.text_color */
455  /* has.background_color */
458  /* has.draw_color */
461  /* has.glyph_pointer&(1<<n) */
462  kate_float glyph_pointer[4];
463  kate_float glyph_height[4];
465  /* has.path */
466  kate_float path_start;
467  kate_float path_end;
469  /* has.draw */
470  kate_float draw_x;
471  kate_float draw_y;
473  /* has.visible_section */
474  kate_float visible_x;
475  kate_float visible_y;
477  /* has.z */
478  kate_float z;
480  /* has.hmargins */
481  kate_float left_margin;
482  kate_float right_margin;
484  /* has.vmargins */
485  kate_float top_margin;
486  kate_float bottom_margin;
488  /* has.bitmap_pos */
489  kate_float bitmap_x;
490  kate_float bitmap_y;
492  /* has.bitmap_size */
493  kate_float bitmap_size_x;
494  kate_float bitmap_size_y;
496  /* has.marker_bitmap&(1<<n) */
499  /* has.glyph_pointer_bitmap&(1<<n) */
502  /* has.draw_width */
503  kate_float draw_width;
505  /* internal */
506  struct kate_tracker_internal *internal;
507 
508  kate_uintptr_t pad[19];
509 
510 } kate_tracker;
511 
513 typedef struct kate_packet {
514  size_t nbytes;
515  void *data;
516 } kate_packet;
517 
518 #ifdef __cplusplus
519 extern "C" {
520 #endif
521 
523 extern int kate_get_version(void);
524 extern const char *kate_get_version_string(void);
525 extern int kate_get_bitstream_version(void);
526 extern const char *kate_get_bitstream_version_string(void);
527 
529 extern int kate_info_init(kate_info *ki);
530 extern int kate_info_set_granule_encoding(kate_info *ki,kate_float resolution,kate_float max_length,kate_float max_event_lifetime);
531 extern int kate_info_set_language(kate_info *ki,const char *language);
532 extern int kate_info_set_text_directionality(kate_info *ki,kate_text_directionality text_directionality);
533 extern int kate_info_set_markup_type(kate_info *ki,kate_markup_type text_markup_type);
534 extern int kate_info_set_category(kate_info *ki,const char *category);
535 extern int kate_info_set_original_canvas_size(kate_info *ki,size_t width,size_t height);
536 extern int kate_info_add_region(kate_info *ki,kate_region *kr);
537 extern int kate_info_add_style(kate_info *ki,kate_style *ks);
538 extern int kate_info_add_curve(kate_info *ki,kate_curve *kc);
539 extern int kate_info_add_motion(kate_info *ki,kate_motion *km);
540 extern int kate_info_add_palette(kate_info *ki,kate_palette *kp);
541 extern int kate_info_add_bitmap(kate_info *ki,kate_bitmap *kb);
544 extern int kate_info_matches_language(const kate_info *ki,const char *language);
545 extern int kate_info_remove_markup(kate_info *ki,int flag);
546 extern int kate_info_no_limits(kate_info *ki,int flag);
547 extern int kate_info_clear(kate_info *ki);
548 
550 extern int kate_granule_shift(const kate_info *ki);
551 extern int kate_granule_split_time(const kate_info *ki,kate_int64_t granulepos,kate_float *base,kate_float *offset);
552 extern kate_float kate_granule_time(const kate_info *ki,kate_int64_t granulepos);
553 extern kate_int64_t kate_duration_granule(const kate_info *ki,kate_float duration);
554 extern kate_float kate_granule_duration(const kate_info *ki,kate_int64_t duration);
555 
557 extern int kate_clear(kate_state *k);
558 extern int kate_motion_get_point(const kate_motion *km,kate_float duration,kate_float t,kate_float *x,kate_float *y);
559 extern int kate_curve_get_point(const kate_curve *kc,kate_float t,kate_float *x,kate_float *y);
560 extern int kate_region_init(kate_region *kr);
561 extern int kate_style_init(kate_style *ks);
562 extern int kate_palette_init(kate_palette *kp);
563 extern int kate_bitmap_init(kate_bitmap *kb);
564 extern int kate_curve_init(kate_curve *kc);
565 extern int kate_motion_init(kate_motion *km);
566 
568 extern int kate_text_get_character(kate_text_encoding text_encoding,const char ** const text,size_t *len0);
569 extern int kate_text_set_character(kate_text_encoding text_encoding,int c,char ** const text,size_t *len0);
570 extern int kate_text_remove_markup(kate_text_encoding text_encoding,char *text,size_t *len0);
571 extern int kate_text_validate(kate_text_encoding text_encoding,const char *text,size_t len0);
572 
574 extern int kate_comment_init(kate_comment *kc);
575 extern int kate_comment_clear(kate_comment *kc);
576 extern int kate_comment_add(kate_comment *kc,const char *comment);
577 extern int kate_comment_add_length(kate_comment *kc,const char *comment,size_t len);
578 extern int kate_comment_add_tag(kate_comment *kc,const char *tag,const char *value);
579 extern const char *kate_comment_query(const kate_comment *kc,const char *tag,int count);
580 extern int kate_comment_query_count(const kate_comment *kc,const char *tag);
581 
583 extern int kate_encode_init(kate_state *k,kate_info *ki);
585 extern int kate_encode_text(kate_state *k,kate_float start_time,kate_float stop_time,const char *text,size_t sz,kate_packet *kp); /* text is not null terminated */
586 extern int kate_encode_text_raw_times(kate_state *k,kate_int64_t start_time,kate_int64_t stop_time,const char *text,size_t sz,kate_packet *kp); /* text is not null terminated */
587 extern int kate_encode_keepalive(kate_state *k,kate_float t,kate_packet *kp);
588 extern int kate_encode_keepalive_raw_times(kate_state *k,kate_int64_t t,kate_packet *kp);
589 extern int kate_encode_repeat(kate_state *k,kate_float t,kate_float threshold,kate_packet *kp);
590 extern int kate_encode_repeat_raw_times(kate_state *k,kate_int64_t t,kate_int64_t threshold,kate_packet *kp);
591 extern int kate_encode_finish(kate_state *k,kate_float t,kate_packet *kp); /* t may be negative to use the end granule of the last event */
592 extern int kate_encode_finish_raw_times(kate_state *k,kate_int64_t t,kate_packet *kp); /* t may be negative to use the end granule of the last event */
593 extern int kate_encode_set_id(kate_state *k,kate_int32_t id);
594 extern int kate_encode_set_language(kate_state *k,const char *language); /* language can be NULL */
595 extern int kate_encode_set_text_encoding(kate_state *k,kate_text_encoding text_encoding);
597 extern int kate_encode_set_region_index(kate_state *k,size_t region);
598 extern int kate_encode_set_region(kate_state *k,const kate_region *kr);
599 extern int kate_encode_set_style_index(kate_state *k,size_t style);
600 extern int kate_encode_set_style(kate_state *k,const kate_style *ks);
601 extern int kate_encode_set_secondary_style_index(kate_state *k,size_t style);
602 extern int kate_encode_set_secondary_style(kate_state *k,const kate_style *ks);
603 extern int kate_encode_set_font_mapping_index(kate_state *k,size_t font_mapping);
604 extern int kate_encode_add_motion(kate_state *k,kate_motion *km,int destroy);
605 extern int kate_encode_add_motion_index(kate_state *k,size_t motion);
606 extern int kate_encode_set_palette_index(kate_state *k,size_t palette);
607 extern int kate_encode_set_palette(kate_state *k,const kate_palette *kp);
608 extern int kate_encode_set_bitmap_index(kate_state *k,size_t bitmap);
609 extern int kate_encode_set_bitmap(kate_state *k,const kate_bitmap *kb);
610 extern int kate_encode_add_bitmap(kate_state *k,const kate_bitmap *kb);
611 extern int kate_encode_add_bitmap_index(kate_state *k,size_t bitmap);
612 extern int kate_encode_set_markup_type(kate_state *k,int markup_type);
613 extern kate_int64_t kate_encode_get_granule(const kate_state *k);
614 
616 extern int kate_decode_is_idheader(const kate_packet *kp);
617 extern int kate_decode_init(kate_state *k,kate_info *ki);
619 extern int kate_decode_packetin(kate_state *k,kate_packet *kp);
620 extern int kate_decode_eventout(kate_state *k,kate_const kate_event **ev); /* event can be NULL */
621 extern int kate_decode_seek(kate_state *k);
622 
624 extern int kate_tracker_init(kate_tracker *kin,const kate_info *ki,kate_const kate_event *ev);
625 extern int kate_tracker_clear(kate_tracker *kin);
626 extern int kate_tracker_update(kate_tracker *kin,kate_float t,int window_w,int window_h,int frame_x,int frame_y,int frame_w,int frame_h);
627 extern int kate_tracker_morph_styles(kate_style *style,kate_float t,const kate_style *from,const kate_style *to);
628 extern int kate_tracker_get_text_path_position(kate_tracker *kin,size_t glyph,int *x,int *y);
629 extern int kate_tracker_update_property_at_duration(const kate_tracker *kin,kate_float duration,kate_float t,kate_motion_semantics semantics,kate_float *x,kate_float *y);
630 extern int kate_tracker_remap(const kate_tracker *kin,kate_motion_mapping x_mapping,kate_motion_mapping y_mapping,kate_float *x,kate_float *y);
631 
633 extern int kate_font_get_index_from_code_point(const kate_font_mapping *kfm,int c);
634 
636 extern int kate_high_decode_init(kate_state *k);
637 extern int kate_high_decode_packetin(kate_state *k,kate_packet *kp,kate_const kate_event **ev);
638 extern int kate_high_decode_clear(kate_state *k);
640 
642 extern int kate_packet_wrap(kate_packet *kp,size_t nbytes,const void *data);
643 extern int kate_packet_init(kate_packet *kp,size_t nbytes,const void *data);
644 extern int kate_packet_clear(kate_packet *kp);
645 
646 #ifdef __cplusplus
647 }
648 #endif
649 
652 #define KATE_E_NOT_FOUND (-1)
653 #define KATE_E_INVALID_PARAMETER (-2)
654 #define KATE_E_OUT_OF_MEMORY (-3)
655 #define KATE_E_BAD_GRANULE (-4)
656 #define KATE_E_INIT (-5)
657 #define KATE_E_BAD_PACKET (-6)
658 #define KATE_E_TEXT (-7)
659 #define KATE_E_LIMIT (-8)
660 #define KATE_E_VERSION (-9)
661 #define KATE_E_NOT_KATE (-10)
662 #define KATE_E_BAD_TAG (-11)
663 #define KATE_E_IMPL (-12)
666 #endif
667