1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/harfbuzz/src/hb-ot-shape-complex-indic-private.hh Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,153 @@ 1.4 +/* 1.5 + * Copyright © 2012 Google, Inc. 1.6 + * 1.7 + * This is part of HarfBuzz, a text shaping library. 1.8 + * 1.9 + * Permission is hereby granted, without written agreement and without 1.10 + * license or royalty fees, to use, copy, modify, and distribute this 1.11 + * software and its documentation for any purpose, provided that the 1.12 + * above copyright notice and the following two paragraphs appear in 1.13 + * all copies of this software. 1.14 + * 1.15 + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 1.16 + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 1.17 + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 1.18 + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 1.19 + * DAMAGE. 1.20 + * 1.21 + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 1.22 + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 1.23 + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 1.24 + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 1.25 + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 1.26 + * 1.27 + * Google Author(s): Behdad Esfahbod 1.28 + */ 1.29 + 1.30 +#ifndef HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH 1.31 +#define HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH 1.32 + 1.33 +#include "hb-private.hh" 1.34 + 1.35 + 1.36 +#include "hb-ot-shape-complex-private.hh" 1.37 +#include "hb-ot-shape-private.hh" /* XXX Remove */ 1.38 + 1.39 + 1.40 +#define INDIC_TABLE_ELEMENT_TYPE uint16_t 1.41 + 1.42 +/* Cateories used in the OpenType spec: 1.43 + * https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx 1.44 + */ 1.45 +/* Note: This enum is duplicated in the -machine.rl source file. 1.46 + * Not sure how to avoid duplication. */ 1.47 +enum indic_category_t { 1.48 + OT_X = 0, 1.49 + OT_C = 1, 1.50 + OT_V = 2, 1.51 + OT_N = 3, 1.52 + OT_H = 4, 1.53 + OT_ZWNJ = 5, 1.54 + OT_ZWJ = 6, 1.55 + OT_M = 7, 1.56 + OT_SM = 8, 1.57 + OT_VD = 9, 1.58 + OT_A = 10, 1.59 + OT_NBSP = 11, 1.60 + OT_DOTTEDCIRCLE = 12, 1.61 + OT_RS = 13, /* Register Shifter, used in Khmer OT spec. */ 1.62 + OT_Coeng = 14, /* Khmer-style Virama. */ 1.63 + OT_Repha = 15, /* Atomically-encoded logical or visual repha. */ 1.64 + OT_Ra = 16, 1.65 + OT_CM = 17, /* Consonant-Medial. */ 1.66 + OT_Avag = 18, /* Avagraha. */ 1.67 + OT_CM2 = 31 /* Consonant-Medial, second slot. */ 1.68 +}; 1.69 + 1.70 +/* Visual positions in a syllable from left to right. */ 1.71 +enum indic_position_t { 1.72 + POS_START, 1.73 + 1.74 + POS_RA_TO_BECOME_REPH, 1.75 + POS_PRE_M, 1.76 + POS_PRE_C, 1.77 + 1.78 + POS_BASE_C, 1.79 + POS_AFTER_MAIN, 1.80 + 1.81 + POS_ABOVE_C, 1.82 + 1.83 + POS_BEFORE_SUB, 1.84 + POS_BELOW_C, 1.85 + POS_AFTER_SUB, 1.86 + 1.87 + POS_BEFORE_POST, 1.88 + POS_POST_C, 1.89 + POS_AFTER_POST, 1.90 + 1.91 + POS_FINAL_C, 1.92 + POS_SMVD, 1.93 + 1.94 + POS_END 1.95 +}; 1.96 + 1.97 +/* Categories used in IndicSyllabicCategory.txt from UCD. */ 1.98 +enum indic_syllabic_category_t { 1.99 + INDIC_SYLLABIC_CATEGORY_OTHER = OT_X, 1.100 + 1.101 + INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_Avag, 1.102 + INDIC_SYLLABIC_CATEGORY_BINDU = OT_SM, 1.103 + INDIC_SYLLABIC_CATEGORY_CONSONANT = OT_C, 1.104 + INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD = OT_C, 1.105 + INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL = OT_CM, 1.106 + INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER = OT_C, 1.107 + INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL = OT_CM, 1.108 + INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER = OT_NBSP, 1.109 + INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_CM, 1.110 + INDIC_SYLLABIC_CATEGORY_CONSONANT_REPHA = OT_Repha, 1.111 + INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER = OT_X, 1.112 + INDIC_SYLLABIC_CATEGORY_NUKTA = OT_N, 1.113 + INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER = OT_RS, 1.114 + INDIC_SYLLABIC_CATEGORY_TONE_LETTER = OT_X, 1.115 + INDIC_SYLLABIC_CATEGORY_TONE_MARK = OT_N, 1.116 + INDIC_SYLLABIC_CATEGORY_VIRAMA = OT_H, 1.117 + INDIC_SYLLABIC_CATEGORY_VISARGA = OT_SM, 1.118 + INDIC_SYLLABIC_CATEGORY_VOWEL = OT_V, 1.119 + INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT = OT_M, 1.120 + INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT = OT_V 1.121 +}; 1.122 + 1.123 +/* Categories used in IndicSMatraCategory.txt from UCD */ 1.124 +enum indic_matra_category_t { 1.125 + INDIC_MATRA_CATEGORY_NOT_APPLICABLE = POS_END, 1.126 + 1.127 + INDIC_MATRA_CATEGORY_LEFT = POS_PRE_C, 1.128 + INDIC_MATRA_CATEGORY_TOP = POS_ABOVE_C, 1.129 + INDIC_MATRA_CATEGORY_BOTTOM = POS_BELOW_C, 1.130 + INDIC_MATRA_CATEGORY_RIGHT = POS_POST_C, 1.131 + 1.132 + /* These should resolve to the position of the last part of the split sequence. */ 1.133 + INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT, 1.134 + INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT, 1.135 + INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM = INDIC_MATRA_CATEGORY_BOTTOM, 1.136 + INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT, 1.137 + INDIC_MATRA_CATEGORY_TOP_AND_LEFT = INDIC_MATRA_CATEGORY_TOP, 1.138 + INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT, 1.139 + INDIC_MATRA_CATEGORY_TOP_AND_RIGHT = INDIC_MATRA_CATEGORY_RIGHT, 1.140 + 1.141 + INDIC_MATRA_CATEGORY_INVISIBLE = INDIC_MATRA_CATEGORY_NOT_APPLICABLE, 1.142 + INDIC_MATRA_CATEGORY_OVERSTRUCK = POS_AFTER_MAIN, 1.143 + INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT = POS_PRE_M 1.144 +}; 1.145 + 1.146 +/* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation 1.147 + * because gcc fails to optimize the latter and fills the table in at runtime. */ 1.148 +#define INDIC_COMBINE_CATEGORIES(S,M) \ 1.149 + (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || (S == INDIC_SYLLABIC_CATEGORY_VIRAMA || S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT)) + \ 1.150 + ASSERT_STATIC_EXPR_ZERO (S < 255 && M < 255) + \ 1.151 + ((M << 8) | S)) 1.152 + 1.153 +HB_INTERNAL INDIC_TABLE_ELEMENT_TYPE 1.154 +hb_indic_get_categories (hb_codepoint_t u); 1.155 + 1.156 +#endif /* HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH */