hb-ot-shape-complex-indic-private.hh revision 55f70ebfb95083f515d9b0044a2a65ab11484bb5
13ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* 23ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * Copyright © 2012 Google, Inc. 33ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 43ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * This is part of HarfBuzz, a text shaping library. 53ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 63ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * Permission is hereby granted, without written agreement and without 73ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this 83ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * software and its documentation for any purpose, provided that the 93ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * above copyright notice and the following two paragraphs appear in 103ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * all copies of this software. 113ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 123ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 133ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 143ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 153ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 163ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * DAMAGE. 173ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 183ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 193ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 203ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 213ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 223ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 233ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 243ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * Google Author(s): Behdad Esfahbod 253ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod */ 263ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 273ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#ifndef HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH 283ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#define HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH 293ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 303ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#include "hb-private.hh" 313ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 323ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 333ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#include "hb-ot-shape-complex-private.hh" 343ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 353ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 363ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* buffer var allocations */ 373ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#define indic_category() complex_var_persistent_u8_0() /* indic_category_t */ 383ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#define indic_position() complex_var_persistent_u8_1() /* indic_matra_category_t */ 393ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 403ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#define INDIC_TABLE_ELEMENT_TYPE uint8_t 413ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 423ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Cateories used in the OpenType spec: 433ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx 443ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod */ 453ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Note: This enum is duplicated in the -machine.rl source file. 463ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * Not sure how to avoid duplication. */ 473ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodenum indic_category_t { 483ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_X = 0, 493ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_C, 503ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_Ra, /* Not explicitly listed in the OT spec, but used in the grammar. */ 513ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_V, 523ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_N, 533ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_H, 543ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_ZWNJ, 553ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_ZWJ, 563ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_M, 573ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_SM, 583ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_VD, 593ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_A, 6018c06e189bd078affbb84c3bb5bb80687a227c5eBehdad Esfahbod OT_NBSP, 617d09c98a1fff97127e48eae48d380dc9fcff288eBehdad Esfahbod OT_DOTTEDCIRCLE, /* Not in the spec, but special in Uniscribe. /Very very/ special! */ 62deb521dee4fdca8c2124cfb39a205e6269d4a70dBehdad Esfahbod OT_RS, /* Register Shifter (and other marks), used in Khmer OT spec */ 63deb521dee4fdca8c2124cfb39a205e6269d4a70dBehdad Esfahbod OT_Coeng 643ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 653ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 663ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Visual positions in a syllable from left to right. */ 673ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodenum indic_position_t { 683d25079f8d6be81b9b4b91d3a97016b8a572f571Behdad Esfahbod POS_RA_TO_BECOME_REPH, 696a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod POS_PRE_M, 70dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_PRE_C, 71dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_BASE_C, 72dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_ABOVE_C, 73dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_BELOW_C, 74f7e8dcfd4fc377e3d786b097beb656284240456dBehdad Esfahbod POS_ABOVE_M, 756a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod POS_BELOW_M, 76dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_POST_C, 776a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod POS_POST_M, 7855f70ebfb95083f515d9b0044a2a65ab11484bb5Behdad Esfahbod POS_FINAL_C, 79dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_SMVD 803ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 813ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 82c5306b6861cfaa50af40e8ceb058791fa06d7981Behdad Esfahbod/* Categories used in IndicSyllabicCategory.txt from UCD. */ 833ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodenum indic_syllabic_category_t { 843ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_OTHER = OT_X, 853ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 863ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_X, 873ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_BINDU = OT_SM, 883ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT = OT_C, 893ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD = OT_C, 903ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL = OT_C, 913ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER = OT_C, 923ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL = OT_C, 933ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER = OT_NBSP, 943ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_C, 953ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_REPHA = OT_C, 963ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER = OT_X, 973ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_NUKTA = OT_N, 987d09c98a1fff97127e48eae48d380dc9fcff288eBehdad Esfahbod INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER = OT_RS, 993ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_TONE_LETTER = OT_X, 1003ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_TONE_MARK = OT_X, 1013ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VIRAMA = OT_H, 1023ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VISARGA = OT_SM, 1033ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VOWEL = OT_V, 1043ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT = OT_M, 1053ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT = OT_V 1063ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 1073ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1083ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Categories used in IndicSMatraCategory.txt from UCD */ 1093ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodenum indic_matra_category_t { 110dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod INDIC_MATRA_CATEGORY_NOT_APPLICABLE = POS_BASE_C, 1113ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1126a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod INDIC_MATRA_CATEGORY_LEFT = POS_PRE_M, 1136a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP = POS_ABOVE_M, 1146a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod INDIC_MATRA_CATEGORY_BOTTOM = POS_BELOW_M, 1156a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod INDIC_MATRA_CATEGORY_RIGHT = POS_POST_M, 1163ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1173ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod /* We don't really care much about these since we decompose them 1183ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * in the generic pre-shaping layer. They will only be used if 1193ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * the font does not cover the decomposition. In which case, we 1203ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * define these as aliases to the place we want the split-matra 1213ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * glyph to show up. Quite arbitrary. 1223ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 1233ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * TODO: There are some split matras without Unicode decompositions. 1243ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * We have to figure out what to do with them. 1253ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod */ 1266a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT = POS_POST_M, 1278aa801a6fd1a737fa20b851edf7528bdd6635b8bBehdad Esfahbod INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT = POS_POST_M, 1286a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM = POS_BELOW_M, 1296a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT = POS_POST_M, 1308aa801a6fd1a737fa20b851edf7528bdd6635b8bBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_LEFT = POS_ABOVE_M, 1318aa801a6fd1a737fa20b851edf7528bdd6635b8bBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT = POS_POST_M, 1326a091df9b403b147ef78f3974610dedf4ce1e08aBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_RIGHT = POS_POST_M, 1333ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1343ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_MATRA_CATEGORY_INVISIBLE = INDIC_MATRA_CATEGORY_NOT_APPLICABLE, 1353ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_MATRA_CATEGORY_OVERSTRUCK = INDIC_MATRA_CATEGORY_NOT_APPLICABLE, 1363ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT = INDIC_MATRA_CATEGORY_NOT_APPLICABLE 1373ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 1383ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1393ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation 1403ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * because gcc fails to optimize the latter and fills the table in at runtime. */ 1413ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#define INDIC_COMBINE_CATEGORIES(S,M) \ 1423ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || (S == INDIC_SYLLABIC_CATEGORY_VIRAMA || S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT)) + \ 1433ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod ASSERT_STATIC_EXPR_ZERO (S < 16 && M < 16) + \ 1443ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod ((M << 4) | S)) 1453ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1463ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1473ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#include "hb-ot-shape-complex-indic-table.hh" 1483ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1493ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* XXX 1503ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * This is a hack for now. We should: 1513ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 1. Move this data into the main Indic table, 1523ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * and/or 1533ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 2. Probe font lookups to determine consonant positions. 1543ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod */ 1553ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodstatic const struct consonant_position_t { 1563ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod hb_codepoint_t u; 1573ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod indic_position_t position; 1583ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod} consonant_positions[] = { 159dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0930, POS_BELOW_C}, 160dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x09AC, POS_BELOW_C}, 161dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x09AF, POS_POST_C}, 162dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x09B0, POS_BELOW_C}, 163dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x09F0, POS_BELOW_C}, 164dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0A2F, POS_POST_C}, 165dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0A30, POS_BELOW_C}, 166dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0A35, POS_BELOW_C}, 167dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0A39, POS_BELOW_C}, 168dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0AB0, POS_BELOW_C}, 169dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B24, POS_BELOW_C}, 170dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B28, POS_BELOW_C}, 171dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B2C, POS_BELOW_C}, 172dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B2D, POS_BELOW_C}, 173dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B2E, POS_BELOW_C}, 174dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B2F, POS_POST_C}, 175dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B30, POS_BELOW_C}, 176dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B32, POS_BELOW_C}, 177dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B33, POS_BELOW_C}, 178dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B5F, POS_POST_C}, 179dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B71, POS_BELOW_C}, 180dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C15, POS_BELOW_C}, 181dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C16, POS_BELOW_C}, 182dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C17, POS_BELOW_C}, 183dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C18, POS_BELOW_C}, 184dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C19, POS_BELOW_C}, 185dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1A, POS_BELOW_C}, 186dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1B, POS_BELOW_C}, 187dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1C, POS_BELOW_C}, 188dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1D, POS_BELOW_C}, 189dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1E, POS_BELOW_C}, 190dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1F, POS_BELOW_C}, 191dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C20, POS_BELOW_C}, 192dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C21, POS_BELOW_C}, 193dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C22, POS_BELOW_C}, 194dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C23, POS_BELOW_C}, 195dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C24, POS_BELOW_C}, 196dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C25, POS_BELOW_C}, 197dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C26, POS_BELOW_C}, 198dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C27, POS_BELOW_C}, 199dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C28, POS_BELOW_C}, 200dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2A, POS_BELOW_C}, 201dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2B, POS_BELOW_C}, 202dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2C, POS_BELOW_C}, 203dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2D, POS_BELOW_C}, 204dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2E, POS_BELOW_C}, 205dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2F, POS_BELOW_C}, 206dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C30, POS_BELOW_C}, 207dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C32, POS_BELOW_C}, 208dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C33, POS_BELOW_C}, 209dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C35, POS_BELOW_C}, 210dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C36, POS_BELOW_C}, 211dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C37, POS_BELOW_C}, 212dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C38, POS_BELOW_C}, 213dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C39, POS_BELOW_C}, 214dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C95, POS_BELOW_C}, 215dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C96, POS_BELOW_C}, 216dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C97, POS_BELOW_C}, 217dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C98, POS_BELOW_C}, 218dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C99, POS_BELOW_C}, 219dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9A, POS_BELOW_C}, 220dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9B, POS_BELOW_C}, 221dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9C, POS_BELOW_C}, 222dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9D, POS_BELOW_C}, 223dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9E, POS_BELOW_C}, 224dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9F, POS_BELOW_C}, 225dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA0, POS_BELOW_C}, 226dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA1, POS_BELOW_C}, 227dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA2, POS_BELOW_C}, 228dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA3, POS_BELOW_C}, 229dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA4, POS_BELOW_C}, 230dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA5, POS_BELOW_C}, 231dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA6, POS_BELOW_C}, 232dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA7, POS_BELOW_C}, 233dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA8, POS_BELOW_C}, 234dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAA, POS_BELOW_C}, 235dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAB, POS_BELOW_C}, 236dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAC, POS_BELOW_C}, 237dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAD, POS_BELOW_C}, 238dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAE, POS_BELOW_C}, 239dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAF, POS_BELOW_C}, 240dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB0, POS_BELOW_C}, 241dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB2, POS_BELOW_C}, 242dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB3, POS_BELOW_C}, 243dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB5, POS_BELOW_C}, 244dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB6, POS_BELOW_C}, 245dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB7, POS_BELOW_C}, 246dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB8, POS_BELOW_C}, 247dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB9, POS_BELOW_C}, 248dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CDE, POS_BELOW_C}, 249dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0D2F, POS_POST_C}, 250dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0D30, POS_POST_C}, 251dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0D32, POS_BELOW_C}, 252dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0D35, POS_POST_C}, 2533ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 2543ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 2553ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* XXX 2563ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * This is a hack for now. We should move this data into the main Indic table. 25774e54cf446bb979e488685e8c09eeed6b9d03c24Behdad Esfahbod * Or completely remove it and just check in the tables. 2583ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod */ 2593ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodstatic const hb_codepoint_t ra_chars[] = { 2603ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x0930, /* Devanagari */ 2613ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x09B0, /* Bengali */ 2623ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x09F0, /* Bengali */ 26374e54cf446bb979e488685e8c09eeed6b9d03c24Behdad Esfahbod 0x0A30, /* Gurmukhi */ /* No Reph */ 2643ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x0AB0, /* Gujarati */ 2653ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x0B30, /* Oriya */ 26674e54cf446bb979e488685e8c09eeed6b9d03c24Behdad Esfahbod 0x0BB0, /* Tamil */ /* No Reph */ 26774e54cf446bb979e488685e8c09eeed6b9d03c24Behdad Esfahbod 0x0C30, /* Telugu */ /* No Reph */ 2683ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x0CB0, /* Kannada */ 26974e54cf446bb979e488685e8c09eeed6b9d03c24Behdad Esfahbod 0x0D30, /* Malayalam */ /* No Reph */ 270fcdc5f1c8849a7f38d9f34f64d60c6d95d7501f7Behdad Esfahbod 271fcdc5f1c8849a7f38d9f34f64d60c6d95d7501f7Behdad Esfahbod 0x179A, /* Khmer */ /* No Reph */ 2723ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 2733ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 2743ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 2753ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#endif /* HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH */ 276