00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _KATE_CODEC_H_
00011 #define _KATE_CODEC_H_
00012
00017 #include <stddef.h>
00018 #include <stdint.h>
00019
00020 #ifdef KATE_INTERNAL
00021 #define kate_const
00022 #else
00023 #define kate_const const
00024 #endif
00025
00026 typedef int32_t kate_int32_t;
00027 typedef int64_t kate_int64_t;
00028 typedef float kate_float;
00029
00032 #define KATE_VERSION_MAJOR 0
00033 #define KATE_VERSION_MINOR 1
00034 #define KATE_VERSION_PATCH 6
00039 #define KATE_BITSTREAM_VERSION_MAJOR 0
00040 #define KATE_BITSTREAM_VERSION_MINOR 3
00043 #ifndef kate_malloc
00044 #define kate_malloc malloc
00045 #endif
00046 #ifndef kate_realloc
00047 #define kate_realloc realloc
00048 #endif
00049 #ifndef kate_free
00050 #define kate_free free
00051 #endif
00052
00054 typedef enum {
00055 kate_utf8
00056 } kate_text_encoding;
00057
00059 typedef enum {
00060 kate_markup_none,
00061 kate_markup_simple
00062 } kate_markup_type;
00063
00065 typedef enum {
00066 kate_pixel,
00067 kate_percentage,
00068 kate_millionths
00069 } kate_space_metric;
00070
00072 typedef struct kate_region {
00073 kate_space_metric metric;
00074 int x;
00075 int y;
00076 int w;
00077 int h;
00078 int style;
00079 uint32_t clip:1;
00080 uint32_t pad0:31;
00081 uintptr_t pad1[6];
00082 } kate_region;
00083
00085 typedef struct kate_color {
00086 unsigned char r;
00087 unsigned char g;
00088 unsigned char b;
00089 unsigned char a;
00090 } kate_color;
00091
00093 typedef struct kate_style {
00094 kate_float halign;
00095 kate_float valign;
00097 kate_color text_color;
00098 kate_color background_color;
00099 kate_color draw_color;
00101 kate_space_metric font_metric;
00102 kate_float font_width;
00103 kate_float font_height;
00105 kate_space_metric margin_metric;
00106 kate_float left_margin;
00107 kate_float top_margin;
00108 kate_float right_margin;
00109 kate_float bottom_margin;
00111 uint32_t bold:1;
00112 uint32_t italics:1;
00113 uint32_t underline:1;
00114 uint32_t strike:1;
00115 uint32_t justify:1;
00116 uint32_t pad0:27;
00117
00118 kate_const char *font;
00120 uintptr_t pad1[9];
00121 } kate_style;
00122
00124 typedef enum kate_curve_type {
00125 kate_curve_none,
00126 kate_curve_static,
00127 kate_curve_linear,
00128 kate_curve_catmull_rom_spline,
00129 kate_curve_bezier_cubic_spline,
00130 kate_curve_bspline
00131 } kate_curve_type;
00132
00134 typedef struct kate_curve {
00135 kate_curve_type type;
00136 size_t npts;
00137 kate_float *pts;
00138 uintptr_t pad[5];
00139 } kate_curve;
00140
00142 typedef enum kate_motion_mapping {
00143
00144 kate_motion_mapping_none,
00145 kate_motion_mapping_frame,
00146 kate_motion_mapping_window,
00147 kate_motion_mapping_region,
00148 kate_motion_mapping_event_duration,
00149 kate_motion_mapping_bitmap_size,
00151 #if 0
00152 text is useful, find a way to readd it easily
00153 kate_motion_mapping_text,
00154 #endif
00155
00156
00157
00158 kate_motion_mapping_user=128
00159 } kate_motion_mapping;
00160
00162 typedef enum kate_motion_semantics {
00163 kate_motion_semantics_time,
00164 kate_motion_semantics_z,
00165 kate_motion_semantics_region_position,
00166 kate_motion_semantics_region_size,
00167 kate_motion_semantics_text_alignment_int,
00168 kate_motion_semantics_text_alignment_ext,
00169 kate_motion_semantics_text_position,
00170 kate_motion_semantics_text_size,
00171 kate_motion_semantics_marker1_position,
00172 kate_motion_semantics_marker2_position,
00173 kate_motion_semantics_marker3_position,
00174 kate_motion_semantics_marker4_position,
00175 kate_motion_semantics_glyph_pointer_1,
00176 kate_motion_semantics_glyph_pointer_2,
00177 kate_motion_semantics_glyph_pointer_3,
00178 kate_motion_semantics_glyph_pointer_4,
00179 kate_motion_semantics_text_color_rg,
00180 kate_motion_semantics_text_color_ba,
00181 kate_motion_semantics_background_color_rg,
00182 kate_motion_semantics_background_color_ba,
00183 kate_motion_semantics_draw_color_rg,
00184 kate_motion_semantics_draw_color_ba,
00185 kate_motion_semantics_style_morph,
00186 kate_motion_semantics_text_path,
00187 kate_motion_semantics_text_path_section,
00188 kate_motion_semantics_draw,
00189 kate_motion_semantics_text_visible_section,
00190 kate_motion_semantics_horizontal_margins,
00191 kate_motion_semantics_vertical_margins,
00192 kate_motion_semantics_bitmap_position,
00193 kate_motion_semantics_bitmap_size,
00195
00196
00197 kate_motion_semantics_user = 128
00198 } kate_motion_semantics;
00199
00201 typedef struct kate_motion {
00202 size_t ncurves;
00203 kate_curve **curves;
00204 kate_float *durations;
00205 kate_motion_mapping x_mapping;
00206 kate_motion_mapping y_mapping;
00207 kate_motion_semantics semantics;
00208 uint32_t periodic:1;
00209 uint32_t pad0:31;
00210 uintptr_t pad1[5];
00211 } kate_motion;
00212
00214 typedef enum kate_text_directionality {
00215 kate_l2r_t2b,
00216 kate_r2l_t2b,
00217 kate_t2b_r2l,
00218 kate_t2b_l2r
00219 } kate_text_directionality;
00220
00222 typedef struct kate_palette {
00223 size_t ncolors;
00224 kate_color *colors;
00225 uintptr_t pad[2];
00226 } kate_palette;
00227
00229 typedef enum kate_bitmap_type {
00230 kate_bitmap_type_paletted,
00231 kate_bitmap_type_png
00232 } kate_bitmap_type;
00233
00235 typedef struct kate_bitmap {
00236 size_t width;
00237 size_t height;
00238 unsigned char bpp;
00239 kate_bitmap_type type;
00240 unsigned char pad0[2];
00241 int palette;
00242 unsigned char *pixels;
00243 size_t size;
00244 uintptr_t pad1[2];
00245 } kate_bitmap;
00246
00248 typedef struct kate_font_range {
00249 int first_code_point;
00250 int last_code_point;
00251 int first_bitmap;
00252 uintptr_t pad[5];
00253 } kate_font_range;
00254
00256 typedef struct kate_font_mapping {
00257 size_t nranges;
00258 kate_font_range **ranges;
00259 uintptr_t pad[6];
00260 } kate_font_mapping;
00261
00267 typedef struct kate_info {
00268 unsigned char bitstream_version_major;
00269 unsigned char bitstream_version_minor;
00270 unsigned char pad0[2];
00271
00272 kate_text_encoding text_encoding;
00273 kate_text_directionality text_directionality;
00275 unsigned char num_headers;
00276 unsigned char granule_shift;
00277 unsigned char pad1[2];
00278
00279 kate_int32_t gps_numerator;
00280 kate_int32_t gps_denominator;
00282 kate_const char *language;
00284 kate_const char *category;
00286 size_t nregions;
00287 kate_const kate_region *kate_const *regions;
00289 size_t nstyles;
00290 kate_const kate_style *kate_const *styles;
00292 size_t ncurves;
00293 kate_const kate_curve *kate_const *curves;
00295 size_t nmotions;
00296 kate_const kate_motion *kate_const *motions;
00298 size_t npalettes;
00299 kate_const kate_palette *kate_const *palettes;
00301 size_t nbitmaps;
00302 kate_const kate_bitmap *kate_const *bitmaps;
00304 size_t nfont_ranges;
00305 kate_const kate_font_range *kate_const *font_ranges;
00307 size_t nfont_mappings;
00308 kate_const kate_font_mapping *kate_const *font_mappings;
00310 kate_markup_type text_markup_type;
00312 size_t original_canvas_width;
00313 size_t original_canvas_height;
00315 uintptr_t pad2[11];
00316
00317
00318 int remove_markup;
00319 int no_limits;
00320 int probe;
00321
00322 uintptr_t pad3[13];
00323 } kate_info;
00324
00325 struct kate_encode_state;
00326 struct kate_decode_state;
00327
00329 typedef struct kate_state {
00330 kate_const kate_info *ki;
00332
00333 kate_const struct kate_encode_state *kes;
00334 kate_const struct kate_decode_state *kds;
00335
00336 uintptr_t pad[5];
00337 } kate_state;
00338
00340 typedef struct kate_comment {
00341 char **user_comments;
00342 int *comment_lengths;
00343 int comments;
00344 char *vendor;
00345 } kate_comment;
00346
00351 typedef struct kate_event {
00352 kate_int64_t start;
00353 kate_int64_t duration;
00354 kate_int64_t backlink;
00356 kate_float start_time;
00357 kate_float end_time;
00359 kate_int32_t id;
00361 kate_text_encoding text_encoding;
00362 kate_text_directionality text_directionality;
00363 kate_const char *language;
00364 kate_const char *text;
00365 size_t len;
00366 size_t len0;
00368 size_t nmotions;
00369 kate_const kate_motion *kate_const *motions;
00371 kate_const kate_region *region;
00372 kate_const kate_style *style;
00373 kate_const kate_style *secondary_style;
00374 kate_const kate_font_mapping *font_mapping;
00375 kate_const kate_palette *palette;
00376 kate_const kate_bitmap *bitmap;
00378 kate_markup_type text_markup_type;
00380 uintptr_t pad0[8];
00381
00382
00383 const kate_info *ki;
00384 size_t trackers;
00385
00386 uintptr_t pad1[10];
00387 } kate_event;
00388
00390 typedef struct kate_tracker {
00391 const kate_info *ki;
00392 kate_const kate_event *event;
00393 kate_float t;
00395 struct {
00396 uint32_t region:1;
00397 uint32_t text_alignment_int:1;
00398 uint32_t text_alignment_ext:1;
00399 uint32_t text_pos:1;
00400 uint32_t text_size:1;
00401 uint32_t marker_pos:4;
00402 uint32_t text_color:1;
00403 uint32_t background_color:1;
00404 uint32_t draw_color:1;
00405 uint32_t glyph_pointer:4;
00406 uint32_t path:1;
00407 uint32_t draw:1;
00408 uint32_t visible_section:1;
00409 uint32_t z:1;
00410 uint32_t hmargins:1;
00411 uint32_t vmargins:1;
00412 uint32_t bitmap_pos:1;
00413 uint32_t bitmap_size:1;
00414
00415 uint32_t pad0:8;
00416 uint32_t pad1:32;
00417
00418 } has;
00420 int window_w;
00421 int window_h;
00422 int frame_x;
00423 int frame_y;
00424 int frame_w;
00425 int frame_h;
00427
00428 kate_float region_x;
00429 kate_float region_y;
00430 kate_float region_w;
00431 kate_float region_h;
00433
00434 kate_float text_halign;
00435 kate_float text_valign;
00437
00438 kate_float text_x;
00439 kate_float text_y;
00441
00442 kate_float text_size_x;
00443 kate_float text_size_y;
00445
00446 kate_float marker_x[4];
00447 kate_float marker_y[4];
00449
00450 kate_color text_color;
00452
00453 kate_color background_color;
00455
00456 kate_color draw_color;
00458
00459 kate_float glyph_pointer[4];
00460 kate_float glyph_height[4];
00462
00463 kate_float path_start;
00464 kate_float path_end;
00466
00467 kate_float draw_x;
00468 kate_float draw_y;
00470
00471 kate_float visible_x;
00472 kate_float visible_y;
00474
00475 kate_float z;
00477
00478 kate_float left_margin;
00479 kate_float right_margin;
00481
00482 kate_float top_margin;
00483 kate_float bottom_margin;
00485
00486 kate_float bitmap_x;
00487 kate_float bitmap_y;
00489
00490 kate_float bitmap_size_x;
00491 kate_float bitmap_size_y;
00493
00494 size_t nglyphs;
00495
00496 uintptr_t pad[28];
00497
00498 } kate_tracker;
00499
00501 typedef struct kate_packet {
00502 size_t nbytes;
00503 void *data;
00504 } kate_packet;
00505
00506 #ifdef __cplusplus
00507 extern "C" {
00508 #endif
00509
00511 extern int kate_get_version(void);
00512 extern const char *kate_get_version_string(void);
00513 extern int kate_get_bitstream_version(void);
00514 extern const char *kate_get_bitstream_version_string(void);
00515
00517 extern int kate_info_init(kate_info *ki);
00518 extern int kate_info_set_granule_encoding(kate_info *ki,kate_float resolution,kate_float max_length,kate_float max_event_lifetime);
00519 extern int kate_info_set_language(kate_info *ki,const char *language);
00520 extern int kate_info_set_text_directionality(kate_info *ki,kate_text_directionality text_directionality);
00521 extern int kate_info_set_markup_type(kate_info *ki,kate_markup_type text_markup_type);
00522 extern int kate_info_set_category(kate_info *ki,const char *category);
00523 extern int kate_info_set_original_canvas_size(kate_info *ki,size_t width,size_t height);
00524 extern int kate_info_add_region(kate_info *ki,kate_region *kr);
00525 extern int kate_info_add_style(kate_info *ki,kate_style *ks);
00526 extern int kate_info_add_curve(kate_info *ki,kate_curve *kc);
00527 extern int kate_info_add_motion(kate_info *ki,kate_motion *km);
00528 extern int kate_info_add_palette(kate_info *ki,kate_palette *kp);
00529 extern int kate_info_add_bitmap(kate_info *ki,kate_bitmap *kb);
00530 extern int kate_info_add_font_range(kate_info *ki,kate_font_range *kfr);
00531 extern int kate_info_add_font_mapping(kate_info *ki,kate_font_mapping *kfm);
00532 extern int kate_info_matches_language(const kate_info *ki,const char *language);
00533 extern int kate_info_remove_markup(kate_info *ki,int flag);
00534 extern int kate_info_no_limits(kate_info *ki,int flag);
00535 extern int kate_info_clear(kate_info *ki);
00536
00538 extern int kate_granule_shift(const kate_info *ki);
00539 extern kate_float kate_granule_time(const kate_info *ki,kate_int64_t granulepos);
00540 extern kate_int64_t kate_duration_granule(const kate_info *ki,kate_float duration);
00541 extern kate_float kate_granule_duration(const kate_info *ki,kate_int64_t duration);
00542
00544 extern int kate_clear(kate_state *k);
00545 extern int kate_motion_get_point(const kate_motion *km,kate_float duration,kate_float t,kate_float *x,kate_float *y);
00546 extern int kate_region_init(kate_region *kr);
00547 extern int kate_style_init(kate_style *ks);
00548 extern int kate_palette_init(kate_palette *kp);
00549 extern int kate_bitmap_init(kate_bitmap *kb);
00550 extern int kate_curve_init(kate_curve *kc);
00551 extern int kate_motion_init(kate_motion *km);
00552
00554 extern int kate_text_get_character(kate_text_encoding text_encoding,const char ** const text,size_t *len0);
00555 extern int kate_text_set_character(kate_text_encoding text_encoding,int c,char ** const text,size_t *len0);
00556 extern int kate_text_remove_markup(kate_text_encoding text_encoding,char *text,size_t *len0);
00557 extern int kate_text_validate(kate_text_encoding text_encoding,const char *text,size_t len0);
00558
00560 extern int kate_comment_init(kate_comment *kc);
00561 extern int kate_comment_clear(kate_comment *kc);
00562 extern int kate_comment_add(kate_comment *kc,const char *comment);
00563 extern int kate_comment_add_length(kate_comment *kc,const char *comment,size_t len);
00564 extern int kate_comment_add_tag(kate_comment *kc,const char *name,const char *value);
00565 extern const char *kate_comment_query(const kate_comment *kc,const char *tag,int count);
00566 extern int kate_comment_query_count(const kate_comment *kc,const char *tag);
00567
00569 extern int kate_encode_init(kate_state *k,kate_info *ki);
00570 extern int kate_encode_headers(kate_state *k,kate_comment *kc,kate_packet *kp);
00571 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);
00572 extern int kate_encode_keepalive(kate_state *k,kate_float t,kate_packet *kp);
00573 extern int kate_encode_finish(kate_state *k,kate_float t,kate_packet *kp);
00574 extern int kate_encode_set_id(kate_state *k,kate_int32_t id);
00575 extern int kate_encode_set_language(kate_state *k,const char *language);
00576 extern int kate_encode_set_text_encoding(kate_state *k,kate_text_encoding text_encoding);
00577 extern int kate_encode_set_text_directionality(kate_state *k,kate_text_directionality text_directionality);
00578 extern int kate_encode_set_region_index(kate_state *k,size_t region);
00579 extern int kate_encode_set_region(kate_state *k,const kate_region *kr);
00580 extern int kate_encode_set_style_index(kate_state *k,size_t style);
00581 extern int kate_encode_set_style(kate_state *k,const kate_style *ks);
00582 extern int kate_encode_set_secondary_style_index(kate_state *k,size_t style);
00583 extern int kate_encode_set_secondary_style(kate_state *k,const kate_style *ks);
00584 extern int kate_encode_set_font_mapping_index(kate_state *k,size_t font_mapping);
00585 extern int kate_encode_add_motion(kate_state *k,kate_motion *km,int destroy);
00586 extern int kate_encode_add_motion_index(kate_state *k,size_t motion);
00587 extern int kate_encode_set_palette_index(kate_state *k,size_t palette);
00588 extern int kate_encode_set_palette(kate_state *k,const kate_palette *kp);
00589 extern int kate_encode_set_bitmap_index(kate_state *k,size_t bitmap);
00590 extern int kate_encode_set_bitmap(kate_state *k,const kate_bitmap *kb);
00591 extern int kate_encode_set_markup_type(kate_state *k,int markup_type);
00592 extern kate_int64_t kate_encode_get_granule(const kate_state *k);
00593
00595 extern int kate_decode_is_idheader(const kate_packet *kp);
00596 extern int kate_decode_init(kate_state *k,kate_info *ki);
00597 extern int kate_decode_headerin(kate_info *ki,kate_comment *kc,kate_packet *kp);
00598 extern int kate_decode_packetin(kate_state *k,kate_packet *kp);
00599 extern int kate_decode_eventout(kate_state *k,kate_const kate_event **ev);
00600
00602 extern int kate_tracker_init(kate_tracker *kin,const kate_info *ki,kate_const kate_event *ev);
00603 extern int kate_tracker_clear(kate_tracker *kin);
00604 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);
00605 extern int kate_tracker_morph_styles(kate_style *style,kate_float t,const kate_style *from,const kate_style *to);
00606 extern int kate_tracker_get_text_path_position(kate_tracker *kin,size_t glyph,int *x,int *y);
00607 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);
00608
00610 extern int kate_font_get_index_from_code_point(const kate_font_mapping *kfm,int c);
00611
00613 extern int kate_high_decode_init(kate_state *k);
00614 extern int kate_high_decode_packetin(kate_state *k,kate_packet *kp,kate_const kate_event **ev);
00615 extern int kate_high_decode_clear(kate_state *k);
00616 extern const kate_comment *kate_high_decode_get_comments(kate_state *k);
00617
00619 extern int kate_packet_wrap(kate_packet *kp,size_t nbytes,const void *data);
00620 extern int kate_packet_init(kate_packet *kp,size_t nbytes,const void *data);
00621 extern int kate_packet_clear(kate_packet *kp);
00622
00623 #ifdef __cplusplus
00624 }
00625 #endif
00626
00629 #define KATE_E_NOT_FOUND (-1)
00630 #define KATE_E_INVALID_PARAMETER (-2)
00631 #define KATE_E_OUT_OF_MEMORY (-3)
00632 #define KATE_E_BAD_GRANULE (-4)
00633 #define KATE_E_INIT (-5)
00634 #define KATE_E_BAD_PACKET (-6)
00635 #define KATE_E_TEXT (-7)
00636 #define KATE_E_LIMIT (-8)
00637 #define KATE_E_VERSION (-9)
00638 #define KATE_E_NOT_KATE (-10)
00641 #endif
00642