[HarfBuzz] Overwrite certain font characters

Kelvin Ma kelvinsthirteen at gmail.com
Tue Jun 28 23:20:15 UTC 2016


How does hb.font_get_glyph & hb.font_funcs_set_glyph_h_advance_func work?
Not sure i understand the concept here

On Tue, Jun 28, 2016 at 7:05 PM, Behdad Esfahbod <behdad at behdad.org> wrote:

> HarfBuzz already takes care of spaces if the font does not support:
>
>
> https://github.com/behdad/harfbuzz/blob/master/src/hb-unicode-private.hh#L204
>
> On Sun, Jun 26, 2016 at 10:56 AM, Kelvin Ma <kelvinsthirteen at gmail.com>
> wrote:
>
>> Knockout overwrites most whitespace characters to a hardcoded width and
>> special codepoint since most fonts can’t be trusted to properly construct
>> or even contain these characters.
>>
>> ## Codepoints ##
>>
>> nonbreaking_spaces = {
>>             '\u00A0': -30, # nbsp
>>             '\u2007': -36, # figure
>>             '\u202F': -40, # narrow nbsp
>>             }
>>
>> breaking_spaces = {
>>             '\u2003': -31, # em
>>             '\u2002': -32, # en
>>             '\u2004': -33, # 1/3
>>             '\u2005': -34, # 1/4
>>             '\u2006': -35, # 1/6
>>
>>             '\u2008': -37, # punctuation
>>             '\u2009': -38, # thin
>>             '\u200A': -39, # hair
>>
>>             '\u205F': -41, # math med
>>             }
>>
>>
>> ## Widths (as fraction of em) ##
>>
>> space = self.get_advance(self.character_index(' '), True)/UPM
>> fig = self.get_advance(self.character_index('0'), True)/UPM
>> punc = self.get_advance(self.character_index(','), True)/UPM
>>
>> self._widths = {
>>         None: 0,
>>         ' ': space,
>>         '\t': 0,
>>         '\u00A0': space,
>>         '\u2003': 1, # em
>>         '\u2002': 0.5, # en
>>         '\u2004': 1/3, # 1/3
>>         '\u2005': 0.25, # 1/4
>>         '\u2006': 1/6, # 1/6
>>         '\u2007': fig, # figure
>>         '\u2008': punc, # punctuation
>>         '\u2009': 0.2, # thin
>>         '\u200A': 0.1, # hair
>>         '\u202F': 0.2, # narrow nbsp
>>         '\u205F': 4/18, # math med
>>         }
>>
>>
>> ## character labels (for UI) ##
>>
>> self.spacenames = {
>>         -30: 'nb', # nbsp
>>         -31: 'em', # em
>>         -32: 'en', # en
>>         -33: '1/3', # 1/3
>>         -34: '1/4', # 1/4
>>         -35: '1/6', # 1/6
>>         -36: 'fig', # figure
>>         -37: 'pn', # punctuation
>>         -38: '1/5', # thin
>>         -39: 'h', # hair
>>         -40: 'nnb', # narrow nbsp
>>         -41: 'mt', # math med
>>         }
>>
>> My old layout engine would simply output the special negative codepoint
>> and advance like with any other character when it encountered those unicode
>> whitespace characters. (The negative codepoints are so that Knockout’s
>> renderer knows how to display them.) How do I do this in Harfbuzz? They are
>> important for mathematical typesetting.
>>
>> [image: Inline image 1]
>>
>> _______________________________________________
>> HarfBuzz mailing list
>> HarfBuzz at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/harfbuzz
>>
>>
>
>
> --
> behdad
> http://behdad.org/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/harfbuzz/attachments/20160628/cc227dff/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Selection_050.png
Type: image/png
Size: 9373 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/harfbuzz/attachments/20160628/cc227dff/attachment-0001.png>


More information about the HarfBuzz mailing list