| // 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; |
| |
| using Weight = uint16; |
| |
| // Commonly used constants for font weight. |
| const Weight WEIGHT_THIN = 100; |
| const Weight WEIGHT_EXTRA_LIGHT = 200; |
| const Weight WEIGHT_LIGHT = 300; |
| const Weight WEIGHT_NORMAL = 400; |
| const Weight WEIGHT_MEDIUM = 500; |
| const Weight WEIGHT_SEMI_BOLD = 600; |
| const Weight WEIGHT_BOLD = 700; |
| const Weight WEIGHT_EXTRA_BOLD = 800; |
| const Weight WEIGHT_BLACK = 900; |
| |
| /// The type of slant of a type face. |
| enum Slant { |
| /// 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. |
| enum Width { |
| /// 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 Weight DEFAULT_WEIGHT = WEIGHT_NORMAL; |
| |
| /// Default slant of a typeface when none is specified. |
| const Slant DEFAULT_SLANT = Slant.UPRIGHT; |
| |
| /// Default width of a typeface when none is specified. |
| const Width DEFAULT_WIDTH = Width.NORMAL; |
| |
| /// Style properties that can be used when requesting or describing a type face. |
| table Style2 { |
| /// 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 |
| enum GenericFontFamily { |
| /// 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; |
| }; |