00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef KATE_kate_h_GUARD
00011 #define KATE_kate_h_GUARD
00012
00017 #include "kate/kate_config.h"
00018
00021 #define KATE_VERSION_MAJOR 0
00022 #define KATE_VERSION_MINOR 3
00023 #define KATE_VERSION_PATCH 7
00028 #define KATE_BITSTREAM_VERSION_MAJOR 0
00029 #define KATE_BITSTREAM_VERSION_MINOR 5
00033 typedef enum {
00034 kate_utf8
00035 } kate_text_encoding;
00036
00038 typedef enum {
00039 kate_markup_none,
00040 kate_markup_simple
00041 } kate_markup_type;
00042
00044 typedef enum {
00045 kate_pixel,
00046 kate_percentage,
00047 kate_millionths
00048 } kate_space_metric;
00049
00051 typedef struct kate_region {
00052 kate_space_metric metric;
00053 int x;
00054 int y;
00055 int w;
00056 int h;
00057 int style;
00058 unsigned int clip:1;
00059 unsigned int pad0:31;
00060 kate_uintptr_t pad1[6];
00061 } kate_region;
00062
00064 typedef struct kate_color {
00065 unsigned char r;
00066 unsigned char g;
00067 unsigned char b;
00068 unsigned char a;
00069 } kate_color;
00070
00072 typedef enum {
00073 kate_wrap_word,
00074 kate_wrap_none
00075 } kate_wrap_mode;
00076
00078 typedef struct kate_style {
00079 kate_float halign;
00080 kate_float valign;
00082 kate_color text_color;
00083 kate_color background_color;
00084 kate_color draw_color;
00086 kate_space_metric font_metric;
00087 kate_float font_width;
00088 kate_float font_height;
00090 kate_space_metric margin_metric;
00091 kate_float left_margin;
00092 kate_float top_margin;
00093 kate_float right_margin;
00094 kate_float bottom_margin;
00096 unsigned int bold:1;
00097 unsigned int italics:1;
00098 unsigned int underline:1;
00099 unsigned int strike:1;
00100 unsigned int justify:1;
00101 unsigned int wrap_mode:2;
00102 unsigned int pad0:25;
00103
00104 kate_const char *font;
00106 kate_uintptr_t pad1[9];
00107 } kate_style;
00108
00110 typedef enum kate_curve_type {
00111 kate_curve_none,
00112 kate_curve_static,
00113 kate_curve_linear,
00114 kate_curve_catmull_rom_spline,
00115 kate_curve_bezier_cubic_spline,
00116 kate_curve_bspline
00117 } kate_curve_type;
00118
00120 typedef struct kate_curve {
00121 kate_curve_type type;
00122 size_t npts;
00123 kate_float *pts;
00124 kate_uintptr_t pad[5];
00125 } kate_curve;
00126
00128 typedef enum kate_motion_mapping {
00129
00130 kate_motion_mapping_none,
00131 kate_motion_mapping_frame,
00132 kate_motion_mapping_window,
00133 kate_motion_mapping_region,
00134 kate_motion_mapping_event_duration,
00135 kate_motion_mapping_bitmap_size,
00137 #if 0
00138 text is useful, find a way to readd it easily
00139 kate_motion_mapping_text,
00140 #endif
00141
00142
00143
00144 kate_motion_mapping_user=128
00145 } kate_motion_mapping;
00146
00148 typedef enum kate_motion_semantics {
00149 kate_motion_semantics_time,
00150 kate_motion_semantics_z,
00151 kate_motion_semantics_region_position,
00152 kate_motion_semantics_region_size,
00153 kate_motion_semantics_text_alignment_int,
00154 kate_motion_semantics_text_alignment_ext,
00155 kate_motion_semantics_text_position,
00156 kate_motion_semantics_text_size,
00157 kate_motion_semantics_marker1_position,
00158 kate_motion_semantics_marker2_position,
00159 kate_motion_semantics_marker3_position,
00160 kate_motion_semantics_marker4_position,
00161 kate_motion_semantics_glyph_pointer_1,
00162 kate_motion_semantics_glyph_pointer_2,
00163 kate_motion_semantics_glyph_pointer_3,
00164 kate_motion_semantics_glyph_pointer_4,
00165 kate_motion_semantics_text_color_rg,
00166 kate_motion_semantics_text_color_ba,
00167 kate_motion_semantics_background_color_rg,
00168 kate_motion_semantics_background_color_ba,
00169 kate_motion_semantics_draw_color_rg,
00170 kate_motion_semantics_draw_color_ba,
00171 kate_motion_semantics_style_morph,
00172 kate_motion_semantics_text_path,
00173 kate_motion_semantics_text_path_section,
00174 kate_motion_semantics_draw,
00175 kate_motion_semantics_text_visible_section,
00176 kate_motion_semantics_horizontal_margins,
00177 kate_motion_semantics_vertical_margins,
00178 kate_motion_semantics_bitmap_position,
00179 kate_motion_semantics_bitmap_size,
00180 kate_motion_semantics_marker1_bitmap,
00181 kate_motion_semantics_marker2_bitmap,
00182 kate_motion_semantics_marker3_bitmap,
00183 kate_motion_semantics_marker4_bitmap,
00184 kate_motion_semantics_glyph_pointer_1_bitmap,
00185 kate_motion_semantics_glyph_pointer_2_bitmap,
00186 kate_motion_semantics_glyph_pointer_3_bitmap,
00187 kate_motion_semantics_glyph_pointer_4_bitmap,
00188 kate_motion_semantics_draw_width,
00190
00191
00192 kate_motion_semantics_user = 128
00193 } kate_motion_semantics;
00194
00196 typedef struct kate_motion {
00197 size_t ncurves;
00198 kate_curve **curves;
00199 kate_float *durations;
00200 kate_motion_mapping x_mapping;
00201 kate_motion_mapping y_mapping;
00202 kate_motion_semantics semantics;
00203 unsigned int periodic:1;
00204 unsigned int pad0:31;
00205 kate_uintptr_t pad1[5];
00206 } kate_motion;
00207
00209 typedef enum kate_text_directionality {
00210 kate_l2r_t2b,
00211 kate_r2l_t2b,
00212 kate_t2b_r2l,
00213 kate_t2b_l2r
00214 } kate_text_directionality;
00215
00217 typedef struct kate_palette {
00218 size_t ncolors;
00219 kate_color *colors;
00220 kate_uintptr_t pad[2];
00221 } kate_palette;
00222
00224 typedef enum kate_bitmap_type {
00225 kate_bitmap_type_paletted,
00226 kate_bitmap_type_png
00227 } kate_bitmap_type;
00228
00230 typedef struct kate_bitmap {
00231 size_t width;
00232 size_t height;
00233 unsigned char bpp;
00234 kate_bitmap_type type;
00235 unsigned char pad0[2];
00236 int palette;
00237 unsigned char *pixels;
00238 size_t size;
00239 int x_offset;
00240 int y_offset;
00241 } kate_bitmap;
00242
00244 typedef struct kate_font_range {
00245 int first_code_point;
00246 int last_code_point;
00247 int first_bitmap;
00248 kate_uintptr_t pad[5];
00249 } kate_font_range;
00250
00252 typedef struct kate_font_mapping {
00253 size_t nranges;
00254 kate_font_range **ranges;
00255 kate_uintptr_t pad[6];
00256 } kate_font_mapping;
00257
00263 typedef struct kate_info {
00264 unsigned char bitstream_version_major;
00265 unsigned char bitstream_version_minor;
00266 unsigned char pad0[2];
00267
00268 kate_text_encoding text_encoding;
00269 kate_text_directionality text_directionality;
00271 unsigned char num_headers;
00272 unsigned char granule_shift;
00273 unsigned char pad1[2];
00274
00275 kate_uint32_t gps_numerator;
00276 kate_uint32_t gps_denominator;
00278 kate_const char *language;
00280 kate_const char *category;
00282 size_t nregions;
00283 kate_const kate_region *kate_const *regions;
00285 size_t nstyles;
00286 kate_const kate_style *kate_const *styles;
00288 size_t ncurves;
00289 kate_const kate_curve *kate_const *curves;
00291 size_t nmotions;
00292 kate_const kate_motion *kate_const *motions;
00294 size_t npalettes;
00295 kate_const kate_palette *kate_const *palettes;
00297 size_t nbitmaps;
00298 kate_const kate_bitmap *kate_const *bitmaps;
00300 size_t nfont_ranges;
00301 kate_const kate_font_range *kate_const *font_ranges;
00303 size_t nfont_mappings;
00304 kate_const kate_font_mapping *kate_const *font_mappings;
00306 kate_markup_type text_markup_type;
00308 size_t original_canvas_width;
00309 size_t original_canvas_height;
00311 kate_uintptr_t pad2[11];
00312
00313
00314 int remove_markup;
00315 int no_limits;
00316 int probe;
00317
00318 kate_uintptr_t pad3[13];
00319 } kate_info;
00320
00321 struct kate_encode_state;
00322 struct kate_decode_state;
00323
00325 typedef struct kate_state {
00326 kate_const kate_info *ki;
00328
00329 kate_const struct kate_encode_state *kes;
00330 kate_const struct kate_decode_state *kds;
00331
00332 kate_uintptr_t pad[5];
00333 } kate_state;
00334
00336 typedef struct kate_comment {
00337 char **user_comments;
00338 int *comment_lengths;
00339 int comments;
00340 char *vendor;
00341 } kate_comment;
00342
00347 typedef struct kate_event {
00348 kate_int64_t start;
00349 kate_int64_t duration;
00350 kate_int64_t backlink;
00352 kate_float start_time;
00353 kate_float end_time;
00355 kate_int32_t id;
00357 kate_text_encoding text_encoding;
00358 kate_text_directionality text_directionality;
00359 kate_const char *language;
00360 kate_const char *text;
00361 size_t len;
00362 size_t len0;
00364 size_t nmotions;
00365 kate_const kate_motion *kate_const *motions;
00367 kate_const kate_region *region;
00368 kate_const kate_style *style;
00369 kate_const kate_style *secondary_style;
00370 kate_const kate_font_mapping *font_mapping;
00371 kate_const kate_palette *palette;
00372 kate_const kate_bitmap *bitmap;
00374 kate_markup_type text_markup_type;
00376 size_t nbitmaps;
00377 kate_const kate_bitmap *kate_const *bitmaps;
00379 kate_uintptr_t pad0[6];
00380
00381
00382 const kate_info *ki;
00383 size_t trackers;
00384
00385 kate_uintptr_t pad1[10];
00386 } kate_event;
00387
00388 struct kate_tracker_internal;
00389
00391 typedef struct kate_tracker {
00392 const kate_info *ki;
00393 kate_const kate_event *event;
00394 kate_float t;
00396 struct {
00397 unsigned int region:1;
00398 unsigned int text_alignment_int:1;
00399 unsigned int text_alignment_ext:1;
00400 unsigned int text_pos:1;
00401 unsigned int text_size:1;
00402 unsigned int marker_pos:4;
00403 unsigned int text_color:1;
00404 unsigned int background_color:1;
00405 unsigned int draw_color:1;
00406 unsigned int glyph_pointer:4;
00407 unsigned int path:1;
00408 unsigned int draw:1;
00409 unsigned int visible_section:1;
00410 unsigned int z:1;
00411 unsigned int hmargins:1;
00412 unsigned int vmargins:1;
00413 unsigned int bitmap_pos:1;
00414 unsigned int bitmap_size:1;
00415 unsigned int marker_bitmap:4;
00416 unsigned int glyph_pointer_bitmap:4;
00417 unsigned int draw_width:1;
00418
00419 unsigned int pad0:31;
00420
00421 } has;
00423 int window_w;
00424 int window_h;
00425 int frame_x;
00426 int frame_y;
00427 int frame_w;
00428 int frame_h;
00430
00431 kate_float region_x;
00432 kate_float region_y;
00433 kate_float region_w;
00434 kate_float region_h;
00436
00437 kate_float text_halign;
00438 kate_float text_valign;
00440
00441 kate_float text_x;
00442 kate_float text_y;
00444
00445 kate_float text_size_x;
00446 kate_float text_size_y;
00448
00449 kate_float marker_x[4];
00450 kate_float marker_y[4];
00452
00453 kate_color text_color;
00455
00456 kate_color background_color;
00458
00459 kate_color draw_color;
00461
00462 kate_float glyph_pointer[4];
00463 kate_float glyph_height[4];
00465
00466 kate_float path_start;
00467 kate_float path_end;
00469
00470 kate_float draw_x;
00471 kate_float draw_y;
00473
00474 kate_float visible_x;
00475 kate_float visible_y;
00477
00478 kate_float z;
00480
00481 kate_float left_margin;
00482 kate_float right_margin;
00484
00485 kate_float top_margin;
00486 kate_float bottom_margin;
00488
00489 kate_float bitmap_x;
00490 kate_float bitmap_y;
00492
00493 kate_float bitmap_size_x;
00494 kate_float bitmap_size_y;
00496
00497 const kate_bitmap *marker_bitmap[4];
00499
00500 const kate_bitmap *glyph_pointer_bitmap[4];
00502
00503 kate_float draw_width;
00505
00506 struct kate_tracker_internal *internal;
00507
00508 kate_uintptr_t pad[19];
00509
00510 } kate_tracker;
00511
00513 typedef struct kate_packet {
00514 size_t nbytes;
00515 void *data;
00516 } kate_packet;
00517
00518 #ifdef __cplusplus
00519 extern "C" {
00520 #endif
00521
00523 extern int kate_get_version(void);
00524 extern const char *kate_get_version_string(void);
00525 extern int kate_get_bitstream_version(void);
00526 extern const char *kate_get_bitstream_version_string(void);
00527
00529 extern int kate_info_init(kate_info *ki);
00530 extern int kate_info_set_granule_encoding(kate_info *ki,kate_float resolution,kate_float max_length,kate_float max_event_lifetime);
00531 extern int kate_info_set_language(kate_info *ki,const char *language);
00532 extern int kate_info_set_text_directionality(kate_info *ki,kate_text_directionality text_directionality);
00533 extern int kate_info_set_markup_type(kate_info *ki,kate_markup_type text_markup_type);
00534 extern int kate_info_set_category(kate_info *ki,const char *category);
00535 extern int kate_info_set_original_canvas_size(kate_info *ki,size_t width,size_t height);
00536 extern int kate_info_add_region(kate_info *ki,kate_region *kr);
00537 extern int kate_info_add_style(kate_info *ki,kate_style *ks);
00538 extern int kate_info_add_curve(kate_info *ki,kate_curve *kc);
00539 extern int kate_info_add_motion(kate_info *ki,kate_motion *km);
00540 extern int kate_info_add_palette(kate_info *ki,kate_palette *kp);
00541 extern int kate_info_add_bitmap(kate_info *ki,kate_bitmap *kb);
00542 extern int kate_info_add_font_range(kate_info *ki,kate_font_range *kfr);
00543 extern int kate_info_add_font_mapping(kate_info *ki,kate_font_mapping *kfm);
00544 extern int kate_info_matches_language(const kate_info *ki,const char *language);
00545 extern int kate_info_remove_markup(kate_info *ki,int flag);
00546 extern int kate_info_no_limits(kate_info *ki,int flag);
00547 extern int kate_info_clear(kate_info *ki);
00548
00550 extern int kate_granule_shift(const kate_info *ki);
00551 extern int kate_granule_split_time(const kate_info *ki,kate_int64_t granulepos,kate_float *base,kate_float *offset);
00552 extern kate_float kate_granule_time(const kate_info *ki,kate_int64_t granulepos);
00553 extern kate_int64_t kate_duration_granule(const kate_info *ki,kate_float duration);
00554 extern kate_float kate_granule_duration(const kate_info *ki,kate_int64_t duration);
00555
00557 extern int kate_clear(kate_state *k);
00558 extern int kate_motion_get_point(const kate_motion *km,kate_float duration,kate_float t,kate_float *x,kate_float *y);
00559 extern int kate_curve_get_point(const kate_curve *kc,kate_float t,kate_float *x,kate_float *y);
00560 extern int kate_region_init(kate_region *kr);
00561 extern int kate_style_init(kate_style *ks);
00562 extern int kate_palette_init(kate_palette *kp);
00563 extern int kate_bitmap_init(kate_bitmap *kb);
00564 extern int kate_curve_init(kate_curve *kc);
00565 extern int kate_motion_init(kate_motion *km);
00566
00568 extern int kate_text_get_character(kate_text_encoding text_encoding,const char ** const text,size_t *len0);
00569 extern int kate_text_set_character(kate_text_encoding text_encoding,int c,char ** const text,size_t *len0);
00570 extern int kate_text_remove_markup(kate_text_encoding text_encoding,char *text,size_t *len0);
00571 extern int kate_text_validate(kate_text_encoding text_encoding,const char *text,size_t len0);
00572
00574 extern int kate_comment_init(kate_comment *kc);
00575 extern int kate_comment_clear(kate_comment *kc);
00576 extern int kate_comment_add(kate_comment *kc,const char *comment);
00577 extern int kate_comment_add_length(kate_comment *kc,const char *comment,size_t len);
00578 extern int kate_comment_add_tag(kate_comment *kc,const char *tag,const char *value);
00579 extern const char *kate_comment_query(const kate_comment *kc,const char *tag,int count);
00580 extern int kate_comment_query_count(const kate_comment *kc,const char *tag);
00581
00583 extern int kate_encode_init(kate_state *k,kate_info *ki);
00584 extern int kate_encode_headers(kate_state *k,kate_comment *kc,kate_packet *kp);
00585 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);
00586 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);
00587 extern int kate_encode_keepalive(kate_state *k,kate_float t,kate_packet *kp);
00588 extern int kate_encode_keepalive_raw_times(kate_state *k,kate_int64_t t,kate_packet *kp);
00589 extern int kate_encode_repeat(kate_state *k,kate_float t,kate_float threshold,kate_packet *kp);
00590 extern int kate_encode_repeat_raw_times(kate_state *k,kate_int64_t t,kate_int64_t threshold,kate_packet *kp);
00591 extern int kate_encode_finish(kate_state *k,kate_float t,kate_packet *kp);
00592 extern int kate_encode_finish_raw_times(kate_state *k,kate_int64_t t,kate_packet *kp);
00593 extern int kate_encode_set_id(kate_state *k,kate_int32_t id);
00594 extern int kate_encode_set_language(kate_state *k,const char *language);
00595 extern int kate_encode_set_text_encoding(kate_state *k,kate_text_encoding text_encoding);
00596 extern int kate_encode_set_text_directionality(kate_state *k,kate_text_directionality text_directionality);
00597 extern int kate_encode_set_region_index(kate_state *k,size_t region);
00598 extern int kate_encode_set_region(kate_state *k,const kate_region *kr);
00599 extern int kate_encode_set_style_index(kate_state *k,size_t style);
00600 extern int kate_encode_set_style(kate_state *k,const kate_style *ks);
00601 extern int kate_encode_set_secondary_style_index(kate_state *k,size_t style);
00602 extern int kate_encode_set_secondary_style(kate_state *k,const kate_style *ks);
00603 extern int kate_encode_set_font_mapping_index(kate_state *k,size_t font_mapping);
00604 extern int kate_encode_add_motion(kate_state *k,kate_motion *km,int destroy);
00605 extern int kate_encode_add_motion_index(kate_state *k,size_t motion);
00606 extern int kate_encode_set_palette_index(kate_state *k,size_t palette);
00607 extern int kate_encode_set_palette(kate_state *k,const kate_palette *kp);
00608 extern int kate_encode_set_bitmap_index(kate_state *k,size_t bitmap);
00609 extern int kate_encode_set_bitmap(kate_state *k,const kate_bitmap *kb);
00610 extern int kate_encode_add_bitmap(kate_state *k,const kate_bitmap *kb);
00611 extern int kate_encode_add_bitmap_index(kate_state *k,size_t bitmap);
00612 extern int kate_encode_set_markup_type(kate_state *k,int markup_type);
00613 extern kate_int64_t kate_encode_get_granule(const kate_state *k);
00614
00616 extern int kate_decode_is_idheader(const kate_packet *kp);
00617 extern int kate_decode_init(kate_state *k,kate_info *ki);
00618 extern int kate_decode_headerin(kate_info *ki,kate_comment *kc,kate_packet *kp);
00619 extern int kate_decode_packetin(kate_state *k,kate_packet *kp);
00620 extern int kate_decode_eventout(kate_state *k,kate_const kate_event **ev);
00621 extern int kate_decode_seek(kate_state *k);
00622
00624 extern int kate_tracker_init(kate_tracker *kin,const kate_info *ki,kate_const kate_event *ev);
00625 extern int kate_tracker_clear(kate_tracker *kin);
00626 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);
00627 extern int kate_tracker_morph_styles(kate_style *style,kate_float t,const kate_style *from,const kate_style *to);
00628 extern int kate_tracker_get_text_path_position(kate_tracker *kin,size_t glyph,int *x,int *y);
00629 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);
00630 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);
00631
00633 extern int kate_font_get_index_from_code_point(const kate_font_mapping *kfm,int c);
00634
00636 extern int kate_high_decode_init(kate_state *k);
00637 extern int kate_high_decode_packetin(kate_state *k,kate_packet *kp,kate_const kate_event **ev);
00638 extern int kate_high_decode_clear(kate_state *k);
00639 extern const kate_comment *kate_high_decode_get_comments(kate_state *k);
00640
00642 extern int kate_packet_wrap(kate_packet *kp,size_t nbytes,const void *data);
00643 extern int kate_packet_init(kate_packet *kp,size_t nbytes,const void *data);
00644 extern int kate_packet_clear(kate_packet *kp);
00645
00646 #ifdef __cplusplus
00647 }
00648 #endif
00649
00652 #define KATE_E_NOT_FOUND (-1)
00653 #define KATE_E_INVALID_PARAMETER (-2)
00654 #define KATE_E_OUT_OF_MEMORY (-3)
00655 #define KATE_E_BAD_GRANULE (-4)
00656 #define KATE_E_INIT (-5)
00657 #define KATE_E_BAD_PACKET (-6)
00658 #define KATE_E_TEXT (-7)
00659 #define KATE_E_LIMIT (-8)
00660 #define KATE_E_VERSION (-9)
00661 #define KATE_E_NOT_KATE (-10)
00662 #define KATE_E_BAD_TAG (-11)
00663 #define KATE_E_IMPL (-12)
00666 #endif
00667