octo-deno/lib/make/fonts.ts

240 lines
4.1 KiB
TypeScript

/* 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([
/* <absolute-size> values */
[
"xx-small",
"x-small",
"small",
"medium",
"large",
"x-large",
"xx-large"
],
/* <relative-size> values */
["larger", "smaller"],
/* <length> values */
numbers.unsigned() + unit.unit(),
/* <percentage> 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;
}
}