From 23421dd8313bca930cc70494b5106e361317c4cf Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Wed, 19 Feb 2020 13:40:49 -0800 Subject: [PATCH] change clustering behavior --- fontland/fontland/unsafe/harfbuzz-helper.rkt | 315 ++++++++++--------- fontland/fontland/unsafe/harfbuzz.rkt | 5 + 2 files changed, 165 insertions(+), 155 deletions(-) diff --git a/fontland/fontland/unsafe/harfbuzz-helper.rkt b/fontland/fontland/unsafe/harfbuzz-helper.rkt index 5eb49704..ab715b36 100644 --- a/fontland/fontland/unsafe/harfbuzz-helper.rkt +++ b/fontland/fontland/unsafe/harfbuzz-helper.rkt @@ -7,164 +7,169 @@ (define hb-direction-values '(HB_DIRECTION_INVALID = 0 - HB_DIRECTION_LTR = 4 - HB_DIRECTION_RTL = 5 - HB_DIRECTION_TTB = 6 - HB_DIRECTION_BTT = 7)) + HB_DIRECTION_LTR = 4 + HB_DIRECTION_RTL = 5 + HB_DIRECTION_TTB = 6 + HB_DIRECTION_BTT = 7)) + +(define hb-cluster-levels + '(HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES = 0 + HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS = 1 + HB_BUFFER_CLUSTER_LEVEL_CHARACTERS = 2)) (define (->tag bstr) (integer-bytes->integer bstr #f #;(= unsigned) 'big-endian)) (define hb-script-values `(HB_SCRIPT_COMMON = ,(->tag #"Zyyy") - HB_SCRIPT_INHERITED = ,(->tag #"Zinh") - HB_SCRIPT_UNKNOWN = ,(->tag #"Zzzz") - HB_SCRIPT_ARABIC = ,(->tag #"Arab") - HB_SCRIPT_ARMENIAN - HB_SCRIPT_BENGALI - HB_SCRIPT_CYRILLIC - HB_SCRIPT_DEVANAGARI - HB_SCRIPT_GEORGIAN - HB_SCRIPT_GREEK - HB_SCRIPT_GUJARATI - HB_SCRIPT_GURMUKHI - HB_SCRIPT_HANGUL - HB_SCRIPT_HAN - HB_SCRIPT_HEBREW - HB_SCRIPT_HIRAGANA - HB_SCRIPT_KANNADA - HB_SCRIPT_KATAKANA - HB_SCRIPT_LAO - HB_SCRIPT_LATIN = ,(->tag #"Latn") - HB_SCRIPT_MALAYALAM - HB_SCRIPT_ORIYA - HB_SCRIPT_TAMIL - HB_SCRIPT_TELUGU - HB_SCRIPT_THAI - HB_SCRIPT_TIBETAN - HB_SCRIPT_BOPOMOFO - HB_SCRIPT_BRAILLE - HB_SCRIPT_CANADIAN_SYLLABICS - HB_SCRIPT_CHEROKEE - HB_SCRIPT_ETHIOPIC - HB_SCRIPT_KHMER - HB_SCRIPT_MONGOLIAN - HB_SCRIPT_MYANMAR - HB_SCRIPT_OGHAM - HB_SCRIPT_RUNIC - HB_SCRIPT_SINHALA - HB_SCRIPT_SYRIAC - HB_SCRIPT_THAANA - HB_SCRIPT_YI - HB_SCRIPT_DESERET - HB_SCRIPT_GOTHIC - HB_SCRIPT_OLD_ITALIC - HB_SCRIPT_BUHID - HB_SCRIPT_HANUNOO - HB_SCRIPT_TAGALOG - HB_SCRIPT_TAGBANWA - HB_SCRIPT_CYPRIOT - HB_SCRIPT_LIMBU - HB_SCRIPT_LINEAR_B - HB_SCRIPT_OSMANYA - HB_SCRIPT_SHAVIAN - HB_SCRIPT_TAI_LE - HB_SCRIPT_UGARITIC - HB_SCRIPT_BUGINESE - HB_SCRIPT_COPTIC - HB_SCRIPT_GLAGOLITIC - HB_SCRIPT_KHAROSHTHI - HB_SCRIPT_NEW_TAI_LUE - HB_SCRIPT_OLD_PERSIAN - HB_SCRIPT_SYLOTI_NAGRI - HB_SCRIPT_TIFINAGH - HB_SCRIPT_BALINESE - HB_SCRIPT_CUNEIFORM - HB_SCRIPT_NKO - HB_SCRIPT_PHAGS_PA - HB_SCRIPT_PHOENICIAN - HB_SCRIPT_CARIAN - HB_SCRIPT_CHAM - HB_SCRIPT_KAYAH_LI - HB_SCRIPT_LEPCHA - HB_SCRIPT_LYCIAN - HB_SCRIPT_LYDIAN - HB_SCRIPT_OL_CHIKI - HB_SCRIPT_REJANG - HB_SCRIPT_SAURASHTRA - HB_SCRIPT_SUNDANESE - HB_SCRIPT_VAI - HB_SCRIPT_AVESTAN - HB_SCRIPT_BAMUM - HB_SCRIPT_EGYPTIAN_HIEROGLYPHS - HB_SCRIPT_IMPERIAL_ARAMAIC - HB_SCRIPT_INSCRIPTIONAL_PAHLAVI - HB_SCRIPT_INSCRIPTIONAL_PARTHIAN - HB_SCRIPT_JAVANESE - HB_SCRIPT_KAITHI - HB_SCRIPT_LISU - HB_SCRIPT_MEETEI_MAYEK - HB_SCRIPT_OLD_SOUTH_ARABIAN - HB_SCRIPT_OLD_TURKIC - HB_SCRIPT_SAMARITAN - HB_SCRIPT_TAI_THAM - HB_SCRIPT_TAI_VIET - HB_SCRIPT_BATAK - HB_SCRIPT_BRAHMI - HB_SCRIPT_MANDAIC - HB_SCRIPT_CHAKMA - HB_SCRIPT_MEROITIC_CURSIVE - HB_SCRIPT_MEROITIC_HIEROGLYPHS - HB_SCRIPT_MIAO - HB_SCRIPT_SHARADA - HB_SCRIPT_SORA_SOMPENG - HB_SCRIPT_TAKRI - HB_SCRIPT_BASSA_VAH - HB_SCRIPT_CAUCASIAN_ALBANIAN - HB_SCRIPT_DUPLOYAN - HB_SCRIPT_ELBASAN - HB_SCRIPT_GRANTHA - HB_SCRIPT_KHOJKI - HB_SCRIPT_KHUDAWADI - HB_SCRIPT_LINEAR_A - HB_SCRIPT_MAHAJANI - HB_SCRIPT_MANICHAEAN - HB_SCRIPT_MENDE_KIKAKUI - HB_SCRIPT_MODI - HB_SCRIPT_MRO - HB_SCRIPT_NABATAEAN - HB_SCRIPT_OLD_NORTH_ARABIAN - HB_SCRIPT_OLD_PERMIC - HB_SCRIPT_PAHAWH_HMONG - HB_SCRIPT_PALMYRENE - HB_SCRIPT_PAU_CIN_HAU - HB_SCRIPT_PSALTER_PAHLAVI - HB_SCRIPT_SIDDHAM - HB_SCRIPT_TIRHUTA - HB_SCRIPT_WARANG_CITI - HB_SCRIPT_AHOM - HB_SCRIPT_ANATOLIAN_HIEROGLYPHS - HB_SCRIPT_HATRAN - HB_SCRIPT_MULTANI - HB_SCRIPT_OLD_HUNGARIAN - HB_SCRIPT_SIGNWRITING - HB_SCRIPT_ADLAM - HB_SCRIPT_BHAIKSUKI - HB_SCRIPT_MARCHEN - HB_SCRIPT_OSAGE - HB_SCRIPT_TANGUT - HB_SCRIPT_NEWA - HB_SCRIPT_MASARAM_GONDI - HB_SCRIPT_NUSHU - HB_SCRIPT_SOYOMBO - HB_SCRIPT_ZANABAZAR_SQUARE - HB_SCRIPT_DOGRA - HB_SCRIPT_GUNJALA_GONDI - HB_SCRIPT_HANIFI_ROHINGYA - HB_SCRIPT_MAKASAR - HB_SCRIPT_MEDEFAIDRIN - HB_SCRIPT_OLD_SOGDIAN - HB_SCRIPT_SOGDIAN - HB_SCRIPT_INVALID = ,(->tag #"\0\0\0\0") - _HB_SCRIPT_MAX_VALUE - _HB_SCRIPT_MAX_VALUE_SIGNED)) \ No newline at end of file + HB_SCRIPT_INHERITED = ,(->tag #"Zinh") + HB_SCRIPT_UNKNOWN = ,(->tag #"Zzzz") + HB_SCRIPT_ARABIC = ,(->tag #"Arab") + HB_SCRIPT_ARMENIAN + HB_SCRIPT_BENGALI + HB_SCRIPT_CYRILLIC + HB_SCRIPT_DEVANAGARI + HB_SCRIPT_GEORGIAN + HB_SCRIPT_GREEK + HB_SCRIPT_GUJARATI + HB_SCRIPT_GURMUKHI + HB_SCRIPT_HANGUL + HB_SCRIPT_HAN + HB_SCRIPT_HEBREW + HB_SCRIPT_HIRAGANA + HB_SCRIPT_KANNADA + HB_SCRIPT_KATAKANA + HB_SCRIPT_LAO + HB_SCRIPT_LATIN = ,(->tag #"Latn") + HB_SCRIPT_MALAYALAM + HB_SCRIPT_ORIYA + HB_SCRIPT_TAMIL + HB_SCRIPT_TELUGU + HB_SCRIPT_THAI + HB_SCRIPT_TIBETAN + HB_SCRIPT_BOPOMOFO + HB_SCRIPT_BRAILLE + HB_SCRIPT_CANADIAN_SYLLABICS + HB_SCRIPT_CHEROKEE + HB_SCRIPT_ETHIOPIC + HB_SCRIPT_KHMER + HB_SCRIPT_MONGOLIAN + HB_SCRIPT_MYANMAR + HB_SCRIPT_OGHAM + HB_SCRIPT_RUNIC + HB_SCRIPT_SINHALA + HB_SCRIPT_SYRIAC + HB_SCRIPT_THAANA + HB_SCRIPT_YI + HB_SCRIPT_DESERET + HB_SCRIPT_GOTHIC + HB_SCRIPT_OLD_ITALIC + HB_SCRIPT_BUHID + HB_SCRIPT_HANUNOO + HB_SCRIPT_TAGALOG + HB_SCRIPT_TAGBANWA + HB_SCRIPT_CYPRIOT + HB_SCRIPT_LIMBU + HB_SCRIPT_LINEAR_B + HB_SCRIPT_OSMANYA + HB_SCRIPT_SHAVIAN + HB_SCRIPT_TAI_LE + HB_SCRIPT_UGARITIC + HB_SCRIPT_BUGINESE + HB_SCRIPT_COPTIC + HB_SCRIPT_GLAGOLITIC + HB_SCRIPT_KHAROSHTHI + HB_SCRIPT_NEW_TAI_LUE + HB_SCRIPT_OLD_PERSIAN + HB_SCRIPT_SYLOTI_NAGRI + HB_SCRIPT_TIFINAGH + HB_SCRIPT_BALINESE + HB_SCRIPT_CUNEIFORM + HB_SCRIPT_NKO + HB_SCRIPT_PHAGS_PA + HB_SCRIPT_PHOENICIAN + HB_SCRIPT_CARIAN + HB_SCRIPT_CHAM + HB_SCRIPT_KAYAH_LI + HB_SCRIPT_LEPCHA + HB_SCRIPT_LYCIAN + HB_SCRIPT_LYDIAN + HB_SCRIPT_OL_CHIKI + HB_SCRIPT_REJANG + HB_SCRIPT_SAURASHTRA + HB_SCRIPT_SUNDANESE + HB_SCRIPT_VAI + HB_SCRIPT_AVESTAN + HB_SCRIPT_BAMUM + HB_SCRIPT_EGYPTIAN_HIEROGLYPHS + HB_SCRIPT_IMPERIAL_ARAMAIC + HB_SCRIPT_INSCRIPTIONAL_PAHLAVI + HB_SCRIPT_INSCRIPTIONAL_PARTHIAN + HB_SCRIPT_JAVANESE + HB_SCRIPT_KAITHI + HB_SCRIPT_LISU + HB_SCRIPT_MEETEI_MAYEK + HB_SCRIPT_OLD_SOUTH_ARABIAN + HB_SCRIPT_OLD_TURKIC + HB_SCRIPT_SAMARITAN + HB_SCRIPT_TAI_THAM + HB_SCRIPT_TAI_VIET + HB_SCRIPT_BATAK + HB_SCRIPT_BRAHMI + HB_SCRIPT_MANDAIC + HB_SCRIPT_CHAKMA + HB_SCRIPT_MEROITIC_CURSIVE + HB_SCRIPT_MEROITIC_HIEROGLYPHS + HB_SCRIPT_MIAO + HB_SCRIPT_SHARADA + HB_SCRIPT_SORA_SOMPENG + HB_SCRIPT_TAKRI + HB_SCRIPT_BASSA_VAH + HB_SCRIPT_CAUCASIAN_ALBANIAN + HB_SCRIPT_DUPLOYAN + HB_SCRIPT_ELBASAN + HB_SCRIPT_GRANTHA + HB_SCRIPT_KHOJKI + HB_SCRIPT_KHUDAWADI + HB_SCRIPT_LINEAR_A + HB_SCRIPT_MAHAJANI + HB_SCRIPT_MANICHAEAN + HB_SCRIPT_MENDE_KIKAKUI + HB_SCRIPT_MODI + HB_SCRIPT_MRO + HB_SCRIPT_NABATAEAN + HB_SCRIPT_OLD_NORTH_ARABIAN + HB_SCRIPT_OLD_PERMIC + HB_SCRIPT_PAHAWH_HMONG + HB_SCRIPT_PALMYRENE + HB_SCRIPT_PAU_CIN_HAU + HB_SCRIPT_PSALTER_PAHLAVI + HB_SCRIPT_SIDDHAM + HB_SCRIPT_TIRHUTA + HB_SCRIPT_WARANG_CITI + HB_SCRIPT_AHOM + HB_SCRIPT_ANATOLIAN_HIEROGLYPHS + HB_SCRIPT_HATRAN + HB_SCRIPT_MULTANI + HB_SCRIPT_OLD_HUNGARIAN + HB_SCRIPT_SIGNWRITING + HB_SCRIPT_ADLAM + HB_SCRIPT_BHAIKSUKI + HB_SCRIPT_MARCHEN + HB_SCRIPT_OSAGE + HB_SCRIPT_TANGUT + HB_SCRIPT_NEWA + HB_SCRIPT_MASARAM_GONDI + HB_SCRIPT_NUSHU + HB_SCRIPT_SOYOMBO + HB_SCRIPT_ZANABAZAR_SQUARE + HB_SCRIPT_DOGRA + HB_SCRIPT_GUNJALA_GONDI + HB_SCRIPT_HANIFI_ROHINGYA + HB_SCRIPT_MAKASAR + HB_SCRIPT_MEDEFAIDRIN + HB_SCRIPT_OLD_SOGDIAN + HB_SCRIPT_SOGDIAN + HB_SCRIPT_INVALID = ,(->tag #"\0\0\0\0") + _HB_SCRIPT_MAX_VALUE + _HB_SCRIPT_MAX_VALUE_SIGNED)) \ No newline at end of file diff --git a/fontland/fontland/unsafe/harfbuzz.rkt b/fontland/fontland/unsafe/harfbuzz.rkt index 022e9ce5..97de1448 100644 --- a/fontland/fontland/unsafe/harfbuzz.rkt +++ b/fontland/fontland/unsafe/harfbuzz.rkt @@ -33,6 +33,7 @@ (define (default-buffer-setup buf) (hb_buffer_set_direction buf 'HB_DIRECTION_LTR) (hb_buffer_set_script buf 'HB_SCRIPT_LATIN) + (hb_buffer_set_cluster_level buf 'HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS) (hb_buffer_set_language buf (hb_language_from_string #"en")) buf) @@ -55,6 +56,10 @@ (_int = text-length) -> _void)) +(define _hb_cluster_t (_enum hb-cluster-levels)) +(define-harfbuzz hb_buffer_set_cluster_level (_fun _hb_buffer_t _hb_cluster_t -> _void)) +(define-harfbuzz hb_buffer_get_cluster_level (_fun _hb_buffer_t -> _hb_cluster_t)) + (define _hb_direction_t (_enum hb-direction-values)) (define-harfbuzz hb_buffer_set_direction (_fun _hb_buffer_t _hb_direction_t -> _void)) (define-harfbuzz hb_buffer_get_direction (_fun _hb_buffer_t -> _hb_direction_t))