hb-ot-shape-complex-indic-private.hh revision dbccf87eef0d26838fa4bb3ae26410f6c4818836
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, 603ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod OT_NBSP 613ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 623ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 633ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Visual positions in a syllable from left to right. */ 643ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodenum indic_position_t { 65dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_RA, 66dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_LEFT_MATRA, 67d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod 68dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_PRE_C, 69d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod 70dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_BEFORE_HALFS, 71dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_HALFS, 72d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod 73dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_BASE_C, 74dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_ABOVE_C, 75dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_BELOW_C, 76dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_POST_C, 77d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod 78dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_MATRAS, 79dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod 80dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_REPH, 81dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod 82dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod POS_SMVD 833ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 843ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 853ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Categories used in IndicSyllabicCategory.txt from UCD */ 863ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* The assignments are guesswork */ 873ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodenum indic_syllabic_category_t { 883ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_OTHER = OT_X, 893ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 903ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_X, 913ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_BINDU = OT_SM, 923ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT = OT_C, 933ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD = OT_C, 943ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL = OT_C, 953ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER = OT_C, 963ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL = OT_C, 973ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER = OT_NBSP, 983ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_C, 993ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_CONSONANT_REPHA = OT_C, 1003ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER = OT_X, 1013ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_NUKTA = OT_N, 1023ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER = OT_X, 1033ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_TONE_LETTER = OT_X, 1043ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_TONE_MARK = OT_X, 1053ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VIRAMA = OT_H, 1063ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VISARGA = OT_SM, 1073ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VOWEL = OT_V, 1083ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT = OT_M, 1093ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT = OT_V 1103ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 1113ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1123ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Categories used in IndicSMatraCategory.txt from UCD */ 1133ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodenum indic_matra_category_t { 114dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod INDIC_MATRA_CATEGORY_NOT_APPLICABLE = POS_BASE_C, 1153ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 116d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_LEFT = POS_LEFT_MATRA, 117d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP = POS_MATRAS, 118d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_BOTTOM = POS_MATRAS, 119d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_RIGHT = POS_MATRAS, 1203ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1213ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod /* We don't really care much about these since we decompose them 1223ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * in the generic pre-shaping layer. They will only be used if 1233ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * the font does not cover the decomposition. In which case, we 1243ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * define these as aliases to the place we want the split-matra 1253ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * glyph to show up. Quite arbitrary. 1263ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 1273ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * TODO: There are some split matras without Unicode decompositions. 1283ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * We have to figure out what to do with them. 1293ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod */ 130d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT = POS_MATRAS, 131d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT = POS_LEFT_MATRA, 132d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM = POS_MATRAS, 133d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT = POS_MATRAS, 134d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_LEFT = POS_LEFT_MATRA, 135d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT = POS_LEFT_MATRA, 136d4480ace7fdbe48aeaf77278c032b8b2ef2ebe8eBehdad Esfahbod INDIC_MATRA_CATEGORY_TOP_AND_RIGHT = POS_MATRAS, 1373ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1383ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_MATRA_CATEGORY_INVISIBLE = INDIC_MATRA_CATEGORY_NOT_APPLICABLE, 1393ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_MATRA_CATEGORY_OVERSTRUCK = INDIC_MATRA_CATEGORY_NOT_APPLICABLE, 1403ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT = INDIC_MATRA_CATEGORY_NOT_APPLICABLE 1413ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 1423ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1433ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation 1443ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * because gcc fails to optimize the latter and fills the table in at runtime. */ 1453ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#define INDIC_COMBINE_CATEGORIES(S,M) \ 1463ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || (S == INDIC_SYLLABIC_CATEGORY_VIRAMA || S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT)) + \ 1473ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod ASSERT_STATIC_EXPR_ZERO (S < 16 && M < 16) + \ 1483ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod ((M << 4) | S)) 1493ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1503ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1513ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#include "hb-ot-shape-complex-indic-table.hh" 1523ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 1533ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* XXX 1543ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * This is a hack for now. We should: 1553ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 1. Move this data into the main Indic table, 1563ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * and/or 1573ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * 2. Probe font lookups to determine consonant positions. 1583ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod */ 1593ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodstatic const struct consonant_position_t { 1603ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod hb_codepoint_t u; 1613ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod indic_position_t position; 1623ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod} consonant_positions[] = { 163dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0930, POS_BELOW_C}, 164dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x09AC, POS_BELOW_C}, 165dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x09AF, POS_POST_C}, 166dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x09B0, POS_BELOW_C}, 167dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x09F0, POS_BELOW_C}, 168dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0A2F, POS_POST_C}, 169dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0A30, POS_BELOW_C}, 170dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0A35, POS_BELOW_C}, 171dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0A39, POS_BELOW_C}, 172dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0AB0, POS_BELOW_C}, 173dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B24, POS_BELOW_C}, 174dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B28, POS_BELOW_C}, 175dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B2C, POS_BELOW_C}, 176dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B2D, POS_BELOW_C}, 177dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B2E, POS_BELOW_C}, 178dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B2F, POS_POST_C}, 179dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B30, POS_BELOW_C}, 180dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B32, POS_BELOW_C}, 181dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B33, POS_BELOW_C}, 182dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B5F, POS_POST_C}, 183dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0B71, POS_BELOW_C}, 184dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C15, POS_BELOW_C}, 185dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C16, POS_BELOW_C}, 186dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C17, POS_BELOW_C}, 187dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C18, POS_BELOW_C}, 188dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C19, POS_BELOW_C}, 189dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1A, POS_BELOW_C}, 190dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1B, POS_BELOW_C}, 191dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1C, POS_BELOW_C}, 192dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1D, POS_BELOW_C}, 193dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1E, POS_BELOW_C}, 194dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C1F, POS_BELOW_C}, 195dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C20, POS_BELOW_C}, 196dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C21, POS_BELOW_C}, 197dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C22, POS_BELOW_C}, 198dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C23, POS_BELOW_C}, 199dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C24, POS_BELOW_C}, 200dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C25, POS_BELOW_C}, 201dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C26, POS_BELOW_C}, 202dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C27, POS_BELOW_C}, 203dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C28, POS_BELOW_C}, 204dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2A, POS_BELOW_C}, 205dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2B, POS_BELOW_C}, 206dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2C, POS_BELOW_C}, 207dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2D, POS_BELOW_C}, 208dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2E, POS_BELOW_C}, 209dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C2F, POS_BELOW_C}, 210dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C30, POS_BELOW_C}, 211dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C32, POS_BELOW_C}, 212dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C33, POS_BELOW_C}, 213dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C35, POS_BELOW_C}, 214dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C36, POS_BELOW_C}, 215dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C37, POS_BELOW_C}, 216dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C38, POS_BELOW_C}, 217dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C39, POS_BELOW_C}, 218dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C95, POS_BELOW_C}, 219dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C96, POS_BELOW_C}, 220dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C97, POS_BELOW_C}, 221dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C98, POS_BELOW_C}, 222dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C99, POS_BELOW_C}, 223dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9A, POS_BELOW_C}, 224dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9B, POS_BELOW_C}, 225dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9C, POS_BELOW_C}, 226dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9D, POS_BELOW_C}, 227dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9E, POS_BELOW_C}, 228dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0C9F, POS_BELOW_C}, 229dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA0, POS_BELOW_C}, 230dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA1, POS_BELOW_C}, 231dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA2, POS_BELOW_C}, 232dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA3, POS_BELOW_C}, 233dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA4, POS_BELOW_C}, 234dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA5, POS_BELOW_C}, 235dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA6, POS_BELOW_C}, 236dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA7, POS_BELOW_C}, 237dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CA8, POS_BELOW_C}, 238dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAA, POS_BELOW_C}, 239dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAB, POS_BELOW_C}, 240dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAC, POS_BELOW_C}, 241dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAD, POS_BELOW_C}, 242dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAE, POS_BELOW_C}, 243dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CAF, POS_BELOW_C}, 244dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB0, POS_BELOW_C}, 245dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB2, POS_BELOW_C}, 246dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB3, POS_BELOW_C}, 247dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB5, POS_BELOW_C}, 248dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB6, POS_BELOW_C}, 249dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB7, POS_BELOW_C}, 250dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB8, POS_BELOW_C}, 251dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CB9, POS_BELOW_C}, 252dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0CDE, POS_BELOW_C}, 253dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0D2F, POS_POST_C}, 254dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0D30, POS_POST_C}, 255dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0D32, POS_BELOW_C}, 256dbccf87eef0d26838fa4bb3ae26410f6c4818836Behdad Esfahbod {0x0D35, POS_POST_C}, 2573ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 2583ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 2593ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod/* XXX 2603ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod * This is a hack for now. We should move this data into the main Indic table. 2613ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod */ 2623ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbodstatic const hb_codepoint_t ra_chars[] = { 2633ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x0930, /* Devanagari */ 2643ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x09B0, /* Bengali */ 2653ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x09F0, /* Bengali */ 2663ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod//0x09F1, /* Bengali */ 2673ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod//0x0A30, /* Gurmukhi */ 2683ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x0AB0, /* Gujarati */ 2693ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x0B30, /* Oriya */ 2703ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod//0x0BB0, /* Tamil */ 2713ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod//0x0C30, /* Telugu */ 2723ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 0x0CB0, /* Kannada */ 2733ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod//0x0D30, /* Malayalam */ 2743ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod}; 2753ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 2763ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod 2773ed4634ec349fa9e943ad23718c04be4dd4bba62Behdad Esfahbod#endif /* HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH */ 278