[HarfBuzz] How many unicode make up a glyph?

ff.feng at Sunmedia.com.cn ff.feng at Sunmedia.com.cn
Thu Oct 30 22:21:37 PDT 2014


Dear Konstantin,

        I got it!

        Thank you for your help.

Best regards,




发件人:         Konstantin Ritt <ritt.ks at gmail.com>
收件人:         ff.feng at sunmedia.com.cn
抄送:   Harfbuzz <harfbuzz at lists.freedesktop.org>
日期:   2014/10/30 21:01
主题:   Re: [HarfBuzz] How many unicode make up a glyph?



Hi,
 
if I understood you correctly, you're talking about the Unicode code point 
to glyph mapping (aka logical to visual cluster mapping). If so, it would 
look like
{code}
const uint16_t *string = ..; // UTF-16 string
int str_len = ..; // length of `string` buffer
 
hb_buffer_add_utf16(buffer, string, str_len, 0, str_len);
..
hb_shape_full(..);
 
const uint num_glyphs = hb_buffer_get_length(buffer);
ensureSpace(num_glyphs); // ensure we have enough space for shaped glyphs 
and metrics (here we reallocate the `glyphs`, `advances`, and 
`offsets` buffers, if needed)
ushort *log_clusters = ..;
uint *glyphs = ..;
float *advances = ..;
float *offsets_x = ..;
float *offsets_y = ..;
 
// fetch the shaped glyphs and metrics
b_glyph_info_t *infos = hb_buffer_get_glyph_infos(buffer, 0);
hb_glyph_position_t *positions = hb_buffer_get_glyph_positions(buffer, 0);
uint str_pos = 0;
uint last_cluster = ~0u;
uint last_glyph_pos = 0;
for (uint i = 0; i < num_glyphs; ++i) {
    glyphs[i] = infos[i].codepoint;
    advances[i] = positions[i].x_advance;
    offsets_x[i] = positions[i].x_offset;
    offsets_y[i] = positions[i].y_offset;
 
    uint cluster = infos[i].cluster;
    if (last_cluster != cluster) {
        // fix up clusters so that the cluster indices will be monotonic
        // and thus we never return out-of-order indices
        while (last_cluster++ < cluster && str_pos < str_len)
            log_clusters[str_pos++] = last_glyph_pos;
        // [last_glyph_pos..i) forms a single glyph cluster; if you have 
glyph attributes, here you could remember the cluster start for iterating 
over the glyph clusters later, e.g. attribs[i].clusterStart = true;
        last_glyph_pos = i;
        last_cluster = cluster;
    }
}
while (str_pos < str_len)
    log_clusters[str_pos++] = last_glyph_pos;
{code}
 

Regards,
Konstantin

2014-10-30 6:50 GMT+04:00 <ff.feng at sunmedia.com.cn>:
Hi ! 

I'm developing a font engine with harfbuzz & freetype for Cambodia. 
I can get the correct glyph index array and position array by harfbuzz. 
That's sweet. 

Now I got a problem : I'm wondering how many unicode(UTF16) form a glyph? 
(If I specify a item in the glyph index array from 
hb_buffer_get_glyph_infos) 

thanks a lot & sorry for my poor English. 


Best regards, 
**********************************************************************
The preceding e-mail message (including any attachments) may contain 
confidential information intended for a specific individual and purpose.If 
you are not an intended recipient of this message, please notify the 
sender by replying to this message and then delete it from your 
system.Use,dissemination, distribution, or reproduction of this message by 
unintended recipients is not authorized and may be unlawful. 
**********************************************************************
 

_______________________________________________
HarfBuzz mailing list
HarfBuzz at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/harfbuzz



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/harfbuzz/attachments/20141031/fa02b23a/attachment.html>


More information about the HarfBuzz mailing list