]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/cairo/ffi/ffi.factor
factor: trim using lists
[factor.git] / basis / cairo / ffi / ffi.factor
index ce5f0cc233f0021eaed8490af3ae3655c952382f..1db2527d5b86275730a6be2a96b738c3d5d83ecb 100644 (file)
@@ -1,24 +1,23 @@
-! Copyright (c) 2007 Sampo Vuori
-! Copyright (c) 2008 Matthew Willis
-!
-! Adapted from cairo.h, version 1.5.14
-! License: http://factorcode.org/license.txt
+! Copyright (C) 2007 Sampo Vuori.
+! Copyright (C) 2008 Matthew Willis.
+! Copyright (C) 2010 Anton Gorenko.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien alien.c-types alien.destructors alien.libraries
+alien.syntax classes.struct combinators system ;
+IN: cairo.ffi
 
-USING: system combinators alien alien.syntax alien.c-types
-alien.destructors kernel accessors sequences arrays ui.gadgets
-alien.libraries ;
+! Adapted from cairo.h, version 1.8.10
 
-IN: cairo.ffi
-<< {
-    { [ os winnt? ] [ "cairo" "libcairo-2.dll" "cdecl" add-library ] }
-    { [ os macosx? ] [ "cairo" "/opt/local/lib/libcairo.dylib" "cdecl" add-library ] }
-    { [ os unix? ] [ ] }
-} cond >>
+<< "cairo" {
+    { [ os windows? ] [ "libcairo-2.dll" ] }
+    { [ os macosx? ] [ "libcairo.dylib" ] }
+    { [ os unix? ] [ "libcairo.so" ] }
+} cond cdecl add-library >>
 
 LIBRARY: cairo
 
-FUNCTION: int cairo_version ( ) ;
-FUNCTION: char* cairo_version_string ( ) ;
+FUNCTION: int cairo_version ( )
+FUNCTION: c-string cairo_version_string ( )
 
 TYPEDEF: int cairo_bool_t
 
@@ -26,26 +25,24 @@ TYPEDEF: int cairo_bool_t
 TYPEDEF: void* cairo_t
 TYPEDEF: void* cairo_surface_t
 
-C-STRUCT: cairo_matrix_t
-    { "double" "xx" }
-    { "double" "yx" }
-    { "double" "xy" }
-    { "double" "yy" }
-    { "double" "x0" }
-    { "double" "y0" } ;
+STRUCT: cairo_matrix_t
+    { xx double }
+    { yx double }
+    { xy double }
+    { yy double }
+    { x0 double }
+    { y0 double } ;
 
 TYPEDEF: void* cairo_pattern_t
 
-TYPEDEF: void* cairo_destroy_func_t
-: cairo-destroy-func ( quot -- callback )
-    [ "void" { "void*" } "cdecl" ] dip alien-callback ; inline
+CALLBACK: void
+cairo_destroy_func_t ( void* data )
 
 ! See cairo.h for details
-C-STRUCT: cairo_user_data_key_t
-    { "int" "unused" } ;
+STRUCT: cairo_user_data_key_t
+    { unused int } ;
 
-TYPEDEF: int cairo_status_t
-C-ENUM:
+ENUM: cairo_status_t
     CAIRO_STATUS_SUCCESS
     CAIRO_STATUS_NO_MEMORY
     CAIRO_STATUS_INVALID_RESTORE
@@ -70,63 +67,69 @@ C-ENUM:
     CAIRO_STATUS_INVALID_INDEX
     CAIRO_STATUS_CLIP_NOT_REPRESENTABLE
     CAIRO_STATUS_TEMP_FILE_ERROR
-    CAIRO_STATUS_INVALID_STRIDE ;
-
-TYPEDEF: int cairo_content_t
-CONSTANT: CAIRO_CONTENT_COLOR HEX: 1000
-CONSTANT: CAIRO_CONTENT_ALPHA HEX: 2000
-CONSTANT: CAIRO_CONTENT_COLOR_ALPHA HEX: 3000
-
-TYPEDEF: void* cairo_write_func_t
-: cairo-write-func ( quot -- callback )
-    [ "cairo_status_t" { "void*" "uchar*" "int" } "cdecl" ] dip alien-callback ; inline
-                          
-TYPEDEF: void* cairo_read_func_t
-: cairo-read-func ( quot -- callback )
-    [ "cairo_status_t" { "void*" "uchar*" "int" } "cdecl" ] dip alien-callback ; inline
+    CAIRO_STATUS_INVALID_STRIDE
+    CAIRO_STATUS_FONT_TYPE_MISMATCH
+    CAIRO_STATUS_USER_FONT_IMMUTABLE
+    CAIRO_STATUS_USER_FONT_ERROR
+    CAIRO_STATUS_NEGATIVE_COUNT
+    CAIRO_STATUS_INVALID_CLUSTERS
+    CAIRO_STATUS_INVALID_SLANT
+    CAIRO_STATUS_INVALID_WEIGHT ;
+
+ENUM: cairo_content_t
+    { CAIRO_CONTENT_COLOR 0x1000 }
+    { CAIRO_CONTENT_ALPHA 0x2000 }
+    { CAIRO_CONTENT_COLOR_ALPHA 0x3000 } ;
+
+CALLBACK: cairo_status_t
+cairo_write_func_t ( void* closure, uchar* data, uint length )
+
+CALLBACK: cairo_status_t
+cairo_read_func_t ( void* closure, uchar* data, uint length )
 
 ! Functions for manipulating state objects
+
 FUNCTION: cairo_t*
-cairo_create ( cairo_surface_t* target ) ;
+cairo_create ( cairo_surface_t* target )
 
 FUNCTION: cairo_t*
-cairo_reference ( cairo_t* cr ) ;
+cairo_reference ( cairo_t* cr )
 
 FUNCTION: void
-cairo_destroy ( cairo_t* cr ) ;
+cairo_destroy ( cairo_t* cr )
 
 DESTRUCTOR: cairo_destroy
 
 FUNCTION: uint
-cairo_get_reference_count ( cairo_t* cr ) ;
+cairo_get_reference_count ( cairo_t* cr )
 
 FUNCTION: void*
-cairo_get_user_data ( cairo_t* cr, cairo_user_data_key_t* key ) ;
+cairo_get_user_data ( cairo_t* cr, cairo_user_data_key_t* key )
 
 FUNCTION: cairo_status_t
-cairo_set_user_data ( cairo_t* cr, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+cairo_set_user_data ( cairo_t* cr, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy )
 
 FUNCTION: void
-cairo_save ( cairo_t* cr ) ;
+cairo_save ( cairo_t* cr )
 
 FUNCTION: void
-cairo_restore ( cairo_t* cr ) ;
+cairo_restore ( cairo_t* cr )
 
 FUNCTION: void
-cairo_push_group ( cairo_t* cr ) ;
+cairo_push_group ( cairo_t* cr )
 
 FUNCTION: void
-cairo_push_group_with_content  ( cairo_t* cr, cairo_content_t content ) ;
+cairo_push_group_with_content ( cairo_t* cr, cairo_content_t content )
 
 FUNCTION: cairo_pattern_t*
-cairo_pop_group ( cairo_t* cr ) ;
+cairo_pop_group ( cairo_t* cr )
 
 FUNCTION: void
-cairo_pop_group_to_source ( cairo_t* cr ) ;
+cairo_pop_group_to_source ( cairo_t* cr )
 
 ! Modify state
-TYPEDEF: int cairo_operator_t
-C-ENUM:
+
+ENUM: cairo_operator_t
     CAIRO_OPERATOR_CLEAR
 
     CAIRO_OPERATOR_SOURCE
@@ -146,212 +149,213 @@ C-ENUM:
     CAIRO_OPERATOR_SATURATE ;
 
 FUNCTION: void
-cairo_set_operator ( cairo_t* cr, cairo_operator_t op ) ;
+cairo_set_operator ( cairo_t* cr, cairo_operator_t op )
 
 FUNCTION: void
-cairo_set_source ( cairo_t* cr, cairo_pattern_t* source ) ;
+cairo_set_source ( cairo_t* cr, cairo_pattern_t* source )
 
 FUNCTION: void
-cairo_set_source_rgb ( cairo_t* cr, double red, double green, double blue ) ;
+cairo_set_source_rgb ( cairo_t* cr, double red, double green, double blue )
 
 FUNCTION: void
-cairo_set_source_rgba ( cairo_t* cr, double red, double green, double blue, double alpha ) ;
+cairo_set_source_rgba ( cairo_t* cr, double red, double green, double blue, double alpha )
 
 FUNCTION: void
-cairo_set_source_surface ( cairo_t* cr, cairo_surface_t* surface, double x, double y ) ;
+cairo_set_source_surface ( cairo_t* cr, cairo_surface_t* surface, double x, double y )
 
 FUNCTION: void
-cairo_set_tolerance ( cairo_t* cr, double tolerance ) ;
+cairo_set_tolerance ( cairo_t* cr, double tolerance )
 
-TYPEDEF: int cairo_antialias_t
-C-ENUM:
+ENUM: cairo_antialias_t
     CAIRO_ANTIALIAS_DEFAULT
     CAIRO_ANTIALIAS_NONE
     CAIRO_ANTIALIAS_GRAY
     CAIRO_ANTIALIAS_SUBPIXEL ;
 
 FUNCTION: void
-cairo_set_antialias ( cairo_t* cr, cairo_antialias_t antialias ) ;
+cairo_set_antialias ( cairo_t* cr, cairo_antialias_t antialias )
 
-TYPEDEF: int cairo_fill_rule_t
-C-ENUM:
+ENUM: cairo_fill_rule_t
     CAIRO_FILL_RULE_WINDING
     CAIRO_FILL_RULE_EVEN_ODD ;
 
 FUNCTION: void
-cairo_set_fill_rule ( cairo_t* cr, cairo_fill_rule_t fill_rule ) ;
+cairo_set_fill_rule ( cairo_t* cr, cairo_fill_rule_t fill_rule )
 
 FUNCTION: void
-cairo_set_line_width ( cairo_t* cr, double width ) ;
+cairo_set_line_width ( cairo_t* cr, double width )
 
-TYPEDEF: int cairo_line_cap_t
-C-ENUM:
+ENUM: cairo_line_cap_t
     CAIRO_LINE_CAP_BUTT
     CAIRO_LINE_CAP_ROUND
     CAIRO_LINE_CAP_SQUARE ;
 
 FUNCTION: void
-cairo_set_line_cap ( cairo_t* cr, cairo_line_cap_t line_cap ) ;
+cairo_set_line_cap ( cairo_t* cr, cairo_line_cap_t line_cap )
 
-TYPEDEF: int cairo_line_join_t
-C-ENUM:
+ENUM: cairo_line_join_t
     CAIRO_LINE_JOIN_MITER
     CAIRO_LINE_JOIN_ROUND
     CAIRO_LINE_JOIN_BEVEL ;
 
 FUNCTION: void
-cairo_set_line_join ( cairo_t* cr, cairo_line_join_t line_join ) ;
+cairo_set_line_join ( cairo_t* cr, cairo_line_join_t line_join )
 
 FUNCTION: void
-cairo_set_dash ( cairo_t* cr, double* dashes, int num_dashes, double offset ) ;
+cairo_set_dash ( cairo_t* cr, double* dashes, int num_dashes, double offset )
 
 FUNCTION: void
-cairo_set_miter_limit ( cairo_t* cr, double limit ) ;
+cairo_set_miter_limit ( cairo_t* cr, double limit )
 
 FUNCTION: void
-cairo_translate ( cairo_t* cr, double tx, double ty ) ;
+cairo_translate ( cairo_t* cr, double tx, double ty )
 
 FUNCTION: void
-cairo_scale ( cairo_t* cr, double sx, double sy ) ;
+cairo_scale ( cairo_t* cr, double sx, double sy )
 
 FUNCTION: void
-cairo_rotate ( cairo_t* cr, double angle ) ;
+cairo_rotate ( cairo_t* cr, double angle )
 
 FUNCTION: void
-cairo_transform ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+cairo_transform ( cairo_t* cr, cairo_matrix_t* matrix )
 
 FUNCTION: void
-cairo_set_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+cairo_set_matrix ( cairo_t* cr, cairo_matrix_t* matrix )
 
 FUNCTION: void
-cairo_identity_matrix ( cairo_t* cr ) ;
+cairo_identity_matrix ( cairo_t* cr )
 
 FUNCTION: void
-cairo_user_to_device ( cairo_t* cr, double* x, double* y ) ;
+cairo_user_to_device ( cairo_t* cr, double* x, double* y )
 
 FUNCTION: void
-cairo_user_to_device_distance ( cairo_t* cr, double* dx, double* dy ) ;
+cairo_user_to_device_distance ( cairo_t* cr, double* dx, double* dy )
 
 FUNCTION: void
-cairo_device_to_user ( cairo_t* cr, double* x, double* y ) ;
+cairo_device_to_user ( cairo_t* cr, double* x, double* y )
 
 FUNCTION: void
-cairo_device_to_user_distance ( cairo_t* cr, double* dx, double* dy ) ;
+cairo_device_to_user_distance ( cairo_t* cr, double* dx, double* dy )
 
 ! Path creation functions
+
 FUNCTION: void
-cairo_new_path ( cairo_t* cr ) ;
+cairo_new_path ( cairo_t* cr )
 
 FUNCTION: void
-cairo_move_to ( cairo_t* cr, double x, double y ) ;
+cairo_move_to ( cairo_t* cr, double x, double y )
 
 FUNCTION: void
-cairo_new_sub_path ( cairo_t* cr ) ;
+cairo_new_sub_path ( cairo_t* cr )
 
 FUNCTION: void
-cairo_line_to ( cairo_t* cr, double x, double y ) ;
+cairo_line_to ( cairo_t* cr, double x, double y )
 
 FUNCTION: void
-cairo_curve_to ( cairo_t* cr, double x1, double y1, double x2, double y2, double x3, double y3 ) ;
+cairo_curve_to ( cairo_t* cr, double x1, double y1, double x2, double y2, double x3, double y3 )
 
 FUNCTION: void
-cairo_arc ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ;
+cairo_arc ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 )
 
 FUNCTION: void
-cairo_arc_negative ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 ) ;
+cairo_arc_negative ( cairo_t* cr, double xc, double yc, double radius, double angle1, double angle2 )
 
 FUNCTION: void
-cairo_rel_move_to ( cairo_t* cr, double dx, double dy ) ;
+cairo_rel_move_to ( cairo_t* cr, double dx, double dy )
 
 FUNCTION: void
-cairo_rel_line_to ( cairo_t* cr, double dx, double dy ) ;
+cairo_rel_line_to ( cairo_t* cr, double dx, double dy )
 
 FUNCTION: void
-cairo_rel_curve_to ( cairo_t* cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3 ) ;
+cairo_rel_curve_to ( cairo_t* cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3 )
 
 FUNCTION: void
-cairo_rectangle ( cairo_t* cr, double x, double y, double width, double height ) ;
+cairo_rectangle ( cairo_t* cr, double x, double y, double width, double height )
 
 FUNCTION: void
-cairo_close_path ( cairo_t* cr ) ;
+cairo_close_path ( cairo_t* cr )
 
 FUNCTION: void
-cairo_path_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
+cairo_path_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 )
 
 ! Painting functions
+
 FUNCTION: void
-cairo_paint ( cairo_t* cr ) ;
+cairo_paint ( cairo_t* cr )
 
 FUNCTION: void
-cairo_paint_with_alpha ( cairo_t* cr, double alpha ) ;
+cairo_paint_with_alpha ( cairo_t* cr, double alpha )
 
 FUNCTION: void
-cairo_mask ( cairo_t* cr, cairo_pattern_t* pattern ) ;
+cairo_mask ( cairo_t* cr, cairo_pattern_t* pattern )
 
 FUNCTION: void
-cairo_mask_surface ( cairo_t* cr, cairo_surface_t* surface, double surface_x, double surface_y ) ;
+cairo_mask_surface ( cairo_t* cr, cairo_surface_t* surface, double surface_x, double surface_y )
 
 FUNCTION: void
-cairo_stroke ( cairo_t* cr ) ;
+cairo_stroke ( cairo_t* cr )
 
 FUNCTION: void
-cairo_stroke_preserve ( cairo_t* cr ) ;
+cairo_stroke_preserve ( cairo_t* cr )
 
 FUNCTION: void
-cairo_fill ( cairo_t* cr ) ;
+cairo_fill ( cairo_t* cr )
 
 FUNCTION: void
-cairo_fill_preserve ( cairo_t* cr ) ;
+cairo_fill_preserve ( cairo_t* cr )
 
 FUNCTION: void
-cairo_copy_page ( cairo_t* cr ) ;
+cairo_copy_page ( cairo_t* cr )
 
 FUNCTION: void
-cairo_show_page ( cairo_t* cr ) ;
+cairo_show_page ( cairo_t* cr )
 
 ! Insideness testing
+
 FUNCTION: cairo_bool_t
-cairo_in_stroke ( cairo_t* cr, double x, double y ) ;
+cairo_in_stroke ( cairo_t* cr, double x, double y )
 
 FUNCTION: cairo_bool_t
-cairo_in_fill ( cairo_t* cr, double x, double y ) ;
+cairo_in_fill ( cairo_t* cr, double x, double y )
 
 ! Rectangular extents
+
 FUNCTION: void
-cairo_stroke_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
+cairo_stroke_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 )
 
 FUNCTION: void
-cairo_fill_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
+cairo_fill_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 )
 
 ! Clipping
+
 FUNCTION: void
-cairo_reset_clip ( cairo_t* cr ) ;
+cairo_reset_clip ( cairo_t* cr )
 
 FUNCTION: void
-cairo_clip ( cairo_t* cr ) ;
+cairo_clip ( cairo_t* cr )
 
 FUNCTION: void
-cairo_clip_preserve ( cairo_t* cr ) ;
+cairo_clip_preserve ( cairo_t* cr )
 
 FUNCTION: void
-cairo_clip_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 ) ;
+cairo_clip_extents ( cairo_t* cr, double* x1, double* y1, double* x2, double* y2 )
+
+STRUCT: cairo_rectangle_t
+    { x      double }
+    { y      double }
+    { width  double }
+    { height double } ;
 
-C-STRUCT: cairo_rectangle_t
-    { "double" "x" }
-    { "double" "y" }
-    { "double" "width" }
-    { "double" "height" } ;
-    
-C-STRUCT: cairo_rectangle_list_t
-    { "cairo_status_t"     "status" }
-    { "cairo_rectangle_t*" "rectangles" }
-    { "int"                "num_rectangles" } ;
+STRUCT: cairo_rectangle_list_t
+    { status         cairo_status_t     }
+    { rectangles     cairo_rectangle_t* }
+    { num_rectangles int                } ;
 
 FUNCTION: cairo_rectangle_list_t*
-cairo_copy_clip_rectangle_list ( cairo_t* cr ) ;
+cairo_copy_clip_rectangle_list ( cairo_t* cr )
 
 FUNCTION: void
-cairo_rectangle_list_destroy ( cairo_rectangle_list_t* rectangle_list ) ;
+cairo_rectangle_list_destroy ( cairo_rectangle_list_t* rectangle_list )
 
 ! Font/Text functions
 
@@ -359,55 +363,69 @@ TYPEDEF: void* cairo_scaled_font_t
 
 TYPEDEF: void* cairo_font_face_t
 
-C-STRUCT: cairo_glyph_t
-  { "ulong"     "index" }
-  { "double"    "x" }
-  { "double"    "y" } ;
-
-C-STRUCT: cairo_text_extents_t
-    { "double" "x_bearing" }
-    { "double" "y_bearing" }
-    { "double" "width" }
-    { "double" "height" }
-    { "double" "x_advance" }
-    { "double" "y_advance" } ;
-
-C-STRUCT: cairo_font_extents_t
-    { "double" "ascent" }
-    { "double" "descent" }
-    { "double" "height" }
-    { "double" "max_x_advance" }
-    { "double" "max_y_advance" } ;
-
-TYPEDEF: int cairo_font_slant_t
-C-ENUM:
+STRUCT: cairo_glyph_t
+    { index ulong  }
+    { x     double }
+    { y     double } ;
+
+FUNCTION: cairo_glyph_t*
+cairo_glyph_allocate ( int num_glyphs )
+
+FUNCTION: void
+cairo_glyph_free ( cairo_glyph_t* glyphs )
+
+STRUCT: cairo_text_cluster_t
+    { num_bytes  int }
+    { num_glyphs int } ;
+
+FUNCTION: cairo_text_cluster_t*
+cairo_text_cluster_allocate ( int num_clusters )
+
+FUNCTION: void
+cairo_text_cluster_free ( cairo_text_cluster_t* clusters )
+
+ENUM: cairo_text_cluster_flags_t
+    { CAIRO_TEXT_CLUSTER_FLAG_BACKWARD 0x00000001 } ;
+
+STRUCT: cairo_text_extents_t
+    { x_bearing double }
+    { y_bearing double }
+    { width     double }
+    { height    double }
+    { x_advance double }
+    { y_advance double } ;
+
+STRUCT: cairo_font_extents_t
+    { ascent double }
+    { descent double }
+    { height double }
+    { max_x_advance double }
+    { max_y_advance double } ;
+
+ENUM: cairo_font_slant_t
     CAIRO_FONT_SLANT_NORMAL
     CAIRO_FONT_SLANT_ITALIC
     CAIRO_FONT_SLANT_OBLIQUE ;
 
-TYPEDEF: int cairo_font_weight_t
-C-ENUM:
+ENUM: cairo_font_weight_t
     CAIRO_FONT_WEIGHT_NORMAL
     CAIRO_FONT_WEIGHT_BOLD ;
 
-TYPEDEF: int cairo_subpixel_order_t
-C-ENUM:
+ENUM: cairo_subpixel_order_t
     CAIRO_SUBPIXEL_ORDER_DEFAULT
     CAIRO_SUBPIXEL_ORDER_RGB
     CAIRO_SUBPIXEL_ORDER_BGR
     CAIRO_SUBPIXEL_ORDER_VRGB
     CAIRO_SUBPIXEL_ORDER_VBGR ;
 
-TYPEDEF: int cairo_hint_style_t
-C-ENUM:
+ENUM: cairo_hint_style_t
     CAIRO_HINT_STYLE_DEFAULT
     CAIRO_HINT_STYLE_NONE
     CAIRO_HINT_STYLE_SLIGHT
     CAIRO_HINT_STYLE_MEDIUM
     CAIRO_HINT_STYLE_FULL ;
 
-TYPEDEF: int cairo_hint_metrics_t
-C-ENUM:
+ENUM: cairo_hint_metrics_t
     CAIRO_HINT_METRICS_DEFAULT
     CAIRO_HINT_METRICS_OFF
     CAIRO_HINT_METRICS_ON ;
@@ -415,298 +433,368 @@ C-ENUM:
 TYPEDEF: void* cairo_font_options_t
 
 FUNCTION: cairo_font_options_t*
-cairo_font_options_create ( ) ;
+cairo_font_options_create ( )
 
 FUNCTION: cairo_font_options_t*
-cairo_font_options_copy ( cairo_font_options_t* original ) ;
+cairo_font_options_copy ( cairo_font_options_t* original )
 
 FUNCTION: void
-cairo_font_options_destroy ( cairo_font_options_t* options ) ;
+cairo_font_options_destroy ( cairo_font_options_t* options )
 
 FUNCTION: cairo_status_t
-cairo_font_options_status ( cairo_font_options_t* options ) ;
+cairo_font_options_status ( cairo_font_options_t* options )
 
 FUNCTION: void
-cairo_font_options_merge ( cairo_font_options_t* options, cairo_font_options_t* other ) ;
+cairo_font_options_merge ( cairo_font_options_t* options, cairo_font_options_t* other )
 
 FUNCTION: cairo_bool_t
-cairo_font_options_equal ( cairo_font_options_t* options, cairo_font_options_t* other ) ;
+cairo_font_options_equal ( cairo_font_options_t* options, cairo_font_options_t* other )
 
 FUNCTION: ulong
-cairo_font_options_hash ( cairo_font_options_t* options ) ;
+cairo_font_options_hash ( cairo_font_options_t* options )
 
 FUNCTION: void
-cairo_font_options_set_antialias ( cairo_font_options_t* options, cairo_antialias_t antialias ) ;
+cairo_font_options_set_antialias ( cairo_font_options_t* options, cairo_antialias_t antialias )
 
 FUNCTION: cairo_antialias_t
-cairo_font_options_get_antialias ( cairo_font_options_t* options ) ;
+cairo_font_options_get_antialias ( cairo_font_options_t* options )
 
 FUNCTION: void
-cairo_font_options_set_subpixel_order ( cairo_font_options_t* options, cairo_subpixel_order_t subpixel_order ) ;
+cairo_font_options_set_subpixel_order ( cairo_font_options_t* options, cairo_subpixel_order_t subpixel_order )
 
 FUNCTION: cairo_subpixel_order_t
-cairo_font_options_get_subpixel_order ( cairo_font_options_t* options ) ;
+cairo_font_options_get_subpixel_order ( cairo_font_options_t* options )
 
 FUNCTION: void
-cairo_font_options_set_hint_style ( cairo_font_options_t* options, cairo_hint_style_t hint_style ) ;
+cairo_font_options_set_hint_style ( cairo_font_options_t* options, cairo_hint_style_t hint_style )
 
 FUNCTION: cairo_hint_style_t
-cairo_font_options_get_hint_style ( cairo_font_options_t* options ) ;
+cairo_font_options_get_hint_style ( cairo_font_options_t* options )
 
 FUNCTION: void
-cairo_font_options_set_hint_metrics ( cairo_font_options_t* options, cairo_hint_metrics_t hint_metrics ) ;
+cairo_font_options_set_hint_metrics ( cairo_font_options_t* options, cairo_hint_metrics_t hint_metrics )
 
 FUNCTION: cairo_hint_metrics_t
-cairo_font_options_get_hint_metrics ( cairo_font_options_t* options ) ;
+cairo_font_options_get_hint_metrics ( cairo_font_options_t* options )
 
 ! This interface is for dealing with text as text, not caring about the
 !  font object inside the the cairo_t.
 
 FUNCTION: void
-cairo_select_font_face ( cairo_t* cr, char* family, cairo_font_slant_t slant, cairo_font_weight_t weight ) ;
+cairo_select_font_face ( cairo_t* cr, c-string family, cairo_font_slant_t slant, cairo_font_weight_t weight )
 
 FUNCTION: void
-cairo_set_font_size ( cairo_t* cr, double size ) ;
+cairo_set_font_size ( cairo_t* cr, double size )
 
 FUNCTION: void
-cairo_set_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+cairo_set_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix )
 
 FUNCTION: void
-cairo_get_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+cairo_get_font_matrix ( cairo_t* cr, cairo_matrix_t* matrix )
 
 FUNCTION: void
-cairo_set_font_options ( cairo_t* cr, cairo_font_options_t* options ) ;
+cairo_set_font_options ( cairo_t* cr, cairo_font_options_t* options )
 
 FUNCTION: void
-cairo_get_font_options ( cairo_t* cr, cairo_font_options_t* options ) ;
+cairo_get_font_options ( cairo_t* cr, cairo_font_options_t* options )
 
 FUNCTION: void
-cairo_set_font_face ( cairo_t* cr, cairo_font_face_t* font_face ) ;
+cairo_set_font_face ( cairo_t* cr, cairo_font_face_t* font_face )
 
 FUNCTION: cairo_font_face_t*
-cairo_get_font_face ( cairo_t* cr ) ;
+cairo_get_font_face ( cairo_t* cr )
 
 FUNCTION: void
-cairo_set_scaled_font ( cairo_t* cr, cairo_scaled_font_t* scaled_font ) ;
+cairo_set_scaled_font ( cairo_t* cr, cairo_scaled_font_t* scaled_font )
 
 FUNCTION: cairo_scaled_font_t*
-cairo_get_scaled_font ( cairo_t* cr ) ;
+cairo_get_scaled_font ( cairo_t* cr )
+
+FUNCTION: void
+cairo_show_text ( cairo_t* cr, c-string utf8 )
 
 FUNCTION: void
-cairo_show_text ( cairo_t* cr, char* utf8 ) ;
+cairo_show_glyphs ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs )
 
 FUNCTION: void
-cairo_show_glyphs ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ;
+cairo_show_text_glyphs ( cairo_t* cr, c-string utf8, int utf8_len, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_cluster_t* clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags )
 
 FUNCTION: void
-cairo_text_path  ( cairo_t* cr, char* utf8 ) ;
+cairo_text_path ( cairo_t* cr, c-string utf8 )
 
 FUNCTION: void
-cairo_glyph_path ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs ) ;
+cairo_glyph_path ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs )
 
 FUNCTION: void
-cairo_text_extents ( cairo_t* cr, char* utf8, cairo_text_extents_t* extents ) ;
+cairo_text_extents ( cairo_t* cr, c-string utf8, cairo_text_extents_t* extents )
 
 FUNCTION: void
-cairo_glyph_extents ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ;
+cairo_glyph_extents ( cairo_t* cr, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents )
 
 FUNCTION: void
-cairo_font_extents ( cairo_t* cr, cairo_font_extents_t* extents ) ;
+cairo_font_extents ( cairo_t* cr, cairo_font_extents_t* extents )
 
 ! Generic identifier for a font style
 
 FUNCTION: cairo_font_face_t*
-cairo_font_face_reference ( cairo_font_face_t* font_face ) ;
+cairo_font_face_reference ( cairo_font_face_t* font_face )
 
 FUNCTION: void
-cairo_font_face_destroy ( cairo_font_face_t* font_face ) ;
+cairo_font_face_destroy ( cairo_font_face_t* font_face )
 
 FUNCTION: uint
-cairo_font_face_get_reference_count ( cairo_font_face_t* font_face ) ;
+cairo_font_face_get_reference_count ( cairo_font_face_t* font_face )
 
 FUNCTION: cairo_status_t
-cairo_font_face_status ( cairo_font_face_t* font_face ) ;
+cairo_font_face_status ( cairo_font_face_t* font_face )
 
-TYPEDEF: int cairo_font_type_t
-C-ENUM:
+ENUM: cairo_font_type_t
     CAIRO_FONT_TYPE_TOY
     CAIRO_FONT_TYPE_FT
     CAIRO_FONT_TYPE_WIN32
-    CAIRO_FONT_TYPE_QUARTZ ;
+    CAIRO_FONT_TYPE_QUARTZ
+    CAIRO_FONT_TYPE_USER ;
 
 FUNCTION: cairo_font_type_t
-cairo_font_face_get_type ( cairo_font_face_t* font_face ) ;
+cairo_font_face_get_type ( cairo_font_face_t* font_face )
 
-FUNCTION: void* 
-cairo_font_face_get_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key ) ;
+FUNCTION: void*
+cairo_font_face_get_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key )
 
 FUNCTION: cairo_status_t
-cairo_font_face_set_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+cairo_font_face_set_user_data ( cairo_font_face_t* font_face, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy )
 
 ! Portable interface to general font features.
 
 FUNCTION: cairo_scaled_font_t*
-cairo_scaled_font_create ( cairo_font_face_t* font_face, cairo_matrix_t* font_matrix, cairo_matrix_t* ctm, cairo_font_options_t* options ) ;
+cairo_scaled_font_create ( cairo_font_face_t* font_face, cairo_matrix_t* font_matrix, cairo_matrix_t* ctm, cairo_font_options_t* options )
 
 FUNCTION: cairo_scaled_font_t*
-cairo_scaled_font_reference ( cairo_scaled_font_t* scaled_font ) ;
+cairo_scaled_font_reference ( cairo_scaled_font_t* scaled_font )
 
 FUNCTION: void
-cairo_scaled_font_destroy ( cairo_scaled_font_t* scaled_font ) ;
+cairo_scaled_font_destroy ( cairo_scaled_font_t* scaled_font )
 
 FUNCTION: uint
-cairo_scaled_font_get_reference_count ( cairo_scaled_font_t* scaled_font ) ;
+cairo_scaled_font_get_reference_count ( cairo_scaled_font_t* scaled_font )
 
 FUNCTION: cairo_status_t
-cairo_scaled_font_status ( cairo_scaled_font_t* scaled_font ) ;
+cairo_scaled_font_status ( cairo_scaled_font_t* scaled_font )
 
 FUNCTION: cairo_font_type_t
-cairo_scaled_font_get_type ( cairo_scaled_font_t* scaled_font ) ;
+cairo_scaled_font_get_type ( cairo_scaled_font_t* scaled_font )
+
+FUNCTION: void*
+cairo_scaled_font_get_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key )
+
+FUNCTION: cairo_status_t
+cairo_scaled_font_set_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy )
+
+FUNCTION: void
+cairo_scaled_font_extents ( cairo_scaled_font_t* scaled_font, cairo_font_extents_t* extents )
 
-FUNCTION: void* 
-cairo_scaled_font_get_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key ) ;
+FUNCTION: void
+cairo_scaled_font_text_extents ( cairo_scaled_font_t* scaled_font, c-string utf8, cairo_text_extents_t* extents )
+
+FUNCTION: void
+cairo_scaled_font_glyph_extents ( cairo_scaled_font_t* scaled_font, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents )
 
 FUNCTION: cairo_status_t
-cairo_scaled_font_set_user_data ( cairo_scaled_font_t* scaled_font, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+cairo_scaled_font_text_to_glyphs ( cairo_scaled_font_t* scaled_font, double x, double y, c-string utf8, int utf8_len, cairo_glyph_t** glyphs, int* num_glyphs, cairo_text_cluster_t** clusters, int* num_clusters, cairo_text_cluster_flags_t* cluster_flags )
+
+FUNCTION: cairo_font_face_t*
+cairo_scaled_font_get_font_face ( cairo_scaled_font_t* scaled_font )
+
+FUNCTION: void
+cairo_scaled_font_get_font_matrix ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* font_matrix )
 
 FUNCTION: void
-cairo_scaled_font_extents ( cairo_scaled_font_t* scaled_font, cairo_font_extents_t* extents ) ;
+cairo_scaled_font_get_ctm ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* ctm )
 
 FUNCTION: void
-cairo_scaled_font_text_extents ( cairo_scaled_font_t* scaled_font, char* utf8, cairo_text_extents_t* extents ) ;
+cairo_scaled_font_get_scale_matrix ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* scale_matrix )
 
 FUNCTION: void
-cairo_scaled_font_glyph_extents ( cairo_scaled_font_t* scaled_font, cairo_glyph_t* glyphs, int num_glyphs, cairo_text_extents_t* extents ) ;
+cairo_scaled_font_get_font_options ( cairo_scaled_font_t* scaled_font, cairo_font_options_t* options )
+
+! Toy fonts
 
 FUNCTION: cairo_font_face_t*
-cairo_scaled_font_get_font_face ( cairo_scaled_font_t* scaled_font ) ;
+cairo_toy_font_face_create ( c-string family, cairo_font_slant_t slant, cairo_font_weight_t weight )
+
+FUNCTION: c-string
+cairo_toy_font_face_get_family ( cairo_font_face_t* font_face )
+
+FUNCTION: cairo_font_slant_t
+cairo_toy_font_face_get_slant ( cairo_font_face_t* font_face )
+
+FUNCTION: cairo_font_weight_t
+cairo_toy_font_face_get_weight ( cairo_font_face_t* font_face )
+
+! User fonts
+
+FUNCTION: cairo_font_face_t*
+cairo_user_font_face_create ( )
+
+! User-font method signatures
+
+CALLBACK: cairo_status_t
+cairo_user_scaled_font_init_func_t ( cairo_scaled_font_t* scaled_font, cairo_t* cr, cairo_font_extents_t* extents )
+
+CALLBACK: cairo_status_t
+cairo_user_scaled_font_render_glyph_func_t ( cairo_scaled_font_t* scaled_font, ulong glyph, cairo_t* cr, cairo_text_extents_t* extents )
+
+CALLBACK: cairo_status_t
+cairo_user_scaled_font_text_to_glyphs_func_t ( cairo_scaled_font_t* scaled_font, char* utf8, int utf8_len, cairo_glyph_t** glyphs, int* num_glyphs, cairo_text_cluster_t** clusters, int* num_clusters, cairo_text_cluster_flags_t* cluster_flags )
+
+CALLBACK: cairo_status_t
+cairo_user_scaled_font_unicode_to_glyph_func_t ( cairo_scaled_font_t* scaled_font, ulong unicode, ulong* glyph_index )
+
+! User-font method setters
 
 FUNCTION: void
-cairo_scaled_font_get_font_matrix ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* font_matrix ) ;
+cairo_user_font_face_set_init_func ( cairo_font_face_t* font_face, cairo_user_scaled_font_init_func_t init_func )
 
 FUNCTION: void
-cairo_scaled_font_get_ctm ( cairo_scaled_font_t* scaled_font, cairo_matrix_t* ctm ) ;
+cairo_user_font_face_set_render_glyph_func ( cairo_font_face_t* font_face, cairo_user_scaled_font_render_glyph_func_t render_glyph_func )
 
 FUNCTION: void
-cairo_scaled_font_get_font_options ( cairo_scaled_font_t* scaled_font, cairo_font_options_t* options ) ;
+cairo_user_font_face_set_text_to_glyphs_func ( cairo_font_face_t* font_face, cairo_user_scaled_font_text_to_glyphs_func_t text_to_glyphs_func )
+
+FUNCTION: void
+cairo_user_font_face_set_unicode_to_glyph_func ( cairo_font_face_t* font_face, cairo_user_scaled_font_unicode_to_glyph_func_t unicode_to_glyph_func )
+
+! User-font method getters
+
+FUNCTION: cairo_user_scaled_font_init_func_t
+cairo_user_font_face_get_init_func ( cairo_font_face_t* font_face )
+
+FUNCTION: cairo_user_scaled_font_render_glyph_func_t
+cairo_user_font_face_get_render_glyph_func ( cairo_font_face_t* font_face )
+
+FUNCTION: cairo_user_scaled_font_text_to_glyphs_func_t
+cairo_user_font_face_get_text_to_glyphs_func ( cairo_font_face_t* font_face )
+
+FUNCTION: cairo_user_scaled_font_unicode_to_glyph_func_t
+cairo_user_font_face_get_unicode_to_glyph_func ( cairo_font_face_t* font_face )
 
 ! Query functions
 
 FUNCTION: cairo_operator_t
-cairo_get_operator ( cairo_t* cr ) ;
+cairo_get_operator ( cairo_t* cr )
 
 FUNCTION: cairo_pattern_t*
-cairo_get_source ( cairo_t* cr ) ;
+cairo_get_source ( cairo_t* cr )
 
 FUNCTION: double
-cairo_get_tolerance ( cairo_t* cr ) ;
+cairo_get_tolerance ( cairo_t* cr )
 
 FUNCTION: cairo_antialias_t
-cairo_get_antialias ( cairo_t* cr ) ;
+cairo_get_antialias ( cairo_t* cr )
 
 FUNCTION: cairo_bool_t
-cairo_has_current_point ( cairo_t* cr ) ;
+cairo_has_current_point ( cairo_t* cr )
 
 FUNCTION: void
-cairo_get_current_point ( cairo_t* cr, double* x, double* y ) ;
+cairo_get_current_point ( cairo_t* cr, double* x, double* y )
 
 FUNCTION: cairo_fill_rule_t
-cairo_get_fill_rule ( cairo_t* cr ) ;
+cairo_get_fill_rule ( cairo_t* cr )
 
 FUNCTION: double
-cairo_get_line_width ( cairo_t* cr ) ;
+cairo_get_line_width ( cairo_t* cr )
 
 FUNCTION: cairo_line_cap_t
-cairo_get_line_cap ( cairo_t* cr ) ;
+cairo_get_line_cap ( cairo_t* cr )
 
 FUNCTION: cairo_line_join_t
-cairo_get_line_join ( cairo_t* cr ) ;
+cairo_get_line_join ( cairo_t* cr )
 
 FUNCTION: double
-cairo_get_miter_limit ( cairo_t* cr ) ;
+cairo_get_miter_limit ( cairo_t* cr )
 
 FUNCTION: int
-cairo_get_dash_count ( cairo_t* cr ) ;
+cairo_get_dash_count ( cairo_t* cr )
 
 FUNCTION: void
-cairo_get_dash ( cairo_t* cr, double* dashes, double* offset ) ;
+cairo_get_dash ( cairo_t* cr, double* dashes, double* offset )
 
 FUNCTION: void
-cairo_get_matrix ( cairo_t* cr, cairo_matrix_t* matrix ) ;
+cairo_get_matrix ( cairo_t* cr, cairo_matrix_t* matrix )
 
 FUNCTION: cairo_surface_t*
-cairo_get_target ( cairo_t* cr ) ;
+cairo_get_target ( cairo_t* cr )
 
 FUNCTION: cairo_surface_t*
-cairo_get_group_target ( cairo_t* cr ) ;
+cairo_get_group_target ( cairo_t* cr )
 
-TYPEDEF: int cairo_path_data_type_t
-C-ENUM:
+ENUM: cairo_path_data_type_t
     CAIRO_PATH_MOVE_TO
     CAIRO_PATH_LINE_TO
     CAIRO_PATH_CURVE_TO
     CAIRO_PATH_CLOSE_PATH ;
 
 ! NEED TO DO UNION HERE
-C-STRUCT: cairo_path_data_t-point
-    { "double" "x" }
-    { "double" "y" } ;
+STRUCT: cairo_path_data_t-point
+    { x double }
+    { y double } ;
 
-C-STRUCT: cairo_path_data_t-header
-    { "cairo_path_data_type_t" "type" }
-    { "int" "length" } ;
+STRUCT: cairo_path_data_t-header
+    { type cairo_path_data_type_t }
+    { length int } ;
 
-C-UNION: cairo_path_data_t "cairo_path_data_t-point" "cairo_path_data_t-header" ;
+UNION-STRUCT: cairo_path_data_t
+    { point  cairo_path_data_t-point }
+    { header cairo_path_data_t-header } ;
 
-C-STRUCT: cairo_path_t
-    { "cairo_status_t"      "status" }
-    { "cairo_path_data_t*"  "data" }
-    { "int"                 "num_data" } ;
+STRUCT: cairo_path_t
+    { status   cairo_status_t     }
+    { data     cairo_path_data_t* }
+    { num_data int                } ;
 
 FUNCTION: cairo_path_t*
-cairo_copy_path ( cairo_t* cr ) ;
+cairo_copy_path ( cairo_t* cr )
 
 FUNCTION: cairo_path_t*
-cairo_copy_path_flat ( cairo_t* cr ) ;
+cairo_copy_path_flat ( cairo_t* cr )
 
 FUNCTION: void
-cairo_append_path ( cairo_t* cr, cairo_path_t* path ) ;
+cairo_append_path ( cairo_t* cr, cairo_path_t* path )
 
 FUNCTION: void
-cairo_path_destroy ( cairo_path_t* path ) ;
+cairo_path_destroy ( cairo_path_t* path )
 
 ! Error status queries
 
 FUNCTION: cairo_status_t
-cairo_status ( cairo_t* cr ) ;
+cairo_status ( cairo_t* cr )
 
-FUNCTION: char* 
-cairo_status_to_string ( cairo_status_t status ) ;
+FUNCTION: c-string
+cairo_status_to_string ( cairo_status_t status )
 
 ! Surface manipulation
 
 FUNCTION: cairo_surface_t*
-cairo_surface_create_similar ( cairo_surface_t* other, cairo_content_t content, int width, int height ) ;
+cairo_surface_create_similar ( cairo_surface_t* other, cairo_content_t content, int width, int height )
 
 FUNCTION: cairo_surface_t*
-cairo_surface_reference ( cairo_surface_t* surface ) ;
+cairo_surface_reference ( cairo_surface_t* surface )
 
 FUNCTION: void
-cairo_surface_finish ( cairo_surface_t* surface ) ;
+cairo_surface_finish ( cairo_surface_t* surface )
 
 FUNCTION: void
-cairo_surface_destroy ( cairo_surface_t* surface ) ;
+cairo_surface_destroy ( cairo_surface_t* surface )
 
 DESTRUCTOR: cairo_surface_destroy
 
 FUNCTION: uint
-cairo_surface_get_reference_count ( cairo_surface_t* surface ) ;
+cairo_surface_get_reference_count ( cairo_surface_t* surface )
 
 FUNCTION: cairo_status_t
-cairo_surface_status ( cairo_surface_t* surface ) ;
+cairo_surface_status ( cairo_surface_t* surface )
 
-TYPEDEF: int cairo_surface_type_t
-C-ENUM:
+ENUM: cairo_surface_type_t
     CAIRO_SURFACE_TYPE_IMAGE
     CAIRO_SURFACE_TYPE_PDF
     CAIRO_SURFACE_TYPE_PS
@@ -723,162 +811,163 @@ C-ENUM:
     CAIRO_SURFACE_TYPE_QUARTZ_IMAGE ;
 
 FUNCTION: cairo_surface_type_t
-cairo_surface_get_type ( cairo_surface_t* surface ) ;
+cairo_surface_get_type ( cairo_surface_t* surface )
 
 FUNCTION: cairo_content_t
-cairo_surface_get_content ( cairo_surface_t* surface ) ;
+cairo_surface_get_content ( cairo_surface_t* surface )
 
 FUNCTION: cairo_status_t
-cairo_surface_write_to_png ( cairo_surface_t* surface, char* filename ) ;
+cairo_surface_write_to_png ( cairo_surface_t* surface, c-string filename )
 
 FUNCTION: cairo_status_t
-cairo_surface_write_to_png_stream ( cairo_surface_t* surface, cairo_write_func_t write_func, void* closure ) ;
+cairo_surface_write_to_png_stream ( cairo_surface_t* surface, cairo_write_func_t write_func, void* closure )
 
-FUNCTION: void* 
-cairo_surface_get_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key ) ;
+FUNCTION: void*
+cairo_surface_get_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key )
 
 FUNCTION: cairo_status_t
-cairo_surface_set_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+cairo_surface_set_user_data ( cairo_surface_t* surface, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy )
 
 FUNCTION: void
-cairo_surface_get_font_options ( cairo_surface_t* surface, cairo_font_options_t* options ) ;
+cairo_surface_get_font_options ( cairo_surface_t* surface, cairo_font_options_t* options )
 
 FUNCTION: void
-cairo_surface_flush ( cairo_surface_t* surface ) ;
+cairo_surface_flush ( cairo_surface_t* surface )
 
 FUNCTION: void
-cairo_surface_mark_dirty ( cairo_surface_t* surface ) ;
+cairo_surface_mark_dirty ( cairo_surface_t* surface )
 
 FUNCTION: void
-cairo_surface_mark_dirty_rectangle ( cairo_surface_t* surface, int x, int y, int width, int height ) ;
+cairo_surface_mark_dirty_rectangle ( cairo_surface_t* surface, int x, int y, int width, int height )
 
 FUNCTION: void
-cairo_surface_set_device_offset ( cairo_surface_t* surface, double x_offset, double y_offset ) ;
+cairo_surface_set_device_offset ( cairo_surface_t* surface, double x_offset, double y_offset )
 
 FUNCTION: void
-cairo_surface_get_device_offset ( cairo_surface_t* surface, double* x_offset, double* y_offset ) ;
+cairo_surface_get_device_offset ( cairo_surface_t* surface, double* x_offset, double* y_offset )
 
 FUNCTION: void
-cairo_surface_set_fallback_resolution ( cairo_surface_t* surface, double x_pixels_per_inch, double y_pixels_per_inch ) ;
+cairo_surface_set_fallback_resolution ( cairo_surface_t* surface, double x_pixels_per_inch, double y_pixels_per_inch )
 
 FUNCTION: void
-cairo_surface_copy_page ( cairo_surface_t* surface ) ;
+cairo_surface_get_fallback_resolution ( cairo_surface_t* surface, double* x_pixels_per_inch, double* y_pixels_per_inch )
 
 FUNCTION: void
-cairo_surface_show_page ( cairo_surface_t* surface ) ;
+cairo_surface_copy_page ( cairo_surface_t* surface )
+
+FUNCTION: void
+cairo_surface_show_page ( cairo_surface_t* surface )
+
+FUNCTION: cairo_bool_t
+cairo_surface_has_show_text_glyphs ( cairo_surface_t* surface )
 
 ! Image-surface functions
 
-TYPEDEF: int cairo_format_t
-C-ENUM:
+ENUM: cairo_format_t
     CAIRO_FORMAT_ARGB32
     CAIRO_FORMAT_RGB24
     CAIRO_FORMAT_A8
-    CAIRO_FORMAT_A1
-    CAIRO_FORMAT_RGB16_565 ;
+    CAIRO_FORMAT_A1 ;
 
 FUNCTION: cairo_surface_t*
-cairo_image_surface_create ( cairo_format_t format, int width, int height ) ;
+cairo_image_surface_create ( cairo_format_t format, int width, int height )
 
 FUNCTION: int
-cairo_format_stride_for_width ( cairo_format_t format, int width ) ;
+cairo_format_stride_for_width ( cairo_format_t format, int width )
 
 FUNCTION: cairo_surface_t*
-cairo_image_surface_create_for_data ( uchar* data, cairo_format_t format, int width, int height, int stride ) ;
+cairo_image_surface_create_for_data ( char* data, cairo_format_t format, int width, int height, int stride )
 
 FUNCTION: uchar*
-cairo_image_surface_get_data ( cairo_surface_t* surface ) ;
+cairo_image_surface_get_data ( cairo_surface_t* surface )
 
 FUNCTION: cairo_format_t
-cairo_image_surface_get_format ( cairo_surface_t* surface ) ;
+cairo_image_surface_get_format ( cairo_surface_t* surface )
 
 FUNCTION: int
-cairo_image_surface_get_width ( cairo_surface_t* surface ) ;
+cairo_image_surface_get_width ( cairo_surface_t* surface )
 
 FUNCTION: int
-cairo_image_surface_get_height ( cairo_surface_t* surface ) ;
+cairo_image_surface_get_height ( cairo_surface_t* surface )
 
 FUNCTION: int
-cairo_image_surface_get_stride ( cairo_surface_t* surface ) ;
+cairo_image_surface_get_stride ( cairo_surface_t* surface )
 
 FUNCTION: cairo_surface_t*
-cairo_image_surface_create_from_png ( char* filename ) ;
+cairo_image_surface_create_from_png ( c-string filename )
 
 FUNCTION: cairo_surface_t*
-cairo_image_surface_create_from_png_stream ( cairo_read_func_t read_func, void* closure ) ;
+cairo_image_surface_create_from_png_stream ( cairo_read_func_t read_func, void* closure )
 
 ! Pattern creation functions
 
 FUNCTION: cairo_pattern_t*
-cairo_pattern_create_rgb ( double red, double green, double blue ) ;
+cairo_pattern_create_rgb ( double red, double green, double blue )
 
 FUNCTION: cairo_pattern_t*
-cairo_pattern_create_rgba ( double red, double green, double blue, double alpha ) ;
+cairo_pattern_create_rgba ( double red, double green, double blue, double alpha )
 
 FUNCTION: cairo_pattern_t*
-cairo_pattern_create_for_surface ( cairo_surface_t* surface ) ;
+cairo_pattern_create_for_surface ( cairo_surface_t* surface )
 
 FUNCTION: cairo_pattern_t*
-cairo_pattern_create_linear ( double x0, double y0, double x1, double y1 ) ;
+cairo_pattern_create_linear ( double x0, double y0, double x1, double y1 )
 
 FUNCTION: cairo_pattern_t*
-cairo_pattern_create_radial ( double cx0, double cy0, double radius0, double cx1, double cy1, double radius1 ) ;
+cairo_pattern_create_radial ( double cx0, double cy0, double radius0, double cx1, double cy1, double radius1 )
 
 FUNCTION: cairo_pattern_t*
-cairo_pattern_reference ( cairo_pattern_t* pattern ) ;
+cairo_pattern_reference ( cairo_pattern_t* pattern )
 
 FUNCTION: void
-cairo_pattern_destroy ( cairo_pattern_t* pattern ) ;
+cairo_pattern_destroy ( cairo_pattern_t* pattern )
 
 FUNCTION: uint
-cairo_pattern_get_reference_count ( cairo_pattern_t* pattern ) ;
+cairo_pattern_get_reference_count ( cairo_pattern_t* pattern )
 
 FUNCTION: cairo_status_t
-cairo_pattern_status ( cairo_pattern_t* pattern ) ;
+cairo_pattern_status ( cairo_pattern_t* pattern )
 
 FUNCTION: void*
-cairo_pattern_get_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key ) ;
+cairo_pattern_get_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key )
 
 FUNCTION: cairo_status_t
-cairo_pattern_set_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy ) ;
+cairo_pattern_set_user_data ( cairo_pattern_t* pattern, cairo_user_data_key_t* key, void* user_data, cairo_destroy_func_t destroy )
 
-TYPEDEF: int cairo_pattern_type_t
-C-ENUM:
+ENUM: cairo_pattern_type_t
     CAIRO_PATTERN_TYPE_SOLID
     CAIRO_PATTERN_TYPE_SURFACE
     CAIRO_PATTERN_TYPE_LINEAR
-    CAIRO_PATTERN_TYPE_RADIA ;
+    CAIRO_PATTERN_TYPE_RADIAL ;
 
 FUNCTION: cairo_pattern_type_t
-cairo_pattern_get_type ( cairo_pattern_t* pattern ) ;
+cairo_pattern_get_type ( cairo_pattern_t* pattern )
 
 FUNCTION: void
-cairo_pattern_add_color_stop_rgb ( cairo_pattern_t* pattern, double offset, double red, double green, double blue ) ;
+cairo_pattern_add_color_stop_rgb ( cairo_pattern_t* pattern, double offset, double red, double green, double blue )
 
 FUNCTION: void
-cairo_pattern_add_color_stop_rgba ( cairo_pattern_t* pattern, double offset, double red, double green, double blue, double alpha ) ;
+cairo_pattern_add_color_stop_rgba ( cairo_pattern_t* pattern, double offset, double red, double green, double blue, double alpha )
 
 FUNCTION: void
-cairo_pattern_set_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ;
+cairo_pattern_set_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix )
 
 FUNCTION: void
-cairo_pattern_get_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix ) ;
+cairo_pattern_get_matrix ( cairo_pattern_t* pattern, cairo_matrix_t* matrix )
 
-TYPEDEF: int cairo_extend_t
-C-ENUM:
+ENUM: cairo_extend_t
     CAIRO_EXTEND_NONE
     CAIRO_EXTEND_REPEAT
     CAIRO_EXTEND_REFLECT
     CAIRO_EXTEND_PAD ;
 
 FUNCTION: void
-cairo_pattern_set_extend ( cairo_pattern_t* pattern, cairo_extend_t extend ) ;
+cairo_pattern_set_extend ( cairo_pattern_t* pattern, cairo_extend_t extend )
 
 FUNCTION: cairo_extend_t
-cairo_pattern_get_extend ( cairo_pattern_t* pattern ) ;
+cairo_pattern_get_extend ( cairo_pattern_t* pattern )
 
-TYPEDEF: int cairo_filter_t
-C-ENUM:
+ENUM: cairo_filter_t
     CAIRO_FILTER_FAST
     CAIRO_FILTER_GOOD
     CAIRO_FILTER_BEST
@@ -887,67 +976,67 @@ C-ENUM:
     CAIRO_FILTER_GAUSSIAN ;
 
 FUNCTION: void
-cairo_pattern_set_filter ( cairo_pattern_t* pattern, cairo_filter_t filter ) ;
+cairo_pattern_set_filter ( cairo_pattern_t* pattern, cairo_filter_t filter )
 
 FUNCTION: cairo_filter_t
-cairo_pattern_get_filter ( cairo_pattern_t* pattern ) ;
+cairo_pattern_get_filter ( cairo_pattern_t* pattern )
 
 FUNCTION: cairo_status_t
-cairo_pattern_get_rgba ( cairo_pattern_t* pattern, double* red, double* green, double* blue, double* alpha ) ;
+cairo_pattern_get_rgba ( cairo_pattern_t* pattern, double* red, double* green, double* blue, double* alpha )
 
 FUNCTION: cairo_status_t
-cairo_pattern_get_surface ( cairo_pattern_t* pattern, cairo_surface_t** surface ) ;
+cairo_pattern_get_surface ( cairo_pattern_t* pattern, cairo_surface_t** surface )
 
 FUNCTION: cairo_status_t
-cairo_pattern_get_color_stop_rgba ( cairo_pattern_t* pattern, int index, double* offset, double* red, double* green, double* blue, double* alpha ) ;
+cairo_pattern_get_color_stop_rgba ( cairo_pattern_t* pattern, int index, double* offset, double* red, double* green, double* blue, double* alpha )
 
 FUNCTION: cairo_status_t
-cairo_pattern_get_color_stop_count ( cairo_pattern_t* pattern, int* count ) ;
+cairo_pattern_get_color_stop_count ( cairo_pattern_t* pattern, int* count )
 
 FUNCTION: cairo_status_t
-cairo_pattern_get_linear_points ( cairo_pattern_t* pattern, double* x0, double* y0, double* x1, double* y1 ) ;
+cairo_pattern_get_linear_points ( cairo_pattern_t* pattern, double* x0, double* y0, double* x1, double* y1 )
 
 FUNCTION: cairo_status_t
-cairo_pattern_get_radial_circles ( cairo_pattern_t* pattern, double* x0, double* y0, double* r0, double* x1, double* y1, double* r1 ) ;
+cairo_pattern_get_radial_circles ( cairo_pattern_t* pattern, double* x0, double* y0, double* r0, double* x1, double* y1, double* r1 )
 
 ! Matrix functions
 
 FUNCTION: void
-cairo_matrix_init ( cairo_matrix_t* matrix, double  xx, double  yx, double  xy, double  yy, double  x0, double  y0 ) ;
+cairo_matrix_init ( cairo_matrix_t* matrix, double xx, double yx, double xy, double yy, double x0, double y0 )
 
 FUNCTION: void
-cairo_matrix_init_identity ( cairo_matrix_t* matrix ) ;
+cairo_matrix_init_identity ( cairo_matrix_t* matrix )
 
 FUNCTION: void
-cairo_matrix_init_translate ( cairo_matrix_t* matrix, double tx, double ty ) ;
+cairo_matrix_init_translate ( cairo_matrix_t* matrix, double tx, double ty )
 
 FUNCTION: void
-cairo_matrix_init_scale ( cairo_matrix_t* matrix, double sx, double sy ) ;
+cairo_matrix_init_scale ( cairo_matrix_t* matrix, double sx, double sy )
 
 FUNCTION: void
-cairo_matrix_init_rotate ( cairo_matrix_t* matrix, double radians ) ;
+cairo_matrix_init_rotate ( cairo_matrix_t* matrix, double radians )
 
 FUNCTION: void
-cairo_matrix_translate ( cairo_matrix_t* matrix, double tx, double ty ) ;
+cairo_matrix_translate ( cairo_matrix_t* matrix, double tx, double ty )
 
 FUNCTION: void
-cairo_matrix_scale ( cairo_matrix_t* matrix, double sx, double sy ) ;
+cairo_matrix_scale ( cairo_matrix_t* matrix, double sx, double sy )
 
 FUNCTION: void
-cairo_matrix_rotate ( cairo_matrix_t* matrix, double radians ) ;
+cairo_matrix_rotate ( cairo_matrix_t* matrix, double radians )
 
 FUNCTION: cairo_status_t
-cairo_matrix_invert ( cairo_matrix_t* matrix ) ;
+cairo_matrix_invert ( cairo_matrix_t* matrix )
 
 FUNCTION: void
-cairo_matrix_multiply ( cairo_matrix_t* result, cairo_matrix_t* a, cairo_matrix_t* b ) ;
+cairo_matrix_multiply ( cairo_matrix_t* result, cairo_matrix_t* a, cairo_matrix_t* b )
 
 FUNCTION: void
-cairo_matrix_transform_distance ( cairo_matrix_t* matrix, double* dx, double* dy ) ;
+cairo_matrix_transform_distance ( cairo_matrix_t* matrix, double* dx, double* dy )
 
 FUNCTION: void
-cairo_matrix_transform_point ( cairo_matrix_t* matrix, double* x, double* y ) ;
+cairo_matrix_transform_point ( cairo_matrix_t* matrix, double* x, double* y )
 
 ! Functions to be used while debugging (not intended for use in production code)
 FUNCTION: void
-cairo_debug_reset_static_data ( ) ;
+cairo_debug_reset_static_data ( )