Upgrade to latest harfbuzz
[framework/uifw/harfbuzz.git] / src / hb-buffer.h
index f06a255..fe53197 100644 (file)
@@ -1,8 +1,9 @@
 /*
- * Copyright (C) 1998-2004  David Turner and Werner Lemberg
- * Copyright (C) 2004,2007,2009  Red Hat, Inc.
+ * Copyright © 1998-2004  David Turner and Werner Lemberg
+ * Copyright © 2004,2007,2009  Red Hat, Inc.
+ * Copyright © 2011  Google, Inc.
  *
- * This is part of HarfBuzz, an OpenType Layout engine library.
+ *  This is part of HarfBuzz, a text shaping library.
  *
  * Permission is hereby granted, without written agreement and without
  * license or royalty fees, to use, copy, modify, and distribute this
  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  *
  * Red Hat Author(s): Owen Taylor, Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod
  */
 
+#ifndef HB_H_IN
+#error "Include <hb.h> instead."
+#endif
+
 #ifndef HB_BUFFER_H
 #define HB_BUFFER_H
 
 #include "hb-common.h"
+#include "hb-unicode.h"
 
 HB_BEGIN_DECLS
 
-typedef struct _hb_buffer_t hb_buffer_t;
 
-typedef enum _hb_direction_t {
-  HB_DIRECTION_LTR,
-  HB_DIRECTION_RTL,
-  HB_DIRECTION_TTB,
-  HB_DIRECTION_BTT
-} hb_direction_t;
+typedef struct _hb_buffer_t hb_buffer_t;
 
 typedef struct _hb_glyph_info_t {
   hb_codepoint_t codepoint;
   hb_mask_t      mask;
   uint32_t       cluster;
-  uint16_t       component;
-  uint16_t       lig_id;
-  uint32_t       internal;
+
+  /*< private >*/
+  hb_var_int_t   var1;
+  hb_var_int_t   var2;
 } hb_glyph_info_t;
 
 typedef struct _hb_glyph_position_t {
-  hb_position_t  x_pos;
-  hb_position_t  y_pos;
   hb_position_t  x_advance;
   hb_position_t  y_advance;
-  /* XXX these should all be replaced by "uint32_t internal" */
-  hb_bool_t      new_advance :1;       /* if set, the advance width values are
-                                          absolute, i.e., they won't be
-                                          added to the original glyph's value
-                                          but rather replace them */
-  unsigned short back : 15;            /* number of glyphs to go back
-                                          for drawing current glyph */
-  short          cursive_chain : 16;   /* character to which this connects,
-                                          may be positive or negative; used
-                                          only internally */
+  hb_position_t  x_offset;
+  hb_position_t  y_offset;
+
+  /*< private >*/
+  hb_var_int_t   var;
 } hb_glyph_position_t;
 
 
 hb_buffer_t *
-hb_buffer_create (unsigned int pre_alloc_size);
+hb_buffer_create (void);
 
 hb_buffer_t *
-hb_buffer_reference (hb_buffer_t *buffer);
+hb_buffer_get_empty (void);
 
-unsigned int
-hb_buffer_get_reference_count (hb_buffer_t *buffer);
+hb_buffer_t *
+hb_buffer_reference (hb_buffer_t *buffer);
 
 void
 hb_buffer_destroy (hb_buffer_t *buffer);
 
+hb_bool_t
+hb_buffer_set_user_data (hb_buffer_t        *buffer,
+                        hb_user_data_key_t *key,
+                        void *              data,
+                        hb_destroy_func_t   destroy,
+                        hb_bool_t           replace);
+
+void *
+hb_buffer_get_user_data (hb_buffer_t        *buffer,
+                        hb_user_data_key_t *key);
+
+
+void
+hb_buffer_set_unicode_funcs (hb_buffer_t        *buffer,
+                            hb_unicode_funcs_t *unicode_funcs);
+
+hb_unicode_funcs_t *
+hb_buffer_get_unicode_funcs (hb_buffer_t        *buffer);
 
 void
 hb_buffer_set_direction (hb_buffer_t    *buffer,
@@ -88,64 +101,96 @@ hb_buffer_set_direction (hb_buffer_t    *buffer,
 hb_direction_t
 hb_buffer_get_direction (hb_buffer_t *buffer);
 
-
 void
-hb_buffer_clear (hb_buffer_t *buffer);
+hb_buffer_set_script (hb_buffer_t *buffer,
+                     hb_script_t  script);
+
+hb_script_t
+hb_buffer_get_script (hb_buffer_t *buffer);
 
 void
-hb_buffer_clear_positions (hb_buffer_t *buffer);
+hb_buffer_set_language (hb_buffer_t   *buffer,
+                       hb_language_t  language);
+
+hb_language_t
+hb_buffer_get_language (hb_buffer_t *buffer);
+
 
+/* Resets the buffer.  Afterwards it's as if it was just created,
+ * except that it has a larger buffer allocated perhaps... */
 void
-hb_buffer_ensure (hb_buffer_t  *buffer,
-                 unsigned int  size);
+hb_buffer_reset (hb_buffer_t *buffer);
+
+/* Returns false if allocation failed */
+hb_bool_t
+hb_buffer_pre_allocate (hb_buffer_t  *buffer,
+                       unsigned int  size);
+
+
+/* Returns false if allocation has failed before */
+hb_bool_t
+hb_buffer_allocation_successful (hb_buffer_t  *buffer);
 
 void
 hb_buffer_reverse (hb_buffer_t *buffer);
 
+void
+hb_buffer_reverse_clusters (hb_buffer_t *buffer);
+
+void
+hb_buffer_guess_properties (hb_buffer_t *buffer);
+
 
 /* Filling the buffer in */
 
 void
-hb_buffer_add_glyph (hb_buffer_t    *buffer,
-                    hb_codepoint_t  codepoint,
-                    hb_mask_t       mask,
-                    unsigned int    cluster);
+hb_buffer_add (hb_buffer_t    *buffer,
+              hb_codepoint_t  codepoint,
+              hb_mask_t       mask,
+              unsigned int    cluster);
 
 void
 hb_buffer_add_utf8 (hb_buffer_t  *buffer,
                    const char   *text,
-                   unsigned int  text_length,
+                   int           text_length,
                    unsigned int  item_offset,
-                   unsigned int  item_length);
+                   int           item_length);
 
 void
 hb_buffer_add_utf16 (hb_buffer_t    *buffer,
                     const uint16_t *text,
-                    unsigned int    text_length,
+                    int             text_length,
                     unsigned int    item_offset,
-                    unsigned int    item_length);
+                    int             item_length);
 
 void
 hb_buffer_add_utf32 (hb_buffer_t    *buffer,
                     const uint32_t *text,
-                    unsigned int    text_length,
+                    int             text_length,
                     unsigned int    item_offset,
-                    unsigned int    item_length);
+                    int             item_length);
 
 
-/* Getting glyphs out of the buffer */
+/* Clears any new items added at the end */
+hb_bool_t
+hb_buffer_set_length (hb_buffer_t  *buffer,
+                     unsigned int  length);
 
 /* Return value valid as long as buffer not modified */
 unsigned int
-hb_buffer_get_len (hb_buffer_t *buffer);
+hb_buffer_get_length (hb_buffer_t *buffer);
+
+/* Getting glyphs out of the buffer */
 
 /* Return value valid as long as buffer not modified */
 hb_glyph_info_t *
-hb_buffer_get_glyph_infos (hb_buffer_t *buffer);
+hb_buffer_get_glyph_infos (hb_buffer_t  *buffer,
+                           unsigned int *length);
 
 /* Return value valid as long as buffer not modified */
 hb_glyph_position_t *
-hb_buffer_get_glyph_positions (hb_buffer_t *buffer);
+hb_buffer_get_glyph_positions (hb_buffer_t  *buffer,
+                               unsigned int *length);
 
 
 HB_END_DECLS