// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.fonts;

alias Weight = uint16;

// Commonly used constants for font weight.
const WEIGHT_THIN Weight = 100;
const WEIGHT_EXTRA_LIGHT Weight = 200;
const WEIGHT_LIGHT Weight = 300;
const WEIGHT_NORMAL Weight = 400;
const WEIGHT_MEDIUM Weight = 500;
const WEIGHT_SEMI_BOLD Weight = 600;
const WEIGHT_BOLD Weight = 700;
const WEIGHT_EXTRA_BOLD Weight = 800;
const WEIGHT_BLACK Weight = 900;

/// The type of slant of a type face.
type Slant = strict enum {
    /// The default; upright glyphs.
    UPRIGHT = 1;
    /// Specially designed, slanted and slightly calligraphic glyphs.
    ITALIC = 2;
    /// Skewed glyphs. Oblique usually means an geometric transformation of the upright variant,
    /// rather than a custom-designed variant.
    OBLIQUE = 3;
};

/// Horizontal width class of the glyphs.
///
/// See https://docs.microsoft.com/en-us/typography/opentype/spec/os2#uswidthclass.
type Width = strict enum {
    /// 50% of normal width
    ULTRA_CONDENSED = 1;
    /// 62.5% of normal width
    EXTRA_CONDENSED = 2;
    /// 75% of normal width
    CONDENSED = 3;
    /// 87.5% of normal width
    SEMI_CONDENSED = 4;
    /// Normal width
    NORMAL = 5;
    /// 112.5% of normal width
    SEMI_EXPANDED = 6;
    /// 125% of normal width
    EXPANDED = 7;
    /// 150% of normal width
    EXTRA_EXPANDED = 8;
    /// 200% of normal width
    ULTRA_EXPANDED = 9;
};

/// Default weight of a typeface when none is specified.
const DEFAULT_WEIGHT Weight = WEIGHT_NORMAL;

/// Default slant of a typeface when none is specified.
const DEFAULT_SLANT Slant = Slant.UPRIGHT;

/// Default width of a typeface when none is specified.
const DEFAULT_WIDTH Width = Width.NORMAL;

/// Style properties that can be used when requesting or describing a type face.
type Style2 = table {
    /// See `Slant`.
    1: slant Slant;
    /// Weight or thickness of the glyphs. Allowed values are integers in the range [1, 1000], but
    /// most real-world font families only support some integer multiples of 100:
    /// {100, 200, ..., 900}. Normal text (`WEIGHT_NORMAL`) is 400; `WEIGHT_BOLD` is 700.
    ///
    /// See:
    /// https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Common_weight_name_mapping
    /// https://docs.microsoft.com/en-us/typography/opentype/spec/os2#usweightclass
    2: weight Weight;
    /// See `Width`.
    3: width Width;
};

/// Generic groups of font families that can serve as fallbacks for a specific family.
///
/// Every font family belongs to some _generic_ font family (see examples below).
///
/// If an exact requested family is unavailable but a fallback group is specified in the request,
/// the provider may return some other family that belongs to the fallback group. For example, if
/// the client requests the "Arial" family with a `SANS_SERIF` fallback, and "Arial" is unavailable,
/// the provider may return another available sans serif family, such as "Roboto Regular", instead.
///
/// See also:
/// https://www.w3.org/TR/css-fonts-4/#generic-font-families
type GenericFontFamily = strict enum {
    /// Glyphs have little "serifs", hooks, or notches at the ends of most strokes.
    /// Examples: Georgia, Noto Serif, Times New Roman.
    SERIF = 1;
    /// Glyphs that have no serifs at the ends of most strokes.
    /// Examples: Arial, Noto Sans, Roboto, Tahoma.
    SANS_SERIF = 2;
    /// Fixed-width fonts.
    /// Examples: Consolas, Courier New, Inconsolata.
    MONOSPACE = 3;
    /// Handwritten or cursive fonts.
    /// Examples: Brush Script, Comic Sans, Lucida Calligraphy.
    CURSIVE = 4;
    /// Decorative fonts.
    /// Examples: Impact, Papyrus.
    FANTASY = 5;
    /// The default user interface font on the target platform.
    /// This is included for completeness with the CSS specification; font manifests should not
    /// declare that a font belongs to the `SYSTEM_UI` generic family, but instead should declare a
    /// more specific option (e.g. `SERIF` for Roboto).
    ///
    /// Not commonly used.
    SYSTEM_UI = 6;
    /// Fonts that are used specifically for rendering emoji code points.
    /// Examples: Noto Color Emoji.
    EMOJI = 7;
    /// Fonts that are used primarily for rendering mathematical expressions.
    ///
    /// Not commonly used.
    MATH = 8;
    /// A group of Chinese fonts between serif and cursive, often used for official Chinese
    /// Government documents.
    ///
    /// Not commonly used.
    FANGSONG = 9;
};
