tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

gsubgpos-context.cc (2227B)


      1 /*
      2 * Copyright © 2022  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): Garret Rieger
     25 */
     26 
     27 #include "gsubgpos-graph.hh"
     28 
     29 namespace graph {
     30 
     31 gsubgpos_graph_context_t::gsubgpos_graph_context_t (hb_tag_t table_tag_,
     32                                                    graph_t& graph_)
     33    : table_tag (table_tag_),
     34      graph (graph_),
     35      lookup_list_index (0),
     36      lookups ()
     37 {
     38  if (table_tag_ != HB_OT_TAG_GPOS
     39      &&  table_tag_ != HB_OT_TAG_GSUB)
     40    return;
     41 
     42  GSTAR* gstar = graph::GSTAR::graph_to_gstar (graph_);
     43  if (gstar) {
     44    gstar->find_lookups (graph, lookups);
     45    lookup_list_index = gstar->get_lookup_list_index (graph_);
     46  }
     47 }
     48 
     49 unsigned gsubgpos_graph_context_t::create_node (unsigned size)
     50 {
     51  char* buffer = (char*) hb_calloc (1, size);
     52  if (!buffer)
     53    return -1;
     54 
     55  if (!add_buffer (buffer)) {
     56    // Allocation did not get stored for freeing later.
     57    hb_free (buffer);
     58    return -1;
     59  }
     60 
     61  return graph.new_node (buffer, buffer + size);
     62 }
     63 
     64 unsigned gsubgpos_graph_context_t::num_non_ext_subtables ()  {
     65  unsigned count = 0;
     66  for (auto l : lookups.values ())
     67  {
     68    if (l->is_extension (table_tag)) continue;
     69    count += l->number_of_subtables ();
     70  }
     71  return count;
     72 }
     73 
     74 }