Skip to content

Commit

Permalink
new harfbuzz version with full composition & decomposition engine
Browse files Browse the repository at this point in the history
fixed nglString::GetULength()
started to fix init / uninit... still some problems :/
  • Loading branch information
meeloo committed Jul 23, 2011
1 parent 9afc758 commit 416e31d
Show file tree
Hide file tree
Showing 12 changed files with 668 additions and 571 deletions.
110 changes: 44 additions & 66 deletions deps/harfbuzz/hb-buffer-private.hh
@@ -1,6 +1,7 @@
/*
* Copyright © 1998-2004 David Turner and Werner Lemberg
* Copyright © 2004,2007,2009,2010 Red Hat, Inc.
* Copyright © 2011 Google, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
Expand All @@ -23,6 +24,7 @@
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* Red Hat Author(s): Owen Taylor, Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/

#ifndef HB_BUFFER_PRIVATE_HH
Expand All @@ -46,52 +48,6 @@ typedef struct _hb_segment_properties_t {
} hb_segment_properties_t;


HB_INTERNAL void
_hb_buffer_swap (hb_buffer_t *buffer);

HB_INTERNAL void
_hb_buffer_clear_output (hb_buffer_t *buffer);

HB_INTERNAL void
_hb_buffer_clear_positions (hb_buffer_t *buffer);

HB_INTERNAL void
_hb_buffer_replace_glyphs_be16 (hb_buffer_t *buffer,
unsigned int num_in,
unsigned int num_out,
const uint16_t *glyph_data_be);

HB_INTERNAL void
_hb_buffer_replace_glyph (hb_buffer_t *buffer,
hb_codepoint_t glyph_index);

HB_INTERNAL void
_hb_buffer_output_glyph (hb_buffer_t *buffer,
hb_codepoint_t glyph_index);

HB_INTERNAL void
_hb_buffer_skip_glyph (hb_buffer_t *buffer);

HB_INTERNAL void
_hb_buffer_next_glyph (hb_buffer_t *buffer);


HB_INTERNAL void
_hb_buffer_reset_masks (hb_buffer_t *buffer,
hb_mask_t mask);

HB_INTERNAL void
_hb_buffer_add_masks (hb_buffer_t *buffer,
hb_mask_t mask);

HB_INTERNAL void
_hb_buffer_set_masks (hb_buffer_t *buffer,
hb_mask_t value,
hb_mask_t mask,
unsigned int cluster_start,
unsigned int cluster_end);


struct _hb_buffer_t {
hb_object_header_t header;

Expand All @@ -106,7 +62,7 @@ struct _hb_buffer_t {
bool have_output; /* Whether we have an output buffer going on */
bool have_positions; /* Whether we have positions */

unsigned int i; /* Cursor into ->info and ->pos arrays */
unsigned int idx; /* Cursor into ->info and ->pos arrays */
unsigned int len; /* Length of ->info and ->pos arrays */
unsigned int out_len; /* Length of ->out array if have_output */

Expand All @@ -119,22 +75,37 @@ struct _hb_buffer_t {


/* Methods */

HB_INTERNAL void reset (void);

inline unsigned int backtrack_len (void) const
{ return this->have_output? this->out_len : this->i; }
{ return have_output? out_len : idx; }
inline unsigned int next_serial (void) { return serial++; }
inline void swap (void) { _hb_buffer_swap (this); }
inline void clear_output (void) { _hb_buffer_clear_output (this); }
inline void clear_positions (void) { _hb_buffer_clear_positions (this); }
inline void next_glyph (void) { _hb_buffer_next_glyph (this); }
inline void replace_glyphs_be16 (unsigned int num_in,
unsigned int num_out,
const uint16_t *glyph_data_be)
{ _hb_buffer_replace_glyphs_be16 (this, num_in, num_out, glyph_data_be); }
inline void replace_glyph (hb_codepoint_t glyph_index)
{ _hb_buffer_replace_glyph (this, glyph_index); }
inline void output_glyph (hb_codepoint_t glyph_index)
{ _hb_buffer_output_glyph (this, glyph_index); }
inline void skip_glyph (void) { _hb_buffer_skip_glyph (this); }

HB_INTERNAL void add (hb_codepoint_t codepoint,
hb_mask_t mask,
unsigned int cluster);

HB_INTERNAL void reverse_range (unsigned int start, unsigned int end);
HB_INTERNAL void reverse (void);
HB_INTERNAL void reverse_clusters (void);

HB_INTERNAL void swap_buffers (void);
HB_INTERNAL void clear_output (void);
HB_INTERNAL void clear_positions (void);
HB_INTERNAL void replace_glyphs_be16 (unsigned int num_in,
unsigned int num_out,
const uint16_t *glyph_data_be);
HB_INTERNAL void replace_glyph (hb_codepoint_t glyph_index);
/* Makes a copy of the glyph at idx to output and replace glyph_index */
HB_INTERNAL void output_glyph (hb_codepoint_t glyph_index);
/* Copies glyph at idx to output but doesn't advance idx */
HB_INTERNAL void copy_glyph (void);
/* Copies glyph at idx to output and advance idx.
* If there's no output, just advance idx. */
HB_INTERNAL void next_glyph (void);
/* Advance idx without copying to output. */
inline void skip_glyph (void) { idx++; }

inline void reset_masks (hb_mask_t mask)
{
Expand All @@ -146,11 +117,18 @@ struct _hb_buffer_t {
for (unsigned int j = 0; j < len; j++)
info[j].mask |= mask;
}
inline void set_masks (hb_mask_t value,
hb_mask_t mask,
unsigned int cluster_start,
unsigned int cluster_end)
{ _hb_buffer_set_masks (this, value, mask, cluster_start, cluster_end); }
HB_INTERNAL void set_masks (hb_mask_t value,
hb_mask_t mask,
unsigned int cluster_start,
unsigned int cluster_end);

/* Internal methods */
HB_INTERNAL bool enlarge (unsigned int size);

inline bool ensure (unsigned int size)
{ return likely (size <= allocated) ? TRUE : enlarge (size); }

HB_INTERNAL bool make_room_for (unsigned int num_in, unsigned int num_out);
};


Expand Down

0 comments on commit 416e31d

Please sign in to comment.