1d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org// Use of this source code is governed by a BSD-style license that can be
3d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org// found in the LICENSE file.
4d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org
5d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org#ifndef OTS_CFF_H_
6d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org#define OTS_CFF_H_
7d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org
8d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org#include "ots.h"
9d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org
106263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org#include <map>
11a4099a3bb81adafc5593090c1185ec82933a3d6eyusukes@chromium.org#include <string>
12edfb13039debb4b0d4c8305474a5540d9d3aab07yusukes@chromium.org#include <vector>
13a4099a3bb81adafc5593090c1185ec82933a3d6eyusukes@chromium.org
14d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.orgnamespace ots {
15d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org
166263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.orgstruct CFFIndex {
176263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  CFFIndex()
186263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org      : count(0), off_size(0), offset_to_next(0) {}
196263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  uint16_t count;
206263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  uint8_t off_size;
216263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  std::vector<uint32_t> offsets;
226263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  uint32_t offset_to_next;
236263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org};
246263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org
25d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.orgstruct OpenTypeCFF {
26d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org  const uint8_t *data;
27d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org  size_t length;
28a4099a3bb81adafc5593090c1185ec82933a3d6eyusukes@chromium.org  // Name INDEX. This name is used in name.cc as a postscript font name.
29a4099a3bb81adafc5593090c1185ec82933a3d6eyusukes@chromium.org  std::string name;
30edfb13039debb4b0d4c8305474a5540d9d3aab07yusukes@chromium.org
316263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  // The number of fonts the file has.
32edfb13039debb4b0d4c8305474a5540d9d3aab07yusukes@chromium.org  size_t font_dict_length;
336263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  // A map from glyph # to font #.
346263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  std::map<uint16_t, uint8_t> fd_select;
356263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org
366263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  // A list of char strings.
376263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  std::vector<CFFIndex *> char_strings_array;
386263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  // A list of Local Subrs associated with FDArrays. Can be empty.
396263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  std::vector<CFFIndex *> local_subrs_per_font;
406263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  // A Local Subrs associated with Top DICT. Can be NULL.
416263d06109011f6cff761aed14ded117c8fa1836yusukes@chromium.org  CFFIndex *local_subrs;
42d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org};
43d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org
44d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org}  // namespace ots
45d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org
46d257d186ae2a08042a412824678f98241a1a4f3cyusukes@chromium.org#endif  // OTS_CFF_H_
47