111138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod/*
211138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * Copyright © 2012  Google, Inc.
311138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod *
411138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod *  This is part of HarfBuzz, a text shaping library.
511138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod *
611138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * Permission is hereby granted, without written agreement and without
711138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
811138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * software and its documentation for any purpose, provided that the
911138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * above copyright notice and the following two paragraphs appear in
1011138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * all copies of this software.
1111138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod *
1211138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
1311138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
1411138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
1511138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
1611138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * DAMAGE.
1711138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod *
1811138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
1911138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
2011138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
2111138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
2211138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2311138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod *
2411138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod * Google Author(s): Behdad Esfahbod
2511138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod */
2611138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod
2711138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod#ifndef HB_OT_SHAPE_NORMALIZE_PRIVATE_HH
2811138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod#define HB_OT_SHAPE_NORMALIZE_PRIVATE_HH
2911138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod
3011138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod#include "hb-private.hh"
3111138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod
3211138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod
33b00321ea78793d9b3592b5173a9800e6322424feBehdad Esfahbod/* buffer var allocations, used during the normalization process */
34b00321ea78793d9b3592b5173a9800e6322424feBehdad Esfahbod#define glyph_index()	var1.u32
3511138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod
36eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbodstruct hb_ot_shape_plan_t;
370736915b8ed789a209205fec762997af3a8af89cBehdad Esfahbod
3811138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbodenum hb_ot_shape_normalization_mode_t {
398fc1f7fe74a25bf8549f5edd79c7da6b720eb064Behdad Esfahbod  HB_OT_SHAPE_NORMALIZATION_MODE_NONE,
4011138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod  HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED,
4111138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS, /* never composes base-to-base */
42b85800f9de8976a7418ef9df467d3080c6ab0199Behdad Esfahbod  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, /* always fully decomposes and then recompose back */
43693918ef8541014a5ef7dfb91c6ea0ae36d9c368Behdad Esfahbod
44030ac5022e8a43b9329c26e72527bafc582ef44bBehdad Esfahbod  HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT = HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS
4511138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod};
4611138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod
47eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad EsfahbodHB_INTERNAL void _hb_ot_shape_normalize (const hb_ot_shape_plan_t *shaper,
4811138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod					 hb_buffer_t *buffer,
490736915b8ed789a209205fec762997af3a8af89cBehdad Esfahbod					 hb_font_t *font);
5011138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod
51eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod
52eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbodstruct hb_ot_shape_normalize_context_t
53eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod{
54eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod  const hb_ot_shape_plan_t *plan;
55eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod  hb_buffer_t *buffer;
56eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod  hb_font_t *font;
57eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod  hb_unicode_funcs_t *unicode;
58eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod  bool (*decompose) (const hb_ot_shape_normalize_context_t *c,
59eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod		     hb_codepoint_t  ab,
60eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod		     hb_codepoint_t *a,
61eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod		     hb_codepoint_t *b);
62eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod  bool (*compose) (const hb_ot_shape_normalize_context_t *c,
63eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod		   hb_codepoint_t  a,
64eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod		   hb_codepoint_t  b,
65eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod		   hb_codepoint_t *ab);
66eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod};
67eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod
68eba312c8d1b2bbe8cb9b6414e843e78d2c521aa4Behdad Esfahbod
6911138ccff71f442da1fcf64faa0e1d22e083e775Behdad Esfahbod#endif /* HB_OT_SHAPE_NORMALIZE_PRIVATE_HH */
70