gfx/harfbuzz/src/hb-ot-shape-complex-indic-private.hh

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     1 /*
     2  * Copyright © 2012  Google, Inc.
     3  *
     4  *  This is part of HarfBuzz, a text shaping library.
     5  *
     6  * Permission is hereby granted, without written agreement and without
     7  * license or royalty fees, to use, copy, modify, and distribute this
     8  * software and its documentation for any purpose, provided that the
     9  * above copyright notice and the following two paragraphs appear in
    10  * all copies of this software.
    11  *
    12  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
    13  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
    14  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
    15  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    16  * DAMAGE.
    17  *
    18  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
    19  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
    20  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
    21  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
    22  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
    23  *
    24  * Google Author(s): Behdad Esfahbod
    25  */
    27 #ifndef HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH
    28 #define HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH
    30 #include "hb-private.hh"
    33 #include "hb-ot-shape-complex-private.hh"
    34 #include "hb-ot-shape-private.hh" /* XXX Remove */
    37 #define INDIC_TABLE_ELEMENT_TYPE uint16_t
    39 /* Cateories used in the OpenType spec:
    40  * https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx
    41  */
    42 /* Note: This enum is duplicated in the -machine.rl source file.
    43  * Not sure how to avoid duplication. */
    44 enum indic_category_t {
    45   OT_X = 0,
    46   OT_C = 1,
    47   OT_V = 2,
    48   OT_N = 3,
    49   OT_H = 4,
    50   OT_ZWNJ = 5,
    51   OT_ZWJ = 6,
    52   OT_M = 7,
    53   OT_SM = 8,
    54   OT_VD = 9,
    55   OT_A = 10,
    56   OT_NBSP = 11,
    57   OT_DOTTEDCIRCLE = 12,
    58   OT_RS = 13, /* Register Shifter, used in Khmer OT spec. */
    59   OT_Coeng = 14, /* Khmer-style Virama. */
    60   OT_Repha = 15, /* Atomically-encoded logical or visual repha. */
    61   OT_Ra = 16,
    62   OT_CM = 17,  /* Consonant-Medial. */
    63   OT_Avag = 18, /* Avagraha. */
    64   OT_CM2 = 31 /* Consonant-Medial, second slot. */
    65 };
    67 /* Visual positions in a syllable from left to right. */
    68 enum indic_position_t {
    69   POS_START,
    71   POS_RA_TO_BECOME_REPH,
    72   POS_PRE_M,
    73   POS_PRE_C,
    75   POS_BASE_C,
    76   POS_AFTER_MAIN,
    78   POS_ABOVE_C,
    80   POS_BEFORE_SUB,
    81   POS_BELOW_C,
    82   POS_AFTER_SUB,
    84   POS_BEFORE_POST,
    85   POS_POST_C,
    86   POS_AFTER_POST,
    88   POS_FINAL_C,
    89   POS_SMVD,
    91   POS_END
    92 };
    94 /* Categories used in IndicSyllabicCategory.txt from UCD. */
    95 enum indic_syllabic_category_t {
    96   INDIC_SYLLABIC_CATEGORY_OTHER			= OT_X,
    98   INDIC_SYLLABIC_CATEGORY_AVAGRAHA		= OT_Avag,
    99   INDIC_SYLLABIC_CATEGORY_BINDU			= OT_SM,
   100   INDIC_SYLLABIC_CATEGORY_CONSONANT		= OT_C,
   101   INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD	= OT_C,
   102   INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL	= OT_CM,
   103   INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER	= OT_C,
   104   INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL	= OT_CM,
   105   INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER	= OT_NBSP,
   106   INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED	= OT_CM,
   107   INDIC_SYLLABIC_CATEGORY_CONSONANT_REPHA	= OT_Repha,
   108   INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER	= OT_X,
   109   INDIC_SYLLABIC_CATEGORY_NUKTA			= OT_N,
   110   INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER	= OT_RS,
   111   INDIC_SYLLABIC_CATEGORY_TONE_LETTER		= OT_X,
   112   INDIC_SYLLABIC_CATEGORY_TONE_MARK		= OT_N,
   113   INDIC_SYLLABIC_CATEGORY_VIRAMA		= OT_H,
   114   INDIC_SYLLABIC_CATEGORY_VISARGA		= OT_SM,
   115   INDIC_SYLLABIC_CATEGORY_VOWEL			= OT_V,
   116   INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT	= OT_M,
   117   INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT	= OT_V
   118 };
   120 /* Categories used in IndicSMatraCategory.txt from UCD */
   121 enum indic_matra_category_t {
   122   INDIC_MATRA_CATEGORY_NOT_APPLICABLE		= POS_END,
   124   INDIC_MATRA_CATEGORY_LEFT			= POS_PRE_C,
   125   INDIC_MATRA_CATEGORY_TOP			= POS_ABOVE_C,
   126   INDIC_MATRA_CATEGORY_BOTTOM			= POS_BELOW_C,
   127   INDIC_MATRA_CATEGORY_RIGHT			= POS_POST_C,
   129   /* These should resolve to the position of the last part of the split sequence. */
   130   INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT		= INDIC_MATRA_CATEGORY_RIGHT,
   131   INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT		= INDIC_MATRA_CATEGORY_RIGHT,
   132   INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM		= INDIC_MATRA_CATEGORY_BOTTOM,
   133   INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT	= INDIC_MATRA_CATEGORY_RIGHT,
   134   INDIC_MATRA_CATEGORY_TOP_AND_LEFT		= INDIC_MATRA_CATEGORY_TOP,
   135   INDIC_MATRA_CATEGORY_TOP_AND_LEFT_AND_RIGHT	= INDIC_MATRA_CATEGORY_RIGHT,
   136   INDIC_MATRA_CATEGORY_TOP_AND_RIGHT		= INDIC_MATRA_CATEGORY_RIGHT,
   138   INDIC_MATRA_CATEGORY_INVISIBLE		= INDIC_MATRA_CATEGORY_NOT_APPLICABLE,
   139   INDIC_MATRA_CATEGORY_OVERSTRUCK		= POS_AFTER_MAIN,
   140   INDIC_MATRA_CATEGORY_VISUAL_ORDER_LEFT	= POS_PRE_M
   141 };
   143 /* Note: We use ASSERT_STATIC_EXPR_ZERO() instead of ASSERT_STATIC_EXPR() and the comma operation
   144  * because gcc fails to optimize the latter and fills the table in at runtime. */
   145 #define INDIC_COMBINE_CATEGORIES(S,M) \
   146   (ASSERT_STATIC_EXPR_ZERO (M == INDIC_MATRA_CATEGORY_NOT_APPLICABLE || (S == INDIC_SYLLABIC_CATEGORY_VIRAMA || S == INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT)) + \
   147    ASSERT_STATIC_EXPR_ZERO (S < 255 && M < 255) + \
   148    ((M << 8) | S))
   150 HB_INTERNAL INDIC_TABLE_ELEMENT_TYPE
   151 hb_indic_get_categories (hb_codepoint_t u);
   153 #endif /* HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH */

mercurial