/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import random from "../random/random.ts"; import numbers from "./numbers.ts"; import unit from "./units.ts"; export default class font { static globalValue() { return random.pick(["inherit", "initial", "unset"]); } static style() { return random.pick(["italic", "normal", "oblique", "inherit"]); } static variant() { return random.pick(["normal", "small-caps", "inherit"]); } static weight() { return random.pick([ /* standard */ ["normal", "bold"], /* Relative to the parent */ ["bolder", "lighter"], /* numeric values */ [100, 200, 300, 400, 500, 600, 700, 800, 900] ]); } static size() { return random.pick([ /* values */ [ "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large" ], /* values */ ["larger", "smaller"], /* values */ numbers.unsigned() + unit.unit(), /* values */ unit.percent() ]); } static relativeSize() { let value = random.number(8); return random.item(["", "+", "-"]) + value; } static genericFamily() { return random.pick([ "serif", "sans-serif", "cursive", "fantasy", "monospace" ]); } static familyName() { return random.pick(["Times New Roman", "Arial", "Courier", "Helvetica"]); } static family() { let s = random.pick(font.familyName); if (random.chance(8)) { s += `, ${random.pick(font.genericFamily)}`; } return s; } static registeredFontFeatures() { return random.pick([ "aalt", "abvf", "abvm", "abvs", "afrc", "akhn", "blwf", "blwm", "blws", "calt", "case", "ccmp", "cfar", "cjct", "clig", "cpct", "cpsp", "cswh", "curs", "cv01-cv99", "c2pc", "c2sc", "dist", "dlig", "dnom", "expt", "falt", "fin2", "fin3", "fina", "frac", "fwid", "half", "haln", "halt", "hist", "hkna", "hlig", "hngl", "hojo", "hwid", "init", "isol", "ital", "jalt", "jp78", "jp83", "jp90", "jp04", "kern", "lfbd", "liga", "ljmo", "lnum", "locl", "ltra", "ltrm", "mark", "med2", "medi", "mgrk", "mkmk", "mset", "nalt", "nlck", "nukt", "numr", "onum", "opbd", "ordn", "ornm", "palt", "pcap", "pkna", "pnum", "pref", "pres", "pstf", "psts", "pwid", "qwid", "rand", "rkrf", "rlig", "rphf", "rtbd", "rtla", "rtlm", "ruby", "salt", "sinf", "size", "smcp", "smpl", "ss01", "ss02", "ss03", "ss04", "ss05", "ss06", "ss07", "ss08", "ss09", "ss10", "ss11", "ss12", "ss13", "ss14", "ss15", "ss16", "ss17", "ss18", "ss19", "ss20", "subs", "sups", "swsh", "titl", "tjmo", "tnam", "tnum", "trad", "twid", "unic", "valt", "vatu", "vert", "vhal", "vjmo", "vkna", "vkrn", "vpal", "vrt2", "zero" ]); } static font() { let s = ""; if (random.chance(4)) { s += `${random.pick(font.style)} `; } if (random.chance(4)) { s += `${random.pick(font.variant)} `; } if (random.chance(4)) { s += `${random.pick(font.weight)} `; } if (random.chance(4)) { s += `${numbers.any()}/`; } s += font.size(); s += " "; s += font.family(); return s; } }