// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_OPENTYPE_OPEN_TYPE_MATH_STRETCH_DATA_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_OPENTYPE_OPEN_TYPE_MATH_STRETCH_DATA_H_

#include "base/optional.h"
#include "third_party/blink/renderer/platform/fonts/glyph.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"

namespace blink {

class PLATFORM_EXPORT OpenTypeMathStretchData {
 public:
  enum StretchAxis : uint8_t { Horizontal = 0, Vertical = 1 };

  // https://docs.microsoft.com/en-us/typography/opentype/spec/math#mathGlyphVariantRecordFormat
  // Note: Only variantGlyph is considered as using advanceMeasurement can lead
  // to inconsistent values compared to what SimpleFontData returns.
  using GlyphVariantRecord = Glyph;

  // https://docs.microsoft.com/en-us/typography/opentype/spec/math#glyphPartRecord
  struct GlyphPartRecord {
    Glyph glyph;
    float start_connector_length;
    float end_connector_length;
    float full_advance;
    bool is_extender;
  };

  // https://mathml-refresh.github.io/mathml-core/#the-glyphassembly-table
  struct AssemblyParameters {
    float connector_overlap{0};
    unsigned repetition_count{0};
    unsigned glyph_count{0};
    float stretch_size{0};
    Vector<GlyphPartRecord> parts;
  };
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_OPENTYPE_OPEN_TYPE_MATH_STRETCH_DATA_H_
