include/kate/kate.h

Go to the documentation of this file.
00001 /* Copyright (C) 2008 Vincent Penquerc'h.
00002    This file is part of the Kate codec library.
00003    Written by Vincent Penquerc'h.
00004 
00005    Use, distribution and reproduction of this library is governed
00006    by a BSD style source license included with this source in the
00007    file 'COPYING'. Please read these terms before distributing. */
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 5             
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   /* these can be used for a x/y position mapping */
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   /* more mapping may be added in future versions */
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   /* more semantics may be added in future versions */
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   /* internal */
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; /* internal */
00326 struct kate_decode_state; /* internal */
00327 
00329 typedef struct kate_state {
00330   kate_const kate_info *ki;                      
00332   /* internal */
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   /* internal */
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     /* 24 bits */
00415     uint32_t pad0:8;
00416     uint32_t pad1:32;
00417     /* 64 bits */
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   /* has.region */
00428   kate_float region_x;                          
00429   kate_float region_y;                          
00430   kate_float region_w;                          
00431   kate_float region_h;                          
00433   /* has.text_alignment (int/ext) */
00434   kate_float text_halign;                       
00435   kate_float text_valign;                       
00437   /* has.text_pos */
00438   kate_float text_x;                            
00439   kate_float text_y;                            
00441   /* has.text_size */
00442   kate_float text_size_x;                       
00443   kate_float text_size_y;                       
00445   /* has.marker_pos&(1<<n) */
00446   kate_float marker_x[4];                       
00447   kate_float marker_y[4];                       
00449   /* has.text_color */
00450   kate_color text_color;                        
00452   /* has.background_color */
00453   kate_color background_color;                  
00455   /* has.draw_color */
00456   kate_color draw_color;                        
00458   /* has.glyph_pointer&(1<<n) */
00459   kate_float glyph_pointer[4];                  
00460   kate_float glyph_height[4];                   
00462   /* has.path */
00463   kate_float path_start;                        
00464   kate_float path_end;                          
00466   /* has.draw */
00467   kate_float draw_x;                            
00468   kate_float draw_y;                            
00470   /* has.visible_section */
00471   kate_float visible_x;                         
00472   kate_float visible_y;                         
00474   /* has.z */
00475   kate_float z;                                 
00477   /* has.hmargins */
00478   kate_float left_margin;                       
00479   kate_float right_margin;                      
00481   /* has.vmargins */
00482   kate_float top_margin;                        
00483   kate_float bottom_margin;                     
00485   /* has.bitmap_pos */
00486   kate_float bitmap_x;                          
00487   kate_float bitmap_y;                          
00489   /* has.bitmap_size */
00490   kate_float bitmap_size_x;                     
00491   kate_float bitmap_size_y;                     
00493   /* internal */
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); /* text is not null terminated */
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); /* t may be negative to use the end granule of the last event */
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); /* language can be NULL */
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); /* event can be NULL */
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 
00618 extern int kate_packet_wrap(kate_packet *kp,size_t nbytes,const void *data);
00619 extern int kate_packet_init(kate_packet *kp,size_t nbytes,const void *data);
00620 extern int kate_packet_clear(kate_packet *kp);
00621 
00622 #ifdef __cplusplus
00623 }
00624 #endif
00625 
00628 #define KATE_E_NOT_FOUND (-1)            
00629 #define KATE_E_INVALID_PARAMETER (-2)    
00630 #define KATE_E_OUT_OF_MEMORY (-3)        
00631 #define KATE_E_BAD_GRANULE (-4)          
00632 #define KATE_E_INIT (-5)                 
00633 #define KATE_E_BAD_PACKET (-6)           
00634 #define KATE_E_TEXT (-7)                 
00635 #define KATE_E_LIMIT (-8)                
00636 #define KATE_E_VERSION (-9)              
00637 #define KATE_E_NOT_KATE (-10)            
00640 #endif
00641 

Generated on Mon Jul 7 19:59:24 2008 for libkate by  doxygen 1.5.4