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