hb-ot-shape-private.hh revision 208f70f0553d73d2908b21b9552298029482a8b9
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright © 2010  Google, Inc.
304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt *
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *  This is part of HarfBuzz, a text shaping library.
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt *
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * Permission is hereby granted, without written agreement and without
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * license or royalty fees, to use, copy, modify, and distribute this
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * software and its documentation for any purpose, provided that the
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * above copyright notice and the following two paragraphs appear in
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * all copies of this software.
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
1561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * DAMAGE.
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Google Author(s): Behdad Esfahbod
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef HB_OT_SHAPE_PRIVATE_HH
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define HB_OT_SHAPE_PRIVATE_HH
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "hb-private.hh"
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "hb-ot-map-private.hh"
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "hb-ot-shape-complex-private.hh"
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct hb_ot_shape_plan_t
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  hb_ot_map_t map;
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  const hb_ot_complex_shaper_t *shaper;
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtinline void
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt_hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_unicode_funcs_t *unicode)
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  info->unicode_props0() = ((unsigned int) unicode->general_category (info->codepoint)) |
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   (unicode->is_zero_width (info->codepoint) ? 0x80 : 0);
48f21452aea786ac056eb01f1cbba4f553bd502747Dmitry Shmidt  info->unicode_props1() = unicode->modified_combining_class (info->codepoint);
49f21452aea786ac056eb01f1cbba4f553bd502747Dmitry Shmidt}
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtinline hb_unicode_general_category_t
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt_hb_glyph_info_get_general_category (const hb_glyph_info_t *info)
5361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt{
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  return (hb_unicode_general_category_t) (info->unicode_props0() & 0x7F);
55a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt}
56a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
57cce06667447b5aec83452adb0c15100ada531095Dmitry Shmidtinline unsigned int
58cce06667447b5aec83452adb0c15100ada531095Dmitry Shmidt_hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  return info->unicode_props1();
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtinline hb_bool_t
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt_hb_glyph_info_is_zero_width (const hb_glyph_info_t *info)
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  return !!(info->unicode_props0() & 0x80);
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* HB_OT_SHAPE_PRIVATE_HH */
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt