14dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org// Copyright (c) 2011 The Chromium Authors. All rights reserved.
24dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org// Use of this source code is governed by a BSD-style license that can be
34dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org// found in the LICENSE file.
44dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
54dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#ifndef OTS_METRICS_H_
64dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#define OTS_METRICS_H_
74dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
84dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include <utility>  // std::pair
94dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include <vector>
104dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
114dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#include "ots.h"
124dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
134dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgnamespace ots {
144dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
154dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgstruct OpenTypeMetricsHeader {
164dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  uint32_t version;
174dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t ascent;
184dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t descent;
194dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t linegap;
204dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  uint16_t adv_width_max;
214dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t min_sb1;
224dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t min_sb2;
234dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t max_extent;
244dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t caret_slope_rise;
254dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t caret_slope_run;
264dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  int16_t caret_offset;
274dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  uint16_t num_metrics;
284dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org};
294dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
304dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgstruct OpenTypeMetricsTable {
314dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  std::vector<std::pair<uint16_t, int16_t> > entries;
324dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org  std::vector<int16_t> sbs;
334dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org};
344dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
354dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgbool ParseMetricsHeader(OpenTypeFile *file, Buffer *table,
364dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org                        OpenTypeMetricsHeader *header);
374dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgbool SerialiseMetricsHeader(OTSStream *out,
384dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org                            const OpenTypeMetricsHeader *header);
394dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
404dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgbool ParseMetricsTable(Buffer *table,
414dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org                       const uint16_t num_glyphs,
424dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org                       const OpenTypeMetricsHeader *header,
434dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org                       OpenTypeMetricsTable *metrics);
444dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.orgbool SerialiseMetricsTable(OTSStream *out,
454dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org                           const OpenTypeMetricsTable *metrics);
464dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
474dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org}  // namespace ots
484dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
494dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org#endif  // OTS_METRICS_H_
504dcad600f99d85201d9db3cb8bee166ec2aaca85bashi@chromium.org
51