115232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod/*
22409d5f8d7dd8b535ce5ea29e933f7db27d33793Behdad Esfahbod * Copyright © 2009  Red Hat, Inc.
3e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbod * Copyright © 2012  Google, Inc.
415232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod *
5c755cb3e3ac55156d0d2ec05adea7a650b97cc41Behdad Esfahbod *  This is part of HarfBuzz, a text shaping library.
615232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod *
715232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * Permission is hereby granted, without written agreement and without
815232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * license or royalty fees, to use, copy, modify, and distribute this
915232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * software and its documentation for any purpose, provided that the
1015232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * above copyright notice and the following two paragraphs appear in
1115232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * all copies of this software.
1215232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod *
1315232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
1415232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
1515232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
1615232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
1715232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * DAMAGE.
1815232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod *
1915232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
2015232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
2115232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
2215232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
2315232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2415232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod *
2515232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod * Red Hat Author(s): Behdad Esfahbod
26e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbod * Google Author(s): Behdad Esfahbod
2715232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod */
2815232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod
29d1c9eb458c843215da8df84b596bfae51fee135bBehdad Esfahbod#ifndef HB_H_IN
30d1c9eb458c843215da8df84b596bfae51fee135bBehdad Esfahbod#error "Include <hb.h> instead."
31d1c9eb458c843215da8df84b596bfae51fee135bBehdad Esfahbod#endif
32d1c9eb458c843215da8df84b596bfae51fee135bBehdad Esfahbod
3315232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod#ifndef HB_SHAPE_H
3415232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod#define HB_SHAPE_H
3515232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod
3615232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod#include "hb-common.h"
3715232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod#include "hb-buffer.h"
3815232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod#include "hb-font.h"
3915232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod
4015232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad EsfahbodHB_BEGIN_DECLS
4115232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod
42acdba3f90b232fc12fcb200dca2584481b339118Behdad Esfahbod
431bc1cb3603167f5da309336f7018c8b0608ac104Behdad Esfahbodtypedef struct hb_feature_t {
440db299ccad346d9ea5573ea8408b78d9997bd379Behdad Esfahbod  hb_tag_t      tag;
450db299ccad346d9ea5573ea8408b78d9997bd379Behdad Esfahbod  uint32_t      value;
4615232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod  unsigned int  start;
4715232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod  unsigned int  end;
4815232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod} hb_feature_t;
4915232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod
50e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbod/* len=-1 means str is NUL-terminated */
51e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbodhb_bool_t
52e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbodhb_feature_from_string (const char *str, int len,
53e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbod			hb_feature_t *feature);
54e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbod
556f69fa283e0a488da811df78bc83c41ed248b688Behdad Esfahbod/* Something like 128 bytes is more than enough.
56e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbod * nul-terminates. */
57e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbodvoid
58e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbodhb_feature_to_string (hb_feature_t *feature,
59e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbod		      char *buf, unsigned int size);
60e30ebd2794b37bd8ec716a258d5cb017fb1dfadcBehdad Esfahbod
6102aeca985b570763342c35e99af90025bfa088d5Behdad Esfahbod
623ca6c4ecc299295b6682fa2b6b9f83b213223badBehdad Esfahbodvoid
6302aeca985b570763342c35e99af90025bfa088d5Behdad Esfahbodhb_shape (hb_font_t           *font,
6402aeca985b570763342c35e99af90025bfa088d5Behdad Esfahbod	  hb_buffer_t         *buffer,
6502aeca985b570763342c35e99af90025bfa088d5Behdad Esfahbod	  const hb_feature_t  *features,
663ca6c4ecc299295b6682fa2b6b9f83b213223badBehdad Esfahbod	  unsigned int         num_features);
673ca6c4ecc299295b6682fa2b6b9f83b213223badBehdad Esfahbod
683ca6c4ecc299295b6682fa2b6b9f83b213223badBehdad Esfahbodhb_bool_t
690501573deda3a8dcdfcea491392f554f21ed0154Behdad Esfahbodhb_shape_full (hb_font_t          *font,
700501573deda3a8dcdfcea491392f554f21ed0154Behdad Esfahbod	       hb_buffer_t        *buffer,
710501573deda3a8dcdfcea491392f554f21ed0154Behdad Esfahbod	       const hb_feature_t *features,
720501573deda3a8dcdfcea491392f554f21ed0154Behdad Esfahbod	       unsigned int        num_features,
730501573deda3a8dcdfcea491392f554f21ed0154Behdad Esfahbod	       const char * const *shaper_list);
7415232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod
759da554504e30a326fc57b28cdb0e57108bfa9555Behdad Esfahbodconst char **
769da554504e30a326fc57b28cdb0e57108bfa9555Behdad Esfahbodhb_shape_list_shapers (void);
779da554504e30a326fc57b28cdb0e57108bfa9555Behdad Esfahbod
7815232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod
7915232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad EsfahbodHB_END_DECLS
8015232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod
8115232e26f4a89dab1b6de35ad9d3d16e75bf93d0Behdad Esfahbod#endif /* HB_SHAPE_H */
82