package vendor:kb_text_shape
Index
Types (61)
- bracket
- break_flag
- break_flags
- break_state
- break_state_flag
- break_state_flags
- break_type
- cmap_14
- cursor
- direction
- feature
- feature_id
- feature_set
- feature_tag
- font
- gdef
- glyph
- glyph_array
- glyph_classes
- glyph_flag
- glyph_flags
- gsub_gpos
- hea
- head
- indic_script_properties
- iterate_features
- japanese_line_break_style
- joining_feature
- langsys
- language
- line_break_class
- lookup_indices
- lookup_info
- lookup_subtable_info
- maxp
- op
- op_kind
- op_list
- op_state
- op_state_gsub
- op_state_normalize
- op_state_normalize_hangul
- op_state_op_specific
- orientation
- reph_encoding
- reph_position
- script
- shape_config
- shape_state
- shaper
- shaper_properties
- shaping_table
- skip_flag
- skip_flags
- syllabic_position
- un
- unicode_bidirectional_class
- unicode_flag
- unicode_flags
- unicode_joining_type
- word_break_class
Constants (14)
- BREAK_FLAGS_ANY
- BREAK_FLAGS_DIRECTION
- BREAK_FLAGS_GRAPHEME
- BREAK_FLAGS_LINE
- BREAK_FLAGS_LINE_HARD
- BREAK_FLAGS_LINE_SOFT
- BREAK_FLAGS_SCRIPT
- BREAK_FLAGS_WORD
- BREAK_REORDER_BUFFER_FLUSH_THRESHOLD
- BREAK_REORDER_BUFFER_SIZE
- GLYPH_FEATURE_MASK
- JOINING_FEATURE_MASK
- MAX_SIMULTANEOUS_FEATURES
- USE_GLYPH_FEATURE_MASK
Variables (0)
This section is empty.
Procedures (26)
- BeginBreak
- Break
- BreakAddCodepoint
- BreakFlush
- BreakStateIsValid
- CodepointToGlyph
- CreateShapeState
- Cursor
- DecodeUtf8
- FontFromMemory
- FontIsValid
- FreeFont
- FreeShapeState
- InferScript
- PlaceShapeState
- PositionGlyph
- PostReadFontInitialize
- ReadFontData
- ReadFontHeader
- ResetShapeState
- ScriptIsComplex
- Shape
- ShapeConfig
- ShapeDynamic
- ShaperIsComplex
- SizeOfShapeState
Procedure Groups (0)
This section is empty.
Types
break_flag ¶
break_flag :: enum u32 { // Direction changes from left-to-right to right-to-left, or vice versa. DIRECTION = 0, // Script changes. // Note that some characters, such as digits, are used in multiple // scripts and, as such, will not produce script breaks. SCRIPT = 1, // Graphemes are "visual units". They may be composed of more than one codepoint. // They are used as interaction boundaries in graphical interfaces, e.g. moving the // caret. GRAPHEME = 2, // In most scripts, words are broken up by whitespace, but Unicode word breaking has // better script coverage and also handles some special cases that a simple stateless // loop cannot handle. WORD = 3, // By default, you are not allowed to break a line. // Soft line breaks allow for line breaking, but do not require it. // This is useful for when you are doing line wrapping. LINE_SOFT = 4, // Hard line breaks are required. They signal the end of a paragraph. // (In Unicode, there is no meaningful distinction between a line and a paragraph. // a paragraph is pretty much just a line of text that can wrap.) LINE_HARD = 5, }
break_state ¶
break_state :: struct { Breaks: [8]break_type `fmt:"v,Breaks"`, BreakCount: u32, MainDirection: direction, LastFlushedBreakPosition: u32, CurrentPosition: u32, LastScripts: [2]u8, Brackets: [64]bracket `fmt:"v,BracketCount"`, BracketCount: u32, Flags: break_state_flags, FlagState: bit_field u32 { _0: u32 | 8, _1: u32 | 8, _2: u32 | 8, _3: u32 | 8, }, PositionOffset2: i16, PositionOffset3: i16, WordBreakHistory: bit_field u32 { _0: u32 | 8, _1: u32 | 8, _2: u32 | 8, _3: u32 | 8, }, WordBreaks: bit_field u16 { _0: u16 | 4, _1: u16 | 4, _2: u16 | 4, _3: u16 | 4, }, WordUnbreaks: bit_field u16 { _0: u16 | 4, _1: u16 | 4, _2: u16 | 4, _3: u16 | 4, }, WordBreak2PositionOffset: i16, LineBreaks: bit_field u64 { _0: u64 | 16, _1: u64 | 16, _2: u64 | 16, _3: u64 | 16, }, // Instead of staying synchronized with LineBreaks/LineUnbreaks, // this advances every character always. // (This is only needed because ZWJ can create an unbreak while simultaneously being ignored.) LineUnbreaksAsync: bit_field u64 { _0: u64 | 16, _1: u64 | 16, _2: u64 | 16, _3: u64 | 16, }, LineUnbreaks: bit_field u64 { _0: u64 | 16, _1: u64 | 16, _2: u64 | 16, _3: u64 | 16, }, LineBreakHistory: bit_field u32 { _0: u32 | 8, _1: u32 | 8, _2: u32 | 8, _3: u32 | 8, }, LineBreak2PositionOffset: i16, LineBreak3PositionOffset: i16, using LastDirectionBitField: bit_field u8 { LastDirection: direction | 8, }, BidirectionalClass2: unicode_bidirectional_class, BidirectionalClass1: unicode_bidirectional_class, JapaneseLineBreakStyle: japanese_line_break_style, GraphemeBreakState: u8, LastLineBreakClass: line_break_class, LastWordBreakClass: word_break_class, LastWordBreakClassIncludingIgnored: word_break_class, }
Related Procedures With Parameters
break_state_flag ¶
break_state_flag :: enum u32 { STARTED = 0, END = 1, RAN_OUT_OF_REORDER_BUFFER_SPACE = 2, // Bidirectional flags SAW_R_AFTER_L = 3, SAW_AL_AFTER_LR = 4, LAST_WAS_BRACKET = 5, }
break_state_flags ¶
break_state_flags :: distinct bit_set[break_state_flag; u32]
break_type ¶
break_type :: struct { // The break code mostly works in relative positions, but we convert to absolute positions for the user. // That way, breaks can be trivially stored and compared and such and it just works. Position: u32, Flags: break_flags, Direction: direction, // Only valid if (Flags & BREAK_FLAG_DIRECTION). Script: script, }
Related Procedures With Parameters
feature_id ¶
feature_id :: enum u32 { isol, // Isolated Forms fina, // Terminal Forms fin2, // Terminal Forms #2 fin3, // Terminal Forms #3 medi, // Medial Forms med2, // Medial Forms #2 init, // Initial Forms ljmo, // Leading Jamo Forms vjmo, // Vowel Jamo Forms tjmo, // Trailing Jamo Forms rphf, // Reph Form blwf, // Below-base Forms half, // Half Forms pstf, // Post-base Forms abvf, // Above-base Forms pref, // Pre-base Forms numr, // Numerators frac, // Fractions dnom, // Denominators cfar, // Conjunct Form After Ro aalt, // Access All Alternates abvm, // Above-base Mark Positioning abvs, // Above-base Substitutions afrc, // Alternative Fractions akhn, // Akhand apkn, // Kerning for Alternate Proportional Widths blwm, // Below-base Mark Positioning blws, // Below-base Substitutions calt, // Contextual Alternates Case, // Case-sensitive Forms ccmp, // Glyph Composition / Decomposition chws, // Contextual Half-width Spacing cjct, // Conjunct Forms clig, // Contextual Ligatures cpct, // Centered CJK Punctuation cpsp, // Capital Spacing cswh, // Contextual Swash curs, // Cursive Positioning cv01, // 'cv99' Character Variant 1 – Character Variant 99 c2pc, // Petite Capitals From Capitals c2sc, // Small Capitals From Capitals dist, // Distances dlig, // Discretionary Ligatures dtls, // Dotless Forms expt, // Expert Forms falt, // Final Glyph on Line Alternates flac, // Flattened Accent Forms fwid, // Full Widths haln, // Halant Forms halt, // Alternate Half Widths hist, // Historical Forms hkna, // Horizontal Kana Alternates hlig, // Historical Ligatures hngl, // Hangul hojo, // Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms) hwid, // Half Widths ital, // Italics jalt, // Justification Alternates jp78, // JIS78 Forms jp83, // JIS83 Forms jp90, // JIS90 Forms jp04, // JIS2004 Forms kern, // Kerning lfbd, // Left Bounds liga, // Standard Ligatures lnum, // Lining Figures locl, // Localized Forms ltra, // Left-to-right Alternates ltrm, // Left-to-right Mirrored Forms mark, // Mark Positioning mgrk, // Mathematical Greek mkmk, // Mark to Mark Positioning mset, // Mark Positioning via Substitution nalt, // Alternate Annotation Forms nlck, // NLC Kanji Forms nukt, // Nukta Forms onum, // Oldstyle Figures opbd, // Optical Bounds ordn, // Ordinals ornm, // Ornaments palt, // Proportional Alternate Widths pcap, // Petite Capitals pkna, // Proportional Kana pnum, // Proportional Figures pres, // Pre-base Substitutions psts, // Post-base Substitutions pwid, // Proportional Widths qwid, // Quarter Widths rand, // Randomize rclt, // Required Contextual Alternates rkrf, // Rakar Forms rlig, // Required Ligatures rtbd, // Right Bounds rtla, // Right-to-left Alternates rtlm, // Right-to-left Mirrored Forms ruby, // Ruby Notation Forms rvrn, // Required Variation Alternates salt, // Stylistic Alternates sinf, // Scientific Inferiors size, // Optical size smcp, // Small Capitals smpl, // Simplified Forms ss01, // 'ss20' Stylistic Set 1 – Stylistic Set 20 ssty, // Math Script-style Alternates stch, // Stretching Glyph Decomposition subs, // Subscript sups, // Superscript swsh, // Swash test, // Test features, only for development titl, // Titling tnam, // Traditional Name Forms tnum, // Tabular Figures trad, // Traditional Forms twid, // Third Widths unic, // Unicase valt, // Alternate Vertical Metrics vapk, // Kerning for Alternate Proportional Vertical Metrics vatu, // Vattu Variants vchw, // Vertical Contextual Half-width Spacing vert, // Vertical Alternates vhal, // Alternate Vertical Half Metrics vkna, // Vertical Kana Alternates vkrn, // Vertical Kerning vpal, // Proportional Alternate Vertical Metrics vrt2, // Vertical Alternates and Rotation vrtr, // Vertical Alternates for Rotation zero, // Slashed Zero }
feature_set ¶
feature_set :: struct { Flags: [2]u64, }
feature_tag ¶
feature_tag :: enum u32 { isol = 1819243369, // Isolated Forms fina = 1634625894, // Terminal Forms fin2 = 846096742, // Terminal Forms #2 fin3 = 862873958, // Terminal Forms #3 medi = 1768187245, // Medial Forms med2 = 845440365, // Medial Forms #2 init = 1953066601, // Initial Forms ljmo = 1869441644, // Leading Jamo Forms vjmo = 1869441654, // Vowel Jamo Forms tjmo = 1869441652, // Trailing Jamo Forms rphf = 1718120562, // Reph Form blwf = 1719102562, // Below-base Forms half = 1718378856, // Half Forms pstf = 1718907760, // Post-base Forms abvf = 1719034465, // Above-base Forms pref = 1717924464, // Pre-base Forms numr = 1919776110, // Numerators frac = 1667330662, // Fractions dnom = 1836019300, // Denominators cfar = 1918985827, // Conjunct Form After Ro aalt = 1953259873, // Access All Alternates abvm = 1836474977, // Above-base Mark Positioning abvs = 1937138273, // Above-base Substitutions afrc = 1668441697, // Alternative Fractions akhn = 1852336993, // Akhand apkn = 1852534881, // Kerning for Alternate Proportional Widths blwm = 1836543074, // Below-base Mark Positioning blws = 1937206370, // Below-base Substitutions calt = 1953259875, // Contextual Alternates Case = 1702060387, // Case-sensitive Forms ccmp = 1886217059, // Glyph Composition / Decomposition chws = 1937205347, // Contextual Half-width Spacing cjct = 1952672355, // Conjunct Forms clig = 1734962275, // Contextual Ligatures cpct = 1952673891, // Centered CJK Punctuation cpsp = 1886613603, // Capital Spacing cswh = 1752658787, // Contextual Swash curs = 1936880995, // Cursive Positioning cv01 = 825259619, // 'cv99' Character Variant 1 – Character Variant 99 c2pc = 1668297315, // Petite Capitals From Capitals c2sc = 1668493923, // Small Capitals From Capitals dist = 1953720676, // Distances dlig = 1734962276, // Discretionary Ligatures dtls = 1936487524, // Dotless Forms expt = 1953527909, // Expert Forms falt = 1953259878, // Final Glyph on Line Alternates flac = 1667329126, // Flattened Accent Forms fwid = 1684633446, // Full Widths haln = 1852596584, // Halant Forms halt = 1953259880, // Alternate Half Widths hist = 1953720680, // Historical Forms hkna = 1634626408, // Horizontal Kana Alternates hlig = 1734962280, // Historical Ligatures hngl = 1818717800, // Hangul hojo = 1869246312, // Hojo Kanji Forms (JIS X 0212-1990 Kanji Forms) hwid = 1684633448, // Half Widths ital = 1818326121, // Italics jalt = 1953259882, // Justification Alternates jp78 = 943157354, // JIS78 Forms jp83 = 859336810, // JIS83 Forms jp90 = 809070698, // JIS90 Forms jp04 = 875589738, // JIS2004 Forms kern = 1852990827, // Kerning lfbd = 1684170348, // Left Bounds liga = 1634167148, // Standard Ligatures lnum = 1836412524, // Lining Figures locl = 1818455916, // Localized Forms ltra = 1634890860, // Left-to-right Alternates ltrm = 1836217452, // Left-to-right Mirrored Forms mark = 1802658157, // Mark Positioning mgrk = 1802659693, // Mathematical Greek mkmk = 1802333037, // Mark to Mark Positioning mset = 1952805741, // Mark Positioning via Substitution nalt = 1953259886, // Alternate Annotation Forms nlck = 1801677934, // NLC Kanji Forms nukt = 1953199470, // Nukta Forms onum = 1836412527, // Oldstyle Figures opbd = 1684172911, // Optical Bounds ordn = 1852076655, // Ordinals ornm = 1835954799, // Ornaments palt = 1953259888, // Proportional Alternate Widths pcap = 1885430640, // Petite Capitals pkna = 1634626416, // Proportional Kana pnum = 1836412528, // Proportional Figures pres = 1936028272, // Pre-base Substitutions psts = 1937011568, // Post-base Substitutions pwid = 1684633456, // Proportional Widths qwid = 1684633457, // Quarter Widths rand = 1684955506, // Randomize rclt = 1953260402, // Required Contextual Alternates rkrf = 1718774642, // Rakar Forms rlig = 1734962290, // Required Ligatures rtbd = 1684173938, // Right Bounds rtla = 1634497650, // Right-to-left Alternates rtlm = 1835824242, // Right-to-left Mirrored Forms ruby = 2036495730, // Ruby Notation Forms rvrn = 1852995186, // Required Variation Alternates salt = 1953259891, // Stylistic Alternates sinf = 1718511987, // Scientific Inferiors size = 1702521203, // Optical size smcp = 1885564275, // Small Capitals smpl = 1819307379, // Simplified Forms ss01 = 825258867, // 'ss20' Stylistic Set 1 – Stylistic Set 20 ssty = 2037674867, // Math Script-style Alternates stch = 1751348339, // Stretching Glyph Decomposition subs = 1935832435, // Subscript sups = 1936749939, // Superscript swsh = 1752397683, // Swash test = 1953719668, // Test features, only for development titl = 1819568500, // Titling tnam = 1835101812, // Traditional Name Forms tnum = 1836412532, // Tabular Figures trad = 1684107892, // Traditional Forms twid = 1684633460, // Third Widths unic = 1667853941, // Unicase valt = 1953259894, // Alternate Vertical Metrics vapk = 1802527094, // Kerning for Alternate Proportional Vertical Metrics vatu = 1970561398, // Vattu Variants vchw = 2003329910, // Vertical Contextual Half-width Spacing vert = 1953654134, // Vertical Alternates vhal = 1818323062, // Alternate Vertical Half Metrics vkna = 1634626422, // Vertical Kana Alternates vkrn = 1852992374, // Vertical Kerning vpal = 1818325110, // Proportional Alternate Vertical Metrics vrt2 = 846492278, // Vertical Alternates and Rotation vrtr = 1920234102, // Vertical Alternates for Rotation zero = 1869768058, // Slashed Zero }
font ¶
font :: struct { FileBase: [^]u8, Head: ^head, Cmap: ^u16, Gdef: ^gdef, Cmap14: ^cmap_14, ShapingTables: [shaping_table]^gsub_gpos, Fvar: rawptr, Maxp: ^maxp, Hea: [orientation]^hea, Mtx: [orientation]^u16, LookupInfo: lookup_info, GlyphCount: u32, LookupCount: u32, SubtableCount: u32, GlyphLookupMatrix: [^]u32, // [LookupCount * GlyphCount] bitmap GlyphLookupSubtableMatrix: [^]u32, // [LookupSubtableCount * GlyphCount] bitmap LookupSubtableIndexOffsets: [^]u32, // [LookupCount] SubtableInfos: [^]lookup_subtable_info, // [LookupSubtableCount] GposLookupIndexOffset: u32, Error: i32, }
Related Procedures With Parameters
- CodepointToGlyph
- CreateShapeState
- FontIsValid
- FreeFont
- PostReadFontInitialize
- ReadFontData
- ReadFontHeader
- ShapeConfig
- SizeOfShapeState
Related Procedures With Returns
glyph ¶
glyph :: struct { Codepoint: untyped rune, Id: u16, Uid: u16, Classes: glyph_classes, Decomposition: u64, Flags: glyph_flags, OffsetX: i32, OffsetY: i32, AdvanceX: i32, AdvanceY: i32, ParentInfo: u32, // This is set by GSUB and used by GPOS. // A 0-index means that we should attach to the last component in the ligature. // // From the Microsoft docs: // To correctly access the subtables, the client must keep track of the component associated with the mark. // // For a given mark assigned to a particular class, the appropriate base attachment point is determined by which // ligature component the mark is associated with. This is dependent on the original character string and subsequent // character- or glyph-sequence processing, not the font data alone. While a text-layout client is performing any // character-based preprocessing or any glyph-substitution operations using the GSUB table, the text-layout client // must keep track of associations of marks to particular ligature-glyph components. LigatureUid: u16, LigatureComponentIndexPlusOne: u16, // Earlier on, we used to assume that, if a glyph had no advance, or had the MARK glyph class, then // it could be handled as a mark in layout operations. This is inaccurate. // Unicode makes a distinction between attached marks and standalone marks. For our purposes, attached // marks are marks that have found a valid base character to attach to. In practice, this means that the // font contains a valid display position/configuration for it in the current context. // In contrast, standalone marks are marks that aren't attached to anything. Fonts may still have glyphs // for them, in which case we want to display those just like regular glyphs that take up horizontal space // on the line. When fonts don't have glyphs for them, they simply stay around as zero-width glyphs. // Standalone marks have notably different behavior compared to attached marks, and so, once we start // applying positioning features, it becomes worthwhile to track exactly which glyph has attached to which. AttachGlyphIndexPlusOne: u16, // Set in GSUB and used in GPOS, for STCH. JoiningFeature: joining_feature, // Unicode properties filled in by CodepointToGlyph. JoiningType: unicode_joining_type, using ScriptBitField: bit_field u8 { Script: script | 8, }, UnicodeFlags: unicode_flags, SyllabicClass: u8, SyllabicPosition: u8, UseClass: u8, CombiningClass: u8, MarkOrdering: u8, }
Related Procedures With Parameters
Related Procedures With Returns
glyph_flag ¶
glyph_flag :: enum u32 { // These feature flags must coincide with joining_feature _and_ FEATURE_FLAG! ISOL = 0, FINA = 1, FIN2 = 2, FIN3 = 3, MEDI = 4, MED2 = 5, INIT = 6, // These feature flags must coincide with FEATURE_FLAG! LJMO = 7, VJMO = 8, TJMO = 9, RPHF = 10, BLWF = 11, HALF = 12, PSTF = 13, ABVF = 14, PREF = 15, NUMR = 16, FRAC = 17, DNOM = 18, CFAR = 19, // These can be anything. DO_NOT_DECOMPOSE = 21, FIRST_IN_MULTIPLE_SUBSTITUTION = 22, NO_BREAK = 23, CURSIVE = 24, GENERATED_BY_GSUB = 25, USED_IN_GPOS = 26, STCH_ENDPOINT = 27, STCH_EXTENSION = 28, LIGATURE = 29, MULTIPLE_SUBSTITUTION = 30, }
gsub_gpos ¶
gsub_gpos :: struct {}
indic_script_properties ¶
indic_script_properties :: struct { ViramaCodepoint: untyped rune, BlwfPostOnly: bool, // b8 RephPosition: reph_position, RephEncoding: reph_encoding, RightSideMatraPosition: syllabic_position, AboveBaseMatraPosition: syllabic_position, BelowBaseMatraPosition: syllabic_position, }
iterate_features ¶
iterate_features :: struct {}
japanese_line_break_style ¶
japanese_line_break_style :: enum u8 { // The Unicode standard does not define what strict style is used for. // Supposedly, it is used for anything that does not fall into the other two categories of text. STRICT, // Normal style is used for books and documents. NORMAL, // Loose style is used for newspapers, and (I assume) any other narrow column format. LOOSE, }
Japanese text contains "kinsoku" characters, around which breaking a line is forbidden. Exactly which characters are "kinsoku" or not depends on the context: Strict style has the largest amount of kinsoku characters, which leads to longer lines. Loose style has the smallest amount of kinsoku characters, which leads to smaller lines. Normal style is somewhere in the middle. Note that, while the Unicode standard mentions all three of these styles, it does not mention any differences between the normal and loose styles. As such, normal and loose styles currently behave the same.
Related Procedures With Parameters
joining_feature ¶
joining_feature :: enum u8 { NONE, ISOL, FINA, FIN2, FIN3, MEDI, MED2, INIT, }
language ¶
language :: enum u32 { DONT_KNOW = 0, A_HMAO = 541347144, AARI = 541676097, ABAZA = 541147713, ABKHAZIAN = 541803073, ACHI = 542262081, ACHOLI = 541606721, ADYGHE = 542721089, AFAR = 542262849, AFRIKAANS = 541804097, AGAW = 542590785, AITON = 542067009, AKAN = 541150017, ALBANIAN = 541675859, ALSATIAN = 542329921, ALTAI = 542395457, ALUO = 541150809, AMERICAN_PHONETIC = 1213222977, AMHARIC = 541609281, ANGLO_SAXON = 541544001, ARABIC = 541151809, ARAGONESE = 541545025, ARAKANESE = 541807169, ARAKWAL = 542591826, ARMENIAN = 541415752, ARMENIAN_EAST = 809851208, AROMANIAN = 542135634, ARPITAN = 542134854, ASSAMESE = 541938497, ASTURIAN = 542397249, ATHAPASKAN = 541611073, ATSINA = 542331969, AVAR = 542266945, AVATIME = 542004801, AWADHI = 541153089, AYMARA = 541940033, AZERBAIDJANI = 541416001, BADAGA = 541344066, BAGHELKHANDI = 541540674, BAGRI = 542197570, BALANTE = 542002242, BALINESE = 541999426, BALKAR = 541868354, BALTI = 542395458, BALUCHI = 541674562, BAMBARA = 541216066, BAMILEKE = 541871426, BANDA = 809779522, BANDJALANG = 542721090, BANGLA = 542000450, BASHKIR = 541610818, BASQUE = 542201157, BATAK = 541807682, BATAK_ALAS_KLUET = 542790722, BATAK_ANGKOLA = 541215553, BATAK_DAIRI = 541348930, BATAK_KARO = 542659650, BATAK_MANDAILING = 541938754, BATAK_SIMALUNGUN = 542331970, BATAK_TOBA = 541278786, BAULE = 542458178, BAVARIAN = 542261570, BELARUSIAN = 541869378, BEMBA = 541934914, BENCH = 541606722, BERBER = 542261826, BETI = 541676610, BETTE_KURUMA = 541218136, BHILI = 541673538, BHOJPURI = 542066754, BHUTANESE = 542005828, BIBLE_CREE = 542262082, BIKOL = 541804866, BILEN = 541870402, BISHNUPRIYA_MANIPURI = 542724162, BISLAMA = 542329154, BLACKFOOT = 541477698, BODO = 542659138, BOSNIAN = 542330690, BOUYEI = 541279056, BRAHUI = 541610562, BRAJ_BHASHA = 541676098, BRETON = 541413954, BUGIS = 541545794, BULGARIAN = 542263106, BUMTHANGKHA = 542788171, BURMESE = 541938242, BURUSHASKI = 541807426, CAJUN_FRENCH = 541282886, CARRIER = 542265923, CATALAN = 542392643, CAYUGA = 542720323, CEBUANO = 541214019, CENTRAL_YUPIK = 542462789, CHAHA_GURAGE = 541542467, CHAMORRO = 541149251, CHATTISGARHI = 541608003, CHECHEN = 541411395, CHEROKEE = 542263363, CHEYENNE = 542722115, CHICHEWA = 541673539, CHIGA = 541542211, CHIMILA = 541540931, CHIN = 542001489, CHINANTEC = 1313358659, CHINESE_PHONETIC = 542132314, CHINESE_SIMPLIFIED = 542328922, CHINESE_TRADITIONAL = 542394458, CHINESE_TRADITIONAL_HONG_KONG = 541608026, CHINESE_TRADITIONAL_MACAO = 1297369178, CHIPEWYAN = 542132291, CHITTAGONIAN = 541545539, CHOCTAW = 542066755, CHUKCHI = 541804611, CHURCH_SLAVONIC = 541872963, CHUUKESE = 810240067, CHUVASH = 542459971, COMORIAN = 542264643, COMOX = 542068547, COPTIC = 542134083, CORNISH = 542265155, CORSICAN = 542330691, CREE = 541413955, CREOLES = 542134339, CRIMEAN_TATAR = 542396995, CRIOULO = 541148491, CROATIAN = 542528072, CYPRIOT_ARABIC = 542720833, CZECH = 542724931, DAGBANI = 541540676, DAN = 541740612, DANGME = 541544004, DANISH = 541999428, DARGWA = 542261572, DARI = 541676100, DAYI = 542654788, DEFAULT = 1953261156, // Can be DFLT too... DEHONG_DAI = 541344852, DHANGU = 541542468, DHIVEHI = 542525764, DHUWAL = 541742404, DIMLI = 542198084, DINKA = 541806148, DIVEHI = 542525764, DJAMBARRPUYNGU = 810699332, DOGRI = 542066500, DOGRI_MACROLANGUAGE = 542263108, DUNGAN = 542004548, DUTCH = 541346894, DZONGKHA = 542005828, EASTERN_ABENAKI = 542196033, EASTERN_CHAM = 541936195, EASTERN_CREE = 542262085, EASTERN_MANINKAKAN = 541805893, EASTERN_PWO_KAREN = 542132811, EBIRA = 541672005, EDO = 542065733, EFIK = 541673029, EMBERA_BAUDO = 541279298, EMBERA_CATIO = 542069827, EMBERA_CHAMI = 541674819, EMBERA_TADO = 541279316, ENGLISH = 541544005, EPENA = 541149779, ERZYA = 542790213, KB_TEXT_SHAPEANTO = 542069838, ESTONIAN = 541676613, EVEN = 542004805, EVENKI = 541808197, EWE = 541415237, FALAM_CHIN = 541868360, FANG = 810434886, FANTI = 542392646, FAROESE = 542330694, FEFE = 542133574, FIJIAN = 541674054, FILIPINO = 541870416, FINNISH = 542001478, FLEMISH = 541412422, FON = 542003014, FOREST_ENETS = 541412934, FRENCH = 541151814, FRENCH_ANTILLEAN = 541999430, FRISIAN = 541676102, FRIULIAN = 541872710, FULAH = 541873478, FUTA = 541152326, GA = 541344071, GAGAUZ = 541540679, GALICIAN = 541868359, GANDA = 541545804, GARHWALI = 542589255, GARO = 542069319, GARSHUNI = 542261575, GEBA_KAREN = 542201419, GEEZ = 542786887, GEORGIAN = 542392651, GEPO = 542132057, GERMAN = 542459204, GIKUYU = 541804875, GILAKI = 541805639, GILBERTESE = 810305863, GILYAK = 541870407, GITHABUL = 541608263, GOGO = 541544263, GONDI = 542003015, GREEK = 541871173, GREENLANDIC = 542003783, GUARANI = 541152583, GUINEA = 542133063, GUJARATI = 541742407, GUMATJ = 542002759, GUMUZ = 542788935, GUPAPUYNGU = 541480263, GUSII = 542790983, HAIDA = 810107208, HAITIAN_CREOLE = 541671752, HALKOMELEM = 542266696, HAMMER_BANNA = 541999688, HARARI = 541676104, HARAUTI = 542261576, HARYANVI = 541280066, HAUSA = 542458184, HAVASUPAI_WALAPAI_YAVAPAI = 541480281, HAWAIIAN = 542589256, HAYA = 542720328, HAZARAGI = 542785864, HEBREW = 542267209, HEILTSUK = 541672776, HERERO = 542262600, HIGH_MARI = 541150536, HILIGAYNON = 541870408, HINDI = 542001480, HINDKO = 541347400, HIRI_MOTU = 542068040, HMONG = 542002504, HMONG_DAW = 542594893, HMONG_SHUAT = 542788936, HO = 538988360, HUNGARIAN = 542004552, IBAN = 541147721, IBIBIO = 541213257, ICELANDIC = 541872969, IDO = 542065737, IGBO = 542065225, IJO = 542067273, ILOKANO = 542067785, INARI_SAMI = 541938505, INDONESIAN = 541347401, INGUSH = 541544009, INTERLINGUA = 541150793, INTERLINGUE = 541412425, INUKTITUT = 542461513, INUPIAT = 541806665, IPA_PHONETIC = 542134345, IRISH = 541676105, IRISH_TRADITIONAL = 542397001, IRULA = 542462537, ITALIAN = 541152329, JAMAICAN_CREOLE = 541933898, JAPANESE = 541999434, JAVANESE = 542523722, JENNU_KURUMA = 541742424, JUDEO_TAT = 542393418, JULA = 541873482, KABARDIAN = 541213003, KABYLE = 809648459, KACHCHI = 541278539, KADIWEU = 541278795, KALENJIN = 541868363, KALMYK = 541936715, KAMBA = 541216075, KANAUJI = 541739586, KANNADA = 541999435, KANURI = 542264907, KAQCHIKEL = 541802819, KARACHAY = 542261579, KARAIM = 541938251, KARAKALPAK = 541807179, KARELIAN = 541872715, KAREN = 542003787, KASHMIRI = 541610827, KASHUBIAN = 541217603, KATE = 541543755, KAZAKH = 542785867, KEBENA = 541214027, KEKCHI = 541803851, KHAKASS = 541149259, KHAMTI_SHAN = 542394443, KHAMYANG = 542462795, KHANTY_KAZIM = 541804619, KHANTY_SHURISHKAR = 542328907, KHANTY_VAKHI = 542525515, KHASI = 541676363, KHENGKHA = 541477720, KHINALUG = 541739595, KHMER = 541935691, KHORASANI_TURKIC = 542788939, KHOWAR = 542591051, KHUTSURI_GEORGIAN = 541411147, KICHE = 541283665, KIKONGO = 542003019, KILDIN_SAMI = 541938507, KINYARWANDA = 541152594, KIRMANJKI = 542460235, KISII = 542329163, KITUBA = 542591821, KODAGU = 541347659, KOKNI = 542001995, KOMI = 541937483, KOMI_PERMYAK = 542134091, KOMI_ZYRIAN = 542789451, KOMO = 542068043, KOMSO = 542330187, KONGO = 810438475, KONKANI = 541806411, KOORETE = 542397003, KOREAN = 542265163, KOREAO_OLD_HANGUL = 541609803, KORYAK = 541808971, KOSRAEAN = 542330699, KPELLE = 541872203, KPELLE_LIBERIA = 541413464, KRIO = 541676107, KRYMCHAK = 542393162, KUANYAMA = 541152587, KUBE = 541476683, KUI = 541676875, KULVI = 541807947, KUMAONI = 542002507, KUMYK = 541939019, KURDISH = 542266699, KURUKH = 542463307, KUY = 542725451, KWAKWALA = 541808459, KYRGYZ = 542263627, L_CREE = 542262092, LADAKHI = 541803596, LADIN = 541344076, LADINO = 541349194, LAHULI = 541606220, LAK = 541802828, LAKI = 541674316, LAMBANI = 541933900, LAMPUNG = 542132812, LAO = 542064972, LATIN = 542392652, LATVIAN = 541677132, LAZ = 542785868, LELEMI = 541476172, LEZGI = 542786892, LIGURIAN = 541739340, LIMBU = 541216076, LIMBURGISH = 541935948, LINGALA = 542001484, LIPO = 542068812, LISU = 542329164, LITHUANIAN = 541611084, LIV = 542525772, LOJBAN = 542065226, LOMA = 541937484, LOMBARD = 542068044, LOMWE = 542592332, LOW_MARI = 541150540, LOW_SAXON = 542327886, LOWER_SORBIAN = 541217612, LU = 541344344, LUBA_KATANGA = 541218124, LUBA_LULUA = 541152588, LULE_SAMI = 541938508, LUO = 542070092, LURI = 541282892, LUSHOOTSEED = 542397772, LUXEMBOURGISH = 542790732, LUYIA = 541611340, MACEDONIAN = 541346637, MADURA = 541344077, MAGAHI = 541540685, MAITHILI = 541611085, MAJANG = 541737293, MAKASAR = 542264141, MAKHUWA = 541802829, MAKONDE = 541410379, MALAGASY = 541543501, MALAY = 542723149, MALAYALAM = 541868365, MALAYALAM_REFORMED = 542264397, MALE = 541412429, MALINKE = 542002253, MALTESE = 542331981, MAM = 541933901, MANCHU = 541606733, MANDAR = 542262349, MANDINKA = 541347405, MANINKA = 541806157, MANIPURI = 541675085, MANO = 542524749, MANSI = 541999437, MANX = 542658125, MAORI = 541676109, MAPUDUNGUN = 542130509, MARATHI = 542261581, MARSHALLESE = 541606221, MARWARI = 542589261, MAYAN = 542005581, MAZANDERANI = 542005837, MBEMBE_TIGON = 541153870, MBO = 542065229, MBUNDU = 541999693, MEDUMBA = 542529858, MEEN = 542000461, MENDE = 541410381, MERU = 542262605, MEWATI = 541938775, MINANGKABAU = 542001485, MINJANGBAL = 541215320, MIRANDESE = 541873997, MIZO = 542787917, MOHAWK = 541609805, MOKSHA = 541806413, MOLDAVIAN = 541871949, MON = 542003021, MONGOLIAN = 541544013, MOOSE_CREE = 542262093, MORISYEN = 541410893, MOROCCAN = 542265165, MOSSI = 542330957, MUNDARI = 542004557, MUSCOGEE = 542332237, N_CREE = 542262094, NAGA_ASSAMESE = 541540686, NAGARI = 542263118, NAHUATL = 541606222, NANAI = 541999438, NASKAPI = 542327118, NAURUAN = 542458190, NAVAJO = 542523726, NDAU = 541279310, NDEBELE = 541213774, NDONGA = 541541454, NEAPOLITAN = 542130510, NEPALI = 542131534, NEWARI = 542590286, NGBAKA = 541149006, NIGERIAN_FULFULDE = 542528838, NIMADI = 541413198, NISI = 542329166, NIUEAN = 542460238, NKO = 542067534, NOGAI = 541544270, NORFOLK = 541608272, NORTH_SLAVEY = 542327635, NORTHERN_EMBERA = 542133573, NORTHERN_SAMI = 541938510, NORTHERN_SOTHO = 542069582, NORTHERN_TAI = 541152334, NORWAY_HOUSE_CREE = 541280334, NORWEGIAN = 542265166, NORWEGIAN_NYNORSK = 542005582, NOVIAL = 542527310, NUMANGGANG = 542134094, NUNAVIK_INUKTITUT = 542461513, NUU_CHAH_NULTH = 541807950, NYAMWEZI = 541940046, NYANKOLE = 541870926, OCCITAN = 541672271, ODIA = 541676111, OJI_CREE = 542262095, OJIBWAY = 541215311, OLD_IRISH = 541149011, OLD_JAVANESE = 542589259, ONEIDA = 541412943, ONONDAGA = 542068303, OROMO = 542069327, OSSETIAN = 542331727, PA_O_KAREN = 541805634, PALAUAN = 542458192, PALAUNG = 541543504, PALESTINIAN_ARAMAIC = 541147472, PALI = 541868368, PALPA = 542130512, PAMPANGAN = 541933904, PANGASINAN = 541540688, PAPIAMENTU = 810565968, PASHTO = 542327120, PATTANI_MALAY = 541148749, PENNSYLVANIA_GERMAN = 541279312, PERSIAN = 542261574, PHAKE = 541805136, PICARD = 541344592, PIEMONTESE = 542330192, PILAGA = 541543504, PITE_SAMI = 541411923, POCOMCHI = 541609808, POHNPEIAN = 542003024, POLISH = 541805648, POLYTONIC_GREEK = 542263120, PORTUGUESE = 541545552, PROVENCAL = 542069328, PUNJABI = 541999440, QUECHUA = 542790993, QUECHUA_BOLIVIA = 541611345, QUECHUA_ECUADOR = 541677137, QUECHUA_PERU = 541611857, R_CREE = 542262098, RAJASTHANI = 541737298, RAKHINE = 541807169, RAROTONGAN = 542261586, REJANG = 541738322, RIANG = 541149522, RIPUARIAN = 541610827, RITARUNGO = 542394706, ROHINGYA = 541542482, ROMANIAN = 541937490, ROMANSH = 542330194, ROMANY = 542723922, ROTUMAN = 541938770, RUNDI = 542004562, RUSSIAN = 542332242, RUSSIAN_BURIAT = 542458450, RUSYN = 542724946, SADRI = 541344083, SAKHA = 541802841, SAMOAN = 542068051, SAMOGITIAN = 542328659, SAN_BLAS_KUNA = 541807939, SANGO = 542066515, SANSKRIT = 541999443, SANTALI = 542392659, SARAIKI = 541807187, SARDINIAN = 541348435, SASAK = 542327123, SATERLAND_FRISIAN = 542200915, SAYISI = 542720339, SCOTS = 541672275, SCOTTISH_GAELIC = 541409607, SEKOTA = 541738323, SELKUP = 541869395, SENA = 541150803, SENECA = 541410643, SERBIAN = 541217363, SERER = 542265939, SGAW_KAREN = 542593867, SHAN = 542001235, SHONA = 541150803, SIBE = 541215059, SICILIAN = 541999955, SIDAMO = 541346131, SILESIAN = 541874771, SILTE_GURAGE = 541542739, SINDHI = 541347411, SINHALA = 541609555, SKOLT_SAMI = 542329683, SLAVEY = 541150291, SLOVAK = 542722899, SLOVENIAN = 542526547, SMALL_FLOWERY_MIAO = 541935187, SODO_GURAGE = 541544275, SOGA = 541544280, SOMALI = 541871443, SONGE = 542134099, SONINKE = 541806163, SOUTH_SLAVEY = 541872979, SOUTHERN_KIWAI = 541346379, SOUTHERN_SAMI = 541938515, SOUTHERN_SOTHO = 542396243, SPANISH = 542135109, STANDARD_MOROCCAN_TAMAZIGHT = 541607770, STRAITS_SALISH = 542266451, SUKUMA = 541807955, SUNDANESE = 542004563, SURI = 542266707, SUTU = 542398547, SVAN = 541152851, SWADAYA_ARAMAIC = 541153107, SWAHILI = 541808467, SWATI = 542791507, SWEDISH = 541414995, SYLHETI = 541874515, SYRIAC = 542267731, SYRIAC_EASTERN = 1314019667, SYRIAC_ESTRANGELA = 1163024723, SYRIAC_WESTERN = 1246910803, TABASARAN = 541213012, TACHELHIT = 541673555, TAGALOG = 541869908, TAHAGGART_TAMAHAQ = 542525524, TAHITIAN = 542394452, TAI_LAING = 541870676, TAJIKI = 541737300, TALYSH = 542723156, TAMASHEK = 541609300, TAMASHEQ = 542196052, TAMAZIGHT = 541940308, TAMIL = 541933908, TARIFIT = 541477202, TATAR = 542392660, TAWALLAMMAT_TAMAJAQ = 542200916, TAY = 542792020, TAYART_TAMAJEQ = 542787668, TELUGU = 541869396, TEMNE = 542002516, TETUM = 542393684, TH_CREE = 542262100, THAI = 541149268, THAILAND_MON = 1414418253, THOMPSON = 542132308, TIBETAN = 541215060, TIGRE = 542263124, TIGRINYA = 542721876, TIV = 542525780, TLINGIT = 541674580, TOBO = 542523988, TODO = 541347668, TOK_PISIN = 541675604, TOMA = 809783124, TONGA = 541544020, TONGAN = 542000980, TORKI = 541219393, TSHANGLA = 541741908, TSONGA = 541545300, TSWANA = 541150804, TULU = 541873492, TUMBUKA = 541939028, TUNDRA_ENETS = 541412948, TURKISH = 541807188, TURKMEN = 541936468, TUROYO_ARAMAIC = 541152596, TUSCARORA = 542332244, TUVALU = 541873748, TUVIN = 542528852, TWI = 541677396, TZOTZIL = 542071380, UDI = 541672533, UDMURT = 541934677, UKRAINIAN = 542264149, UMBUNDU = 541216085, UME_SAMI = 542460499, UPPER_SAXON = 542464083, UPPER_SORBIAN = 541217621, URALIC_PHONETIC = 542134357, URDU = 541348437, UYGHUR = 541546837, UZBEK = 541219413, VENDA = 542000470, VENETIAN = 541279574, VIETNAMESE = 542394710, VLAX_ROMANI = 542723410, VOLAPUK = 541871958, VORO = 542069334, WA = 538984791, WACI_GBE = 541672279, WAGDI = 541540695, WAKHI = 541868631, WALLOON = 542002263, WARAY_WARAY = 542261591, WAYANAD_CHETTI = 542397507, WAYUU = 541283655, WELSH = 541869399, WENDAT = 542393431, WEST_CREE = 542262103, WESTERN_CHAM = 541149763, WESTERN_KAYAH = 542464331, WESTERN_PANJABI = 541216336, WESTERN_PWO_KAREN = 542070608, WOLOF = 541477975, WOODS_CREE = 542262084, WUDING_LUQUAN_YI = 542201689, WYANDOT = 542005591, XHOSA = 542328920, Y_CREE = 542262105, YAO = 542064985, YAPESE = 542130521, YI_CLASSIC = 541280601, YI_MODERN = 541935961, YIDDISH = 541673802, YORUBA = 541147737, ZAMBOANGA_CHAVACANO = 541803075, ZANDE = 541347418, ZARMA = 542263876, ZAZAKI = 541153882, ZEALANDIC = 541148506, ZHUANG = 541149274, ZULU = 541873498, }
Related Procedures With Parameters
line_break_class ¶
line_break_class :: enum u8 { Onea, Oea, Ope, BK, CR, LF, NL, SP, ZW, WJ, GLnea, GLea, CLnea, CLea, CPnea, CPea, EXnea, EXea, SY, BAnea, BAea, OPnea, OPea, QU, QUPi, QUPf, IS, NSnea, NSea, B2, CB, HY, HYPHEN, INnea, INea, BB, HL, ALnea, ALea, NU, PRnea, PRea, IDnea, IDea, IDpe, EBnea, EBea, EM, POnea, POea, JL, JV, JT, H2, H3, AP, AK, DOTTED_CIRCLE, AS, VF, VI, RI, COUNT, CM, ZWJ, CJ, SOT, EOT, }
lookup_indices ¶
lookup_indices :: struct { FeatureId: feature_id, SkipFlags: skip_flags, GlyphFilter: glyph_flags, Count: u32, Indices: [^]u16 `fmt:"v,Count"`, }
op ¶
op :: struct { Kind: op_kind, Features: feature_set, }
op_kind ¶
op_kind :: enum u8 { END, // Substitution ops. PRE_NORMALIZE_DOTTED_CIRCLES, NORMALIZE, NORMALIZE_HANGUL, FLAG_JOINING_LETTERS, GSUB_FEATURES, // Positioning ops. GPOS_METRICS, GPOS_FEATURES, POST_GPOS_FIXUP, STCH_POSTPASS, }
op_state ¶
op_state :: struct { WrittenCount: un, GlyphIndex: un, FrameCount: u32, ResumePoint: u32, FeatureCount: u32, FeatureLookupIndices: [16]lookup_indices, OpSpecific: op_state_op_specific, }
op_state_gsub ¶
op_state_gsub :: struct { LookupIndex: un, GlyphFilter: glyph_flags, SkipFlags: skip_flags, }
op_state_op_specific ¶
op_state_op_specific :: struct #raw_union { Normalize: op_state_normalize, Gsub: op_state_gsub, NormalizeHangul: op_state_normalize_hangul, }
orientation ¶
orientation :: enum u32 { HORIZONTAL, VERTICAL, }
reph_encoding ¶
reph_encoding :: enum u8 { IMPLICIT, EXPLICIT, LOGICAL_REPHA, VISUAL_REPHA, }
reph_position ¶
reph_position :: enum u8 { AFTER_POST, BEFORE_POST, BEFORE_SUBJOINED, AFTER_SUBJOINED, AFTER_MAIN, }
script ¶
script :: enum u32 { DONT_KNOW, ADLAM, AHOM, ANATOLIAN_HIEROGLYPHS, ARABIC, ARMENIAN, AVESTAN, BALINESE, BAMUM, BASSA_VAH, BATAK, BENGALI, BHAIKSUKI, BOPOMOFO, BRAHMI, BUGINESE, BUHID, CANADIAN_SYLLABICS, CARIAN, CAUCASIAN_ALBANIAN, CHAKMA, CHAM, CHEROKEE, CHORASMIAN, CJK_IDEOGRAPHIC, COPTIC, CYPRIOT_SYLLABARY, CYPRO_MINOAN, CYRILLIC, DEFAULT, DEFAULT2, DESERET, DEVANAGARI, DIVES_AKURU, DOGRA, DUPLOYAN, EGYPTIAN_HIEROGLYPHS, ELBASAN, ELYMAIC, ETHIOPIC, GARAY, GEORGIAN, GLAGOLITIC, GOTHIC, GRANTHA, GREEK, GUJARATI, GUNJALA_GONDI, GURMUKHI, GURUNG_KHEMA, HANGUL, HANIFI_ROHINGYA, HANUNOO, HATRAN, HEBREW, HIRAGANA, IMPERIAL_ARAMAIC, INSCRIPTIONAL_PAHLAVI, INSCRIPTIONAL_PARTHIAN, JAVANESE, KAITHI, KANNADA, KATAKANA, KAWI, KAYAH_LI, KHAROSHTHI, KHITAN_SMALL_SCRIPT, KHMER, KHOJKI, KHUDAWADI, KIRAT_RAI, LAO, LATIN, LEPCHA, LIMBU, LINEAR_A, LINEAR_B, LISU, LYCIAN, LYDIAN, MAHAJANI, MAKASAR, MALAYALAM, MANDAIC, MANICHAEAN, MARCHEN, MASARAM_GONDI, MEDEFAIDRIN, MEETEI_MAYEK, MENDE_KIKAKUI, MEROITIC_CURSIVE, MEROITIC_HIEROGLYPHS, MIAO, MODI, MONGOLIAN, MRO, MULTANI, MYANMAR, NABATAEAN, NAG_MUNDARI, NANDINAGARI, NEWA, NEW_TAI_LUE, NKO, NUSHU, NYIAKENG_PUACHUE_HMONG, OGHAM, OL_CHIKI, OL_ONAL, OLD_ITALIC, OLD_HUNGARIAN, OLD_NORTH_ARABIAN, OLD_PERMIC, OLD_PERSIAN_CUNEIFORM, OLD_SOGDIAN, OLD_SOUTH_ARABIAN, OLD_TURKIC, OLD_UYGHUR, ODIA, OSAGE, OSMANYA, PAHAWH_HMONG, PALMYRENE, PAU_CIN_HAU, PHAGS_PA, PHOENICIAN, PSALTER_PAHLAVI, REJANG, RUNIC, SAMARITAN, SAURASHTRA, SHARADA, SHAVIAN, SIDDHAM, SIGN_WRITING, SOGDIAN, SINHALA, SORA_SOMPENG, SOYOMBO, SUMERO_AKKADIAN_CUNEIFORM, SUNDANESE, SUNUWAR, SYLOTI_NAGRI, SYRIAC, TAGALOG, TAGBANWA, TAI_LE, TAI_THAM, TAI_VIET, TAKRI, TAMIL, TANGSA, TANGUT, TELUGU, THAANA, THAI, TIBETAN, TIFINAGH, TIRHUTA, TODHRI, TOTO, TULU_TIGALARI, UGARITIC_CUNEIFORM, VAI, VITHKUQI, WANCHO, WARANG_CITI, YEZIDI, YI, ZANABAZAR_SQUARE, }
Related Procedures With Parameters
shape_config ¶
shape_config :: struct { Font: ^font, Script: script, Language: language, Langsys: [shaping_table]^langsys, OpLists: [4]op_list, Shaper: shaper, ShaperProperties: ^shaper_properties, IndicScriptProperties: indic_script_properties, Blwf: ^feature, Pref: ^feature, Pstf: ^feature, Locl: ^feature, Rphf: ^feature, Half: ^feature, Vatu: ^feature, // Indic Virama: glyph, DottedCircle: glyph, Whitespace: glyph, // Thai Nikhahit: glyph, SaraAa: glyph, }
Related Procedures With Parameters
Related Procedures With Returns
shape_state ¶
shape_state :: struct { Op: op, Config: ^shape_config, MainDirection: direction, RunDirection: direction, GlyphArray: glyph_array, ClusterGlyphArray: glyph_array, DottedCircleInsertIndex: u32, GlyphCountStartingFromCurrentCluster: u32, At: u32, ResumePoint: u32, OpGlyphOffset: u32, ClusterGlyphCount: u32, Ip: u32, NextGlyphUid: u32, RequiredGlyphCapacity: u32, RealCluster: i32, ClusterAtStartOfWord: i32, WordBreak: i32, // This must always be the last member! OpState: op_state, }
Related Procedures With Parameters
Related Procedures With Returns
shaper ¶
shaper :: enum u32 { DEFAULT, ARABIC, HANGUL, HEBREW, INDIC, KHMER, MYANMAR, TIBETAN, USE, }
Unicode defines scripts and languages. A language belongs to a single script, and a script belongs to a single writing system. On top of these, OpenType defines shapers, which are basically just designations for specific code paths that are taken depending on which script is being shapen.
Some scripts, like Latin and Cyrillic, need relatively few operations, while complex scripts like Arabic and Indic scripts have specific processing steps that need to happen in order to obtain a correct result.
These sequences of operations are _not_ described in the font file itself. The shaping code needs to know which script it is shaping, and implement all of those passes itself. That is why you, as a user, have to care about this.
When creating shape_config, you can either pass in a known script, or you can specify SCRIPT_DONT_KNOW and let the library figure it out. While SCRIPT_DONT_KNOW may look appealing, it is worth noting that we can only infer the _script_, and not the language, of the text you pass in. This means that you might miss out on language-specific features when you use it.
Related Procedures With Parameters
shaper_properties ¶
shaper_properties :: struct {}
shaping_table ¶
shaping_table :: enum u8 { GSUB, GPOS, }
skip_flag ¶
skip_flag :: enum u32 { ZWNJ = 0, ZWJ = 1, }
syllabic_position ¶
syllabic_position :: enum u8 { NONE, RA_TO_BECOME_REPH, PREBASE_MATRA, PREBASE_CONSONANT, SYLLABLE_BASE, AFTER_MAIN, ABOVEBASE_CONSONANT, BEFORE_SUBJOINED, BELOWBASE_CONSONANT, AFTER_SUBJOINED, BEFORE_POST, POSTBASE_CONSONANT, AFTER_POST, FINAL_CONSONANT, SMVD, }
unicode_bidirectional_class ¶
unicode_bidirectional_class :: enum u8 { NI, L, R, NSM, AL, AN, EN, ES, ET, CS, }
unicode_flag ¶
unicode_flag :: enum u8 { MODIFIER_COMBINING_MARK = 0, DEFAULT_IGNORABLE = 1, OPEN_BRACKET = 2, CLOSE_BRACKET = 3, PART_OF_WORD = 4, DECIMAL_DIGIT = 5, NON_SPACING_MARK = 6, }
unicode_flags ¶
unicode_flags :: distinct bit_set[unicode_flag; u8]
unicode_joining_type ¶
unicode_joining_type :: enum u8 { NONE, LEFT, DUAL, FORCE, RIGHT, TRANSPARENT, }
word_break_class ¶
word_break_class :: enum u8 { Onep, Oep, CR, LF, NL, EX, ZWJ, RI, FO, KA, HL, ALnep, ALep, SQ, DQ, MNL, ML, MN, NM, ENL, WSS, SOT, }
@Cleanup: Merge EX and FO.
Constants
BREAK_FLAGS_ANY ¶
BREAK_FLAGS_ANY :: break_flags{.DIRECTION, .SCRIPT, .GRAPHEME, .WORD, .LINE_SOFT, .LINE_HARD}
BREAK_FLAGS_DIRECTION ¶
BREAK_FLAGS_DIRECTION :: break_flags{.DIRECTION}
BREAK_FLAGS_GRAPHEME ¶
BREAK_FLAGS_GRAPHEME :: break_flags{.GRAPHEME}
BREAK_FLAGS_LINE ¶
BREAK_FLAGS_LINE :: break_flags{.LINE_SOFT, .LINE_HARD}
BREAK_FLAGS_LINE_HARD ¶
BREAK_FLAGS_LINE_HARD :: break_flags{.LINE_HARD}
BREAK_FLAGS_LINE_SOFT ¶
BREAK_FLAGS_LINE_SOFT :: break_flags{.LINE_SOFT}
BREAK_FLAGS_SCRIPT ¶
BREAK_FLAGS_SCRIPT :: break_flags{.SCRIPT}
BREAK_FLAGS_WORD ¶
BREAK_FLAGS_WORD :: break_flags{.WORD}
BREAK_REORDER_BUFFER_FLUSH_THRESHOLD ¶
BREAK_REORDER_BUFFER_FLUSH_THRESHOLD: int : 4
In the worst case, a single call to BreakAddCodepoint would generate 4 breaks. We buffer breaks to reorder them before returning them to the user. This potentially requires infinite memory, which we don't have, so you may want to tweak this constant, although, really, if the defaults don't work, then you have likely found very strange/adversarial text.
BREAK_REORDER_BUFFER_SIZE ¶
BREAK_REORDER_BUFFER_SIZE: int : BREAK_REORDER_BUFFER_FLUSH_THRESHOLD * 2
GLYPH_FEATURE_MASK ¶
GLYPH_FEATURE_MASK :: glyph_flags{.ISOL, .FINA, .FIN2, .FIN3, .MEDI, .MED2, .INIT, .LJMO, .VJMO, .TJMO, .RPHF, .BLWF, .HALF, .PSTF, .ABVF, .PREF, .NUMR, .FRAC, .DNOM, .CFAR}
JOINING_FEATURE_MASK ¶
JOINING_FEATURE_MASK :: glyph_flags{.ISOL, .FINA, .FIN2, .FIN3, .MEDI, .MED2, .INIT}
MAX_SIMULTANEOUS_FEATURES ¶
MAX_SIMULTANEOUS_FEATURES: int : 16
This needs to be updated when we change the op lists!
USE_GLYPH_FEATURE_MASK ¶
USE_GLYPH_FEATURE_MASK :: glyph_flags{.ISOL, .FINA, .FIN2, .FIN3, .MEDI, .MED2, .INIT, .NUMR, .DNOM, .FRAC}
Variables
This section is empty.
Procedures
BeginBreak ¶
BeginBreak :: proc "c" (State: ^break_state, MainDirection: direction, JapaneseLineBreakStyle: japanese_line_break_style) ---
Break ¶
Break :: proc "c" (State: ^break_state, Break: ^break_type) -> b32 ---
BreakAddCodepoint ¶
BreakAddCodepoint :: proc "c" (State: ^break_state, Codepoint: untyped rune, PositionIncrement: u32, EndOfText: b32) ---
BreakFlush ¶
BreakFlush :: proc "c" (State: ^break_state) ---
BreakStateIsValid ¶
BreakStateIsValid :: proc "c" (State: ^break_state) -> b32 ---
CreateShapeState ¶
CreateShapeState :: proc(Font: ^font, allocator: runtime.Allocator) -> (Result: ^shape_state, Err: runtime.Allocator_Error) {…}
FontFromMemory ¶
FontFromMemory :: proc(Data: []u8, allocator: runtime.Allocator) -> (Result: font, Err: runtime.Allocator_Error) {…}
FreeShapeState ¶
FreeShapeState :: proc(State: ^shape_state, allocator: runtime.Allocator) {…}
PlaceShapeState ¶
PlaceShapeState :: proc "c" (Memory: []u8) -> ^shape_state {…}
ResetShapeState ¶
ResetShapeState :: proc "c" (State: ^shape_state) ---
Shape ¶
Shape :: proc "c" ( State: ^shape_state, Config: ^shape_config, MainDirection, RunDirection: direction, Glyphs: [^]glyph, GlyphCount: ^u32, GlyphCapacity: u32, ) -> b32 ---
ShapeConfig ¶
ShapeConfig :: proc "c" (Font: ^font, Script: script, Language: language) -> shape_config ---
ShapeDynamic ¶
ShapeDynamic :: proc(State: ^shape_state, Config: ^shape_config, MainDirection, RunDirection: direction, Glyphs: ^[dynamic]glyph) -> b32 {…}
Procedure Groups
This section is empty.
Source Files
Generation Information
Generated with odin version dev-2025-07 (vendor "odin") Windows_amd64 @ 2025-07-14 21:17:32.643618600 +0000 UTC