fontconfig

package
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2021 License: MIT, MIT Imports: 29 Imported by: 0

README

fontconfig for Golang

This package is a port from the C fontconfig library.

Its main purpose is to fetch the metadata of the fonts installed in a system, and use that database to select the best font to use given some user-specified query (name, style, weight, etc...).

Differences from the original C library

While the main fonctionnality of the original library are preserved, some simplifications have been made (mainly to avoid complex logic of file system handling).

Caching

The package drops support for advanced caching: it is deferred to the users. They can use the provided Serialize and LoadFontset functions, but its up to them to specified what to cache, when and where.

Configuration build

The main way to specify complex configurations remains the XML fontconfig format. However, it is not possible to use <include> directives. Several config files are simply added one by one.

Font directories

The XML format does not support specifying font directories. Instead, scans are explicitely triggered by the user, which provide a file (ScanFontFile), an in-memory content (ScanFontRessource) or a list of directories (ScanFontDirectories).

Dependencies

This is a pure Go implementation, which rely on fonts as a substitute of FreeType to handle the scanning of a font file.

Documentation

Overview

Package fontconfig provides a way to list the fonts of a system and to query the best match with user defined criteria.

See the `Config` type for an entry point.

This package is a port of the C library.

Index

Examples

Constants

View Source
const (
	SLANT_ROMAN   = 0
	SLANT_ITALIC  = 100
	SLANT_OBLIQUE = 110

	WIDTH_ULTRACONDENSED = 50
	WIDTH_EXTRACONDENSED = 63
	WIDTH_CONDENSED      = 75
	WIDTH_SEMICONDENSED  = 87
	WIDTH_NORMAL         = 100
	WIDTH_SEMIEXPANDED   = 113
	WIDTH_EXPANDED       = 125
	WIDTH_EXTRAEXPANDED  = 150
	WIDTH_ULTRAEXPANDED  = 200

	PROPORTIONAL = 0
	DUAL         = 90
	MONO         = 100
	CHARCELL     = 110

	/* sub-pixel order */
	RGBA_UNKNOWN = 0
	RGBA_RGB     = 1
	RGBA_BGR     = 2
	RGBA_VRGB    = 3
	RGBA_VBGR    = 4
	RGBA_NONE    = 5

	/* hinting style */
	HINT_NONE   = 0
	HINT_SLIGHT = 1
	HINT_MEDIUM = 2
	HINT_FULL   = 3

	/* LCD filter */
	LCD_NONE    = 0
	LCD_DEFAULT = 1
	LCD_LIGHT   = 2
	LCD_LEGACY  = 3
)
View Source
const (
	WEIGHT_THIN       = 0
	WEIGHT_EXTRALIGHT = 40
	WEIGHT_ULTRALIGHT = WEIGHT_EXTRALIGHT
	WEIGHT_LIGHT      = 50
	WEIGHT_DEMILIGHT  = 55
	WEIGHT_SEMILIGHT  = WEIGHT_DEMILIGHT
	WEIGHT_BOOK       = 75
	WEIGHT_REGULAR    = 80
	WEIGHT_NORMAL     = WEIGHT_REGULAR
	WEIGHT_MEDIUM     = 100
	WEIGHT_DEMIBOLD   = 180
	WEIGHT_SEMIBOLD   = WEIGHT_DEMIBOLD
	WEIGHT_BOLD       = 200
	WEIGHT_EXTRABOLD  = 205
	WEIGHT_ULTRABOLD  = WEIGHT_EXTRABOLD
	WEIGHT_BLACK      = 210
	WEIGHT_HEAVY      = WEIGHT_BLACK
	WEIGHT_EXTRABLACK = 215
	WEIGHT_ULTRABLACK = WEIGHT_EXTRABLACK
)
View Source
const (

	// Rules in the config to apply to the query pattern (FcMatchPattern)
	MatchQuery matchKind
	// Rules in the config to apply to the fonts
	// returned as the result of a query (FcMatchFont)
	MatchResult
	// Rules in the config to apply to the fonts obtained
	// during the scan (FcMatchScan)
	MatchScan
)

Variables

View Source
var Identity = Matrix{1, 0, 0, 1}
View Source
var Standard = &Config{
	subst: []ruleSet{{name: "confs/09-autohint-if-no-hinting.conf", description: "Enable autohinter if font doesn't have any hinting", domain: "", subst: [matchKindEnd][]directive{nil, {{
		tests: []ruleTest{{expr: &expression{u: Bool(0), op: 5}, kind: 1, qual: 0, object: 51, op: 22}},
		edits: []ruleEdit{{expr: &expression{u: Bool(1), op: 5}, binding: 0, object: 19, op: 15}},
	}}, nil}},
		{name: "confs/10-autohint.conf", description: "Enable autohinter", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: Bool(1), op: 5}, binding: 0, object: 19, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-hinting-full.conf", description: "Set hintfull to hintstyle", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("hintfull"), op: 10}, binding: 0, object: 16, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-hinting-medium.conf", description: "Set hintmedium to hintstyle", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("hintmedium"), op: 10}, binding: 0, object: 16, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-hinting-none.conf", description: "Set hintnone to hintstyle", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("hintnone"), op: 10}, binding: 0, object: 16, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-hinting-slight.conf", description: "Set hintslight to hintstyle", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("hintslight"), op: 10}, binding: 0, object: 16, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-no-sub-pixel.conf", description: "Disable sub-pixel rendering", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("none"), op: 10}, binding: 0, object: 27, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-scale-bitmap-fonts.conf", description: "Bitmap scaling", domain: "", subst: [matchKindEnd][]directive{nil, {{
			tests: []ruleTest{{expr: &expression{u: Bool(0), op: 5}, kind: 1, qual: 0, object: 24, op: 22}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: exprName{object: 12, kind: 0}, op: 9}, &expression{u: exprName{object: 12, kind: 1}, op: 9}}, op: 34}, binding: 0, object: 74, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: Bool(0), op: 5}, kind: 1, qual: 0, object: 24, op: 22},
				{expr: &expression{u: Bool(0), op: 5}, kind: 1, qual: 0, object: 25, op: 22},
				{expr: &expression{u: Bool(1), op: 5}, kind: 1, qual: 0, object: 17, op: 22}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: exprTree{&expression{u: exprName{object: 74, kind: -1}, op: 9}, &expression{u: Float(1.2), op: 1}}, op: 27}, &expression{u: exprTree{&expression{u: exprName{object: 74, kind: -1}, op: 9}, &expression{u: Float(0.8), op: 1}}, op: 29}}, op: 21}, binding: 0, object: 75, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: Bool(1), op: 5}, kind: 1, qual: 0, object: 0, op: 22}},
			edits: []ruleEdit{{expr: &expression{u: Float(1), op: 1}, binding: 0, object: 74, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: Bool(0), op: 5}, kind: 1, qual: 0, object: 24, op: 22},
				{expr: &expression{u: Float(1), op: 1}, kind: 1, qual: 0, object: 0, op: 23}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: exprName{object: 32, kind: -1}, op: 9}, &expression{u: exprMatrix{xx: &expression{u: exprName{object: 74, kind: -1}, op: 9}, xy: &expression{u: Float(0), op: 1}, yx: &expression{u: Float(0), op: 1}, yy: &expression{u: exprName{object: 74, kind: -1}, op: 9}}, op: 3}}, op: 33}, binding: 0, object: 32, op: 11},
				{expr: &expression{u: exprTree{&expression{u: exprName{object: 10, kind: -1}, op: 9}, &expression{u: exprName{object: 74, kind: -1}, op: 9}}, op: 34}, binding: 0, object: 10, op: 11}},
		}}, nil}},
		{name: "confs/10-sub-pixel-bgr.conf", description: "Enable sub-pixel rendering with the BGR stripes layout", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("bgr"), op: 10}, binding: 0, object: 27, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-sub-pixel-rgb.conf", description: "Enable sub-pixel rendering with the RGB stripes layout", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("rgb"), op: 10}, binding: 0, object: 27, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-sub-pixel-vbgr.conf", description: "Enable sub-pixel rendering with the vertical BGR stripes layout", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("vbgr"), op: 10}, binding: 0, object: 27, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-sub-pixel-vrgb.conf", description: "Enable sub-pixel rendering with the vertical RGB stripes layout", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("vrgb"), op: 10}, binding: 0, object: 27, op: 15}},
		}}, nil, nil}},
		{name: "confs/10-unhinted.conf", description: "Disable hinting", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 15}},
		}}, nil, nil}},
		{name: "confs/11-lcdfilter-default.conf", description: "Use lcddefault as default for LCD filter", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("lcddefault"), op: 10}, binding: 0, object: 41, op: 15}},
		}}, nil, nil}},
		{name: "confs/11-lcdfilter-legacy.conf", description: "Use lcdlegacy as default for LCD filter", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("lcdlegacy"), op: 10}, binding: 0, object: 41, op: 15}},
		}}, nil, nil}},
		{name: "confs/11-lcdfilter-light.conf", description: "Use lcdlight as default for LCD filter", domain: "", subst: [matchKindEnd][]directive{{{
			tests: nil,
			edits: []ruleEdit{{expr: &expression{u: String("lcdlight"), op: 10}, binding: 0, object: 41, op: 15}},
		}}, nil, nil}},
		{name: "confs/20-unhint-small-vera.conf", description: "Disable hinting for Bitstream Vera fonts when the size is less than 8ppem", domain: "", subst: [matchKindEnd][]directive{nil, {{
			tests: []ruleTest{{expr: &expression{u: String("Bitstream Vera Sans"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558},
				{expr: &expression{u: Float(7.5), op: 1}, kind: 1, qual: 0, object: 12, op: 27}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Bitstream Vera Serif"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558},
				{expr: &expression{u: Float(7.5), op: 1}, kind: 1, qual: 0, object: 12, op: 27}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Bitstream Vera Sans Mono"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558},
				{expr: &expression{u: Float(7.5), op: 1}, kind: 1, qual: 0, object: 12, op: 27}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}}, nil}},
		{name: "confs/25-unhint-nonlatin.conf", description: "Disable hinting for CJK fonts", domain: "", subst: [matchKindEnd][]directive{nil, {{
			tests: []ruleTest{{expr: &expression{u: String("Kochi Mincho"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Kochi Gothic"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Sazanami Mincho"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Sazanami Gothic"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Baekmuk Batang"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Baekmuk Dotum"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Baekmuk Gulim"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Baekmuk Headline"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL Mingti2L Big5"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL ShanHeiSun Uni"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL KaitiM Big5"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL ZenKai Uni"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL SungtiL GB"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL KaitiM GB"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ZYSong18030"), op: 2}, kind: 1, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11}},
		}}, nil}},
		{name: "confs/30-metric-aliases.conf", description: "Set substitutions for similar/metric-compatible families", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Sans L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Helvetica"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Sans"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Helvetica"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Heros"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Helvetica"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Sans Narrow"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Helvetica Narrow"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Heros Cn"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Helvetica Narrow"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Roman No9 L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Roman"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Termes"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Mono L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Mono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Mono PS"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Cursor"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Avant Garde"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Avant Garde Gothic"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("URW Gothic L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Avant Garde Gothic"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("URW Gothic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Avant Garde Gothic"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Adventor"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Avant Garde Gothic"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Bookman"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Bookman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("URW Bookman L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Bookman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Bookman URW"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Bookman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("URW Bookman"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Bookman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Bonum"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Bookman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Bookman Old Style"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Bookman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Zapf Chancery"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Zapf Chancery"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("URW Chancery L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Zapf Chancery"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Chancery URW"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Zapf Chancery"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Z003"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Zapf Chancery"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Chorus"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("ITC Zapf Chancery"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("URW Palladio L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Palatino"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Palladio URW"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Palatino"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("P052"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Palatino"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Pagella"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Palatino"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Palatino Linotype"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Palatino"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Century Schoolbook L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("New Century Schoolbook"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Century SchoolBook URW"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("New Century Schoolbook"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("C059"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("New Century Schoolbook"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("TeX Gyre Schola"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("New Century Schoolbook"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Century Schoolbook"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("New Century Schoolbook"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arimo"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Arial"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Liberation Sans"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Arial"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Liberation Sans Narrow"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Arial Narrow"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Albany"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Arial"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Albany AMT"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Arial"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Tinos"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times New Roman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Liberation Serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times New Roman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Thorndale"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times New Roman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Thorndale AMT"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times New Roman"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cousine"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier New"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Liberation Mono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier New"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cumberland"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier New"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cumberland AMT"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier New"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Gelasio"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Georgia"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Caladea"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Cambria"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Carlito"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Calibri"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("SymbolNeu"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Symbol"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Helvetica"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Arial"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Helvetica Narrow"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Arial Narrow"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Times"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times New Roman"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Courier"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier New"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arial"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Helvetica"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arial Narrow"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Helvetica Narrow"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Times New Roman"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Times"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Courier New"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Helvetica"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("TeX Gyre Heros"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Helvetica Narrow"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("TeX Gyre Heros Cn"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Times"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("TeX Gyre Termes"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Courier"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("TeX Gyre Cursor"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Courier Std"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Courier"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ITC Avant Garde Gothic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("TeX Gyre Adventor"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ITC Bookman"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Bookman Old Style"), op: 2}, &expression{u: String("TeX Gyre Bonum"), op: 2}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ITC Zapf Chancery"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("TeX Gyre Chorus"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Palatino"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Palatino Linotype"), op: 2}, &expression{u: String("TeX Gyre Pagella"), op: 2}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("New Century Schoolbook"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Century Schoolbook"), op: 2}, &expression{u: String("TeX Gyre Schola"), op: 2}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arial"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Arimo"), op: 2}, &expression{u: exprTree{&expression{u: String("Liberation Sans"), op: 2}, &expression{u: exprTree{&expression{u: String("Albany"), op: 2}, &expression{u: String("Albany AMT"), op: 2}}, op: 36}}, op: 36}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arial Narrow"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Liberation Sans Narrow"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Times New Roman"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Tinos"), op: 2}, &expression{u: exprTree{&expression{u: String("Liberation Serif"), op: 2}, &expression{u: exprTree{&expression{u: String("Thorndale"), op: 2}, &expression{u: String("Thorndale AMT"), op: 2}}, op: 36}}, op: 36}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Courier New"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Cousine"), op: 2}, &expression{u: exprTree{&expression{u: String("Liberation Mono"), op: 2}, &expression{u: exprTree{&expression{u: String("Cumberland"), op: 2}, &expression{u: String("Cumberland AMT"), op: 2}}, op: 36}}, op: 36}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Georgia"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Gelasio"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cambria"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Caladea"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Calibri"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Carlito"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Symbol"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("SymbolNeu"), op: 2}, binding: 2, object: 1, op: 15}},
		}}, nil, nil}},
		{name: "confs/35-lang-normalize.conf", description: "", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("aa"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("aa"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ab"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ab"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("af"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("af"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ak"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ak"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("am"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("am"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("an"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("an"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ar"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ar"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("as"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("as"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ast"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ast"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("av"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("av"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ay"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ay"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ba"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ba"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("be"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("be"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bg"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bg"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bh"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bh"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bho"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bho"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bi"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bi"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bin"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bin"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bm"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bm"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("br"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("br"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("brx"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("brx"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bs"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bs"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("bua"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("bua"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("byn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("byn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ca"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ca"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ce"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ce"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ch"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ch"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("chm"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("chm"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("chr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("chr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("co"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("co"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("crh"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("crh"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("cs"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("cs"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("csb"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("csb"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("cu"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("cu"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("cv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("cv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("cy"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("cy"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("da"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("da"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("de"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("de"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("doi"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("doi"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("dv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("dv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("dz"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("dz"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ee"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ee"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("el"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("el"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("en"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("en"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("eo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("eo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("es"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("es"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("et"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("et"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("eu"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("eu"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fa"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fa"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fat"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fat"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ff"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ff"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fi"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fi"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fil"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fil"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fj"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fj"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fur"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fur"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fy"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("fy"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ga"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ga"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("gd"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("gd"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("gez"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("gez"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("gl"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("gl"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("gn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("gn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("gu"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("gu"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("gv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("gv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ha"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ha"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("haw"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("haw"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("he"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("he"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("hi"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("hi"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("hne"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("hne"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ho"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ho"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("hr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("hr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("hsb"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("hsb"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ht"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ht"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("hu"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("hu"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("hy"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("hy"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("hz"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("hz"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ia"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ia"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("id"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("id"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ie"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ie"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ig"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ig"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ii"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ii"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ik"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ik"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("io"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("io"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("is"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("is"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("it"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("it"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("iu"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("iu"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ja"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ja"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("jv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("jv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ka"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ka"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kaa"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kaa"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kab"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kab"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ki"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ki"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kj"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kj"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kk"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kk"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kl"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kl"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("km"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("km"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ko"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ko"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kok"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kok"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ks"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ks"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kum"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kum"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kw"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kw"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("kwm"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("kwm"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ky"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ky"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("la"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("la"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("lah"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("lah"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("lb"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("lb"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("lez"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("lez"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("lg"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("lg"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("li"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("li"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ln"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ln"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("lo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("lo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("lt"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("lt"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("lv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("lv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mai"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mai"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mg"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mg"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mh"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mh"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mi"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mi"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mk"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mk"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ml"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ml"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mni"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mni"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ms"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ms"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("mt"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("mt"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("my"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("my"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("na"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("na"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("nb"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("nb"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("nds"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("nds"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ne"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ne"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ng"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ng"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("nl"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("nl"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("nn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("nn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("no"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("no"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("nqo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("nqo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("nr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("nr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("nso"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("nso"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("nv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("nv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ny"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ny"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("oc"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("oc"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("om"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("om"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("or"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("or"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("os"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("os"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ota"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ota"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("pa"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("pa"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("pl"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("pl"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("pt"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("pt"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("qu"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("qu"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("quz"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("quz"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("rm"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("rm"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("rn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("rn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ro"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ro"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ru"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ru"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("rw"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("rw"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sa"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sa"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sah"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sah"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sat"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sat"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sc"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sc"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sco"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sco"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sd"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sd"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("se"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("se"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sel"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sel"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sg"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sg"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sh"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sh"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("shs"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("shs"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("si"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("si"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sid"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sid"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sk"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sk"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sl"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sl"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sm"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sm"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sma"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sma"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("smj"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("smj"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("smn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("smn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sms"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sms"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("so"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("so"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sq"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sq"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ss"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ss"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("st"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("st"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("su"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("su"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sw"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("sw"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("syr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("syr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ta"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ta"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("te"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("te"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tg"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tg"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("th"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("th"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tig"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tig"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tk"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tk"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tl"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tl"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tn"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tn"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("to"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("to"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tr"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tr"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ts"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ts"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tt"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tt"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tw"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tw"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ty"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ty"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("tyv"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("tyv"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ug"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ug"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("uk"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("uk"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ur"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ur"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("uz"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("uz"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ve"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("ve"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("vi"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("vi"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("vo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("vo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("vot"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("vot"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("wa"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("wa"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("wal"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("wal"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("wen"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("wen"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("wo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("wo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("xh"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("xh"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("yap"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("yap"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("yi"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("yi"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("yo"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("yo"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("za"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("za"), op: 2}, binding: 2, object: 34, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("zu"), op: 2}, kind: 0, qual: 0, object: 34, op: 24}},
			edits: []ruleEdit{{expr: &expression{u: String("zu"), op: 2}, binding: 2, object: 34, op: 11}},
		}}, nil, nil}},
		{name: "confs/40-nonlatin.conf", description: "Set substitutions for non-Latin fonts", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("Nazli"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Lotoos"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Mitra"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Ferdosi"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Badr"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Zar"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Titr"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Jadid"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Kochi Mincho"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL SungtiL GB"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL Mingti2L Big5"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("MS 明朝"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("NanumMyeongjo"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("UnBatang"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Baekmuk Batang"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("MgOpen Canonica"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Sazanami Mincho"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL ZenKai Uni"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ZYSong18030"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("FreeSerif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("SimSun"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arshia"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Elham"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Farnaz"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nasim"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Sina"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Roya"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Koodak"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Terafik"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Kochi Gothic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL KaitiM GB"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL KaitiM Big5"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("MS ゴシック"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("NanumGothic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("UnDotum"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Baekmuk Dotum"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("MgOpen Modata"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Sazanami Gothic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("AR PL ShanHeiSun Uni"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ZYSong18030"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("FreeSans"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("NSimSun"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ZYSong18030"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("NanumGothicCoding"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("FreeMono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Homa"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("fantasy"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Kamran"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("fantasy"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Fantezi"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("fantasy"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Tabassom"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("fantasy"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("IranNastaliq"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("cursive"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nafees Nastaleeq"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("cursive"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Arabic UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Bengali UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Devanagari UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Gujarati UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Gurmukhi UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Kannada UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Khmer UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Lao UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Malayalam UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Myanmar UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Oriya UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Sinhala UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Tamil UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Telugu UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans Thai UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Leelawadee UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nirmala UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Yu Gothic UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Meiryo UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("MS UI Gothic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Khmer UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Lao UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Microsoft JhengHei UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Microsoft YaHei UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}}, nil, nil}},
		{name: "confs/45-generic.conf", description: "Set substitutions for emoji/math fonts", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("Noto Color Emoji"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Apple Color Emoji"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Segoe UI Emoji"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Twitter Color Emoji"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("EmojiOne Mozilla"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Emoji Two"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("JoyPixels"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Emoji One"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Emoji"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Android Emoji"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("emoji"), op: 2}, kind: 0, qual: 0, object: 1, op: 22}},
			edits: []ruleEdit{{expr: &expression{u: String("und-zsye"), op: 2}, binding: 0, object: 34, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("und-zsye"), op: 2}, kind: 0, qual: 0, object: 34, op: 22},
				{expr: &expression{u: String("emoji"), op: 2}, kind: 0, qual: 1, object: 1, op: 23}},
			edits: []ruleEdit{{expr: &expression{u: String("emoji"), op: 2}, binding: 1, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("XITS Math"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("math"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("STIX Two Math"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("math"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cambria Math"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("math"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Latin Modern Math"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("math"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Minion Math"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("math"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Lucida Math"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("math"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Asana Math"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("math"), op: 2}, binding: 2, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("math"), op: 2}, kind: 0, qual: 0, object: 1, op: 22}},
			edits: []ruleEdit{{expr: &expression{u: String("und-zmth"), op: 2}, binding: 0, object: 34, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("und-zmth"), op: 2}, kind: 0, qual: 0, object: 34, op: 22},
				{expr: &expression{u: String("math"), op: 2}, kind: 0, qual: 1, object: 1, op: 23}},
			edits: []ruleEdit{{expr: &expression{u: String("math"), op: 2}, binding: 1, object: 1, op: 15}},
		}}, nil, nil}},
		{name: "confs/45-latin.conf", description: "Set substitutions for Latin fonts", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("Bitstream Vera Serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cambria"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Constantia"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("DejaVu Serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Elephant"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Garamond"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Georgia"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Liberation Serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Luxi Serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("MS Serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Roman No9 L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Roman"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Palatino Linotype"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Thorndale AMT"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Thorndale"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Times New Roman"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Times"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Albany AMT"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Albany"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arial Unicode MS"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arial"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Bitstream Vera Sans"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Britannic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Calibri"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Candara"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Century Gothic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Corbel"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("DejaVu Sans"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Helvetica"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Haettenschweiler"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Liberation Sans"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("MS Sans Serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Sans L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Sans"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Luxi Sans"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Tahoma"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Trebuchet MS"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Twentieth Century"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Verdana"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Andale Mono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Bitstream Vera Sans Mono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Consolas"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Courier New"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Courier"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Courier Std"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cumberland AMT"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cumberland"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("DejaVu Sans Mono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Fixedsys"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Inconsolata"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Liberation Mono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Luxi Mono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Mono L"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Mono"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nimbus Mono PS"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Terminal"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("monospace"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Bauhaus Std"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("fantasy"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cooper Std"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("fantasy"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Copperplate Gothic Std"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("fantasy"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Impact"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("fantasy"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Comic Sans MS"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("cursive"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("ITC Zapf Chancery Std"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("cursive"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Zapfino"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("cursive"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Cantarell"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Noto Sans UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Segoe UI"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Segoe UI Historic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Segoe UI Symbol"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("system-ui"), op: 2}, binding: 0, object: 1, op: 16}},
		}}, nil, nil}},
		{name: "confs/49-sansserif.conf", description: "Add sans-serif to the family when no generic name", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("sans-serif"), op: 2}, kind: 0, qual: 1, object: 1, op: 23},
				{expr: &expression{u: String("serif"), op: 2}, kind: 0, qual: 1, object: 1, op: 23},
				{expr: &expression{u: String("monospace"), op: 2}, kind: 0, qual: 1, object: 1, op: 23}},
			edits: []ruleEdit{{expr: &expression{u: String("sans-serif"), op: 2}, binding: 0, object: 1, op: 16}},
		}}, nil, nil}},
		{name: "confs/60-generic.conf", description: "Set preferable fonts for emoji/math fonts", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("und-zsye"), op: 2}, kind: 0, qual: 0, object: 34, op: 22},
				{expr: &expression{u: Bool(1), op: 5}, kind: 0, qual: 1, object: 47, op: 23},
				{expr: &expression{u: Bool(0), op: 5}, kind: 0, qual: 1, object: 47, op: 23}},
			edits: []ruleEdit{{expr: &expression{u: Bool(1), op: 5}, binding: 0, object: 47, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("emoji"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Noto Color Emoji"), op: 2}, &expression{u: exprTree{&expression{u: String("Apple Color Emoji"), op: 2}, &expression{u: exprTree{&expression{u: String("Segoe UI Emoji"), op: 2}, &expression{u: exprTree{&expression{u: String("Twitter Color Emoji"), op: 2}, &expression{u: exprTree{&expression{u: String("EmojiOne Mozilla"), op: 2}, &expression{u: exprTree{&expression{u: String("Emoji Two"), op: 2}, &expression{u: exprTree{&expression{u: String("JoyPixels"), op: 2}, &expression{u: exprTree{&expression{u: String("Emoji One"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Emoji"), op: 2}, &expression{u: String("Android Emoji"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 2, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("math"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("XITS Math"), op: 2}, &expression{u: exprTree{&expression{u: String("STIX Two Math"), op: 2}, &expression{u: exprTree{&expression{u: String("Cambria Math"), op: 2}, &expression{u: exprTree{&expression{u: String("Latin Modern Math"), op: 2}, &expression{u: exprTree{&expression{u: String("Minion Math"), op: 2}, &expression{u: exprTree{&expression{u: String("Lucida Math"), op: 2}, &expression{u: String("Asana Math"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 2, object: 1, op: 14}},
		}}, nil, nil}},
		{name: "confs/60-latin.conf", description: "Set preferable fonts for Latin", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("DejaVu Serif"), op: 2}, &expression{u: exprTree{&expression{u: String("Times New Roman"), op: 2}, &expression{u: exprTree{&expression{u: String("Thorndale AMT"), op: 2}, &expression{u: exprTree{&expression{u: String("Luxi Serif"), op: 2}, &expression{u: exprTree{&expression{u: String("Nimbus Roman No9 L"), op: 2}, &expression{u: exprTree{&expression{u: String("Nimbus Roman"), op: 2}, &expression{u: String("Times"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sans-serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("DejaVu Sans"), op: 2}, &expression{u: exprTree{&expression{u: String("Verdana"), op: 2}, &expression{u: exprTree{&expression{u: String("Arial"), op: 2}, &expression{u: exprTree{&expression{u: String("Albany AMT"), op: 2}, &expression{u: exprTree{&expression{u: String("Luxi Sans"), op: 2}, &expression{u: exprTree{&expression{u: String("Nimbus Sans L"), op: 2}, &expression{u: exprTree{&expression{u: String("Nimbus Sans"), op: 2}, &expression{u: exprTree{&expression{u: String("Helvetica"), op: 2}, &expression{u: exprTree{&expression{u: String("Lucida Sans Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("BPG Glaho International"), op: 2}, &expression{u: String("Tahoma"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("monospace"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("DejaVu Sans Mono"), op: 2}, &expression{u: exprTree{&expression{u: String("Inconsolata"), op: 2}, &expression{u: exprTree{&expression{u: String("Andale Mono"), op: 2}, &expression{u: exprTree{&expression{u: String("Courier New"), op: 2}, &expression{u: exprTree{&expression{u: String("Cumberland AMT"), op: 2}, &expression{u: exprTree{&expression{u: String("Luxi Mono"), op: 2}, &expression{u: exprTree{&expression{u: String("Nimbus Mono L"), op: 2}, &expression{u: exprTree{&expression{u: String("Nimbus Mono"), op: 2}, &expression{u: exprTree{&expression{u: String("Nimbus Mono PS"), op: 2}, &expression{u: String("Courier"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fantasy"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Impact"), op: 2}, &expression{u: exprTree{&expression{u: String("Copperplate Gothic Std"), op: 2}, &expression{u: exprTree{&expression{u: String("Cooper Std"), op: 2}, &expression{u: String("Bauhaus Std"), op: 2}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("cursive"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("ITC Zapf Chancery Std"), op: 2}, &expression{u: exprTree{&expression{u: String("Zapfino"), op: 2}, &expression{u: String("Comic Sans MS"), op: 2}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("system-ui"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Cantarell"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Segoe UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Segoe UI Historic"), op: 2}, &expression{u: String("Segoe UI Symbol"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}}, nil, nil}},
		{name: "confs/65-fonts-persian.conf", description: "", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("Nesf"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Nesf2"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nesf2"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Persian_sansserif_default"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nazanin"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Nazli"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Lotus"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Lotoos"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Yaqut"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Yaghoot"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Yaghut"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Yaghoot"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Traffic"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Terafik"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Ferdowsi"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Ferdosi"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Fantezy"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Fantezi"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Jadid"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Persian_title"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Titr"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Persian_title"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Kamran"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Persian_fantasy"), op: 2}, &expression{u: String("Homa"), op: 2}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Homa"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Persian_fantasy"), op: 2}, &expression{u: String("Kamran"), op: 2}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Fantezi"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Persian_fantasy"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Tabassom"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Persian_fantasy"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Arshia"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Persian_square"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nasim"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Persian_square"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Elham"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Persian_square"), op: 2}, &expression{u: String("Farnaz"), op: 2}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Farnaz"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Persian_square"), op: 2}, &expression{u: String("Elham"), op: 2}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Sina"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Persian_square"), op: 2}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Persian_title"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Titr"), op: 2}, &expression{u: exprTree{&expression{u: String("Jadid"), op: 2}, &expression{u: String("Persian_serif"), op: 2}}, op: 36}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Persian_fantasy"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Homa"), op: 2}, &expression{u: exprTree{&expression{u: String("Kamran"), op: 2}, &expression{u: exprTree{&expression{u: String("Fantezi"), op: 2}, &expression{u: exprTree{&expression{u: String("Tabassom"), op: 2}, &expression{u: String("Persian_square"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Persian_square"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Arshia"), op: 2}, &expression{u: exprTree{&expression{u: String("Elham"), op: 2}, &expression{u: exprTree{&expression{u: String("Farnaz"), op: 2}, &expression{u: exprTree{&expression{u: String("Nasim"), op: 2}, &expression{u: exprTree{&expression{u: String("Sina"), op: 2}, &expression{u: String("Persian_serif"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 2, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Nazli"), op: 2}, &expression{u: exprTree{&expression{u: String("Lotoos"), op: 2}, &expression{u: exprTree{&expression{u: String("Mitra"), op: 2}, &expression{u: exprTree{&expression{u: String("Ferdosi"), op: 2}, &expression{u: exprTree{&expression{u: String("Badr"), op: 2}, &expression{u: String("Zar"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sans-serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Roya"), op: 2}, &expression{u: exprTree{&expression{u: String("Koodak"), op: 2}, &expression{u: String("Terafik"), op: 2}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("monospace"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Terafik"), op: 2}, binding: 0, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("fantasy"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Homa"), op: 2}, &expression{u: exprTree{&expression{u: String("Kamran"), op: 2}, &expression{u: exprTree{&expression{u: String("Fantezi"), op: 2}, &expression{u: String("Tabassom"), op: 2}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("cursive"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("IranNastaliq"), op: 2}, &expression{u: String("Nafees Nastaleeq"), op: 2}}, op: 36}, binding: 0, object: 1, op: 15}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 22},
				{expr: &expression{u: Int(200), op: 0}, kind: 0, qual: 0, object: 8, op: 30},
				{expr: &expression{u: Float(24), op: 1}, kind: 0, qual: 0, object: 10, op: 30}},
			edits: []ruleEdit{{expr: &expression{u: String("Titr"), op: 2}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sans-serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 22},
				{expr: &expression{u: Int(200), op: 0}, kind: 0, qual: 0, object: 8, op: 30},
				{expr: &expression{u: Float(24), op: 1}, kind: 0, qual: 0, object: 10, op: 30}},
			edits: []ruleEdit{{expr: &expression{u: String("Titr"), op: 2}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Persian_sansserif_default"), op: 2}, kind: 0, qual: 0, object: 1, op: 22},
				{expr: &expression{u: Int(200), op: 0}, kind: 0, qual: 0, object: 8, op: 30},
				{expr: &expression{u: Float(24), op: 1}, kind: 0, qual: 0, object: 10, op: 30}},
			edits: []ruleEdit{{expr: &expression{u: String("Titr"), op: 2}, binding: 2, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Persian_sansserif_default"), op: 2}, kind: 0, qual: 0, object: 1, op: 22}},
			edits: []ruleEdit{{expr: &expression{u: String("Roya"), op: 2}, binding: 2, object: 1, op: 11}},
		}}, {{
			tests: []ruleTest{{expr: &expression{u: String("TURNED-OFF"), op: 2}, kind: 1, qual: 0, object: 14, op: 22},
				{expr: &expression{u: String("farsiweb"), op: 2}, kind: 1, qual: 0, object: 14, op: 22},
				{expr: &expression{u: String("roman"), op: 10}, kind: 1, qual: 0, object: 7, op: 22},
				{expr: &expression{u: String("roman"), op: 10}, kind: 0, qual: 0, object: 7, op: 23}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: exprName{object: 32, kind: -1}, op: 9}, &expression{u: exprMatrix{xx: &expression{u: Float(1), op: 1}, xy: &expression{u: Float(-0.2), op: 1}, yx: &expression{u: Float(0), op: 1}, yy: &expression{u: Float(1), op: 1}}, op: 3}}, op: 33}, binding: 0, object: 32, op: 11},
				{expr: &expression{u: String("oblique"), op: 10}, binding: 0, object: 7, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("farsiweb"), op: 2}, kind: 1, qual: 0, object: 14, op: 22}},
			edits: []ruleEdit{{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 19, op: 11},
				{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 17, op: 11},
				{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 39, op: 11}},
		}}, {{
			tests: []ruleTest{{expr: &expression{u: String("Elham"), op: 2}, kind: 2, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("farsiweb"), op: 2}, binding: 0, object: 14, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Homa"), op: 2}, kind: 2, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("farsiweb"), op: 2}, binding: 0, object: 14, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Koodak"), op: 2}, kind: 2, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("farsiweb"), op: 2}, binding: 0, object: 14, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Nazli"), op: 2}, kind: 2, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("farsiweb"), op: 2}, binding: 0, object: 14, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Roya"), op: 2}, kind: 2, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("farsiweb"), op: 2}, binding: 0, object: 14, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Terafik"), op: 2}, kind: 2, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("farsiweb"), op: 2}, binding: 0, object: 14, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("Titr"), op: 2}, kind: 2, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("farsiweb"), op: 2}, binding: 0, object: 14, op: 11}},
		}}}},
		{name: "confs/65-khmer.conf", description: "", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Khmer OS\""), op: 2}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sans-serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("Khmer OS\""), op: 2}, binding: 0, object: 1, op: 14}},
		}}, nil, nil}},
		{name: "confs/65-nonlatin.conf", description: "Set preferable fonts for non-Latin", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Artsounk"), op: 2}, &expression{u: exprTree{&expression{u: String("BPG UTF8 M"), op: 2}, &expression{u: exprTree{&expression{u: String("Kinnari"), op: 2}, &expression{u: exprTree{&expression{u: String("Norasi"), op: 2}, &expression{u: exprTree{&expression{u: String("Frank Ruehl"), op: 2}, &expression{u: exprTree{&expression{u: String("Dror"), op: 2}, &expression{u: exprTree{&expression{u: String("JG LaoTimes"), op: 2}, &expression{u: exprTree{&expression{u: String("Saysettha Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("Pigiarniq"), op: 2}, &expression{u: exprTree{&expression{u: String("B Davat"), op: 2}, &expression{u: exprTree{&expression{u: String("B Compset"), op: 2}, &expression{u: exprTree{&expression{u: String("Kacst-Qr"), op: 2}, &expression{u: exprTree{&expression{u: String("Urdu Nastaliq Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("Raghindi"), op: 2}, &expression{u: exprTree{&expression{u: String("Mukti Narrow"), op: 2}, &expression{u: exprTree{&expression{u: String("malayalam"), op: 2}, &expression{u: exprTree{&expression{u: String("Sampige"), op: 2}, &expression{u: exprTree{&expression{u: String("padmaa"), op: 2}, &expression{u: exprTree{&expression{u: String("Hapax Berbère"), op: 2}, &expression{u: exprTree{&expression{u: String("MS Mincho"), op: 2}, &expression{u: exprTree{&expression{u: String("SimSun"), op: 2}, &expression{u: exprTree{&expression{u: String("PMingLiu"), op: 2}, &expression{u: exprTree{&expression{u: String("WenQuanYi Zen Hei"), op: 2}, &expression{u: exprTree{&expression{u: String("WenQuanYi Bitmap Song"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL ShanHeiSun Uni"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL New Sung"), op: 2}, &expression{u: exprTree{&expression{u: String("ZYSong18030"), op: 2}, &expression{u: exprTree{&expression{u: String("HanyiSong"), op: 2}, &expression{u: exprTree{&expression{u: String("MgOpen Canonica"), op: 2}, &expression{u: exprTree{&expression{u: String("Sazanami Mincho"), op: 2}, &expression{u: exprTree{&expression{u: String("IPAMonaMincho"), op: 2}, &expression{u: exprTree{&expression{u: String("IPAMincho"), op: 2}, &expression{u: exprTree{&expression{u: String("Kochi Mincho"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL SungtiL GB"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL Mingti2L Big5"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL Zenkai Uni"), op: 2}, &expression{u: exprTree{&expression{u: String("MS 明朝"), op: 2}, &expression{u: exprTree{&expression{u: String("ZYSong18030"), op: 2}, &expression{u: exprTree{&expression{u: String("NanumMyeongjo"), op: 2}, &expression{u: exprTree{&expression{u: String("UnBatang"), op: 2}, &expression{u: exprTree{&expression{u: String("Baekmuk Batang"), op: 2}, &expression{u: exprTree{&expression{u: String("KacstQura"), op: 2}, &expression{u: exprTree{&expression{u: String("Frank Ruehl CLM"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Bengali"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Gujarati"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Hindi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Marathi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Maithili"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Kashmiri"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Konkani"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Nepali"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Sindhi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Punjabi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Tamil"), op: 2}, &expression{u: exprTree{&expression{u: String("Rachana"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Malayalam"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Kannada"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Telugu"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Oriya"), op: 2}, &expression{u: String("LKLUG"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sans-serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Nachlieli"), op: 2}, &expression{u: exprTree{&expression{u: String("Lucida Sans Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("Yudit Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("Kerkis"), op: 2}, &expression{u: exprTree{&expression{u: String("ArmNet Helvetica"), op: 2}, &expression{u: exprTree{&expression{u: String("Artsounk"), op: 2}, &expression{u: exprTree{&expression{u: String("BPG UTF8 M"), op: 2}, &expression{u: exprTree{&expression{u: String("Waree"), op: 2}, &expression{u: exprTree{&expression{u: String("Loma"), op: 2}, &expression{u: exprTree{&expression{u: String("Garuda"), op: 2}, &expression{u: exprTree{&expression{u: String("Umpush"), op: 2}, &expression{u: exprTree{&expression{u: String("Saysettha Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("JG Lao Old Arial"), op: 2}, &expression{u: exprTree{&expression{u: String("GF Zemen Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("Pigiarniq"), op: 2}, &expression{u: exprTree{&expression{u: String("B Davat"), op: 2}, &expression{u: exprTree{&expression{u: String("B Compset"), op: 2}, &expression{u: exprTree{&expression{u: String("Kacst-Qr"), op: 2}, &expression{u: exprTree{&expression{u: String("Urdu Nastaliq Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("Raghindi"), op: 2}, &expression{u: exprTree{&expression{u: String("Mukti Narrow"), op: 2}, &expression{u: exprTree{&expression{u: String("malayalam"), op: 2}, &expression{u: exprTree{&expression{u: String("Sampige"), op: 2}, &expression{u: exprTree{&expression{u: String("padmaa"), op: 2}, &expression{u: exprTree{&expression{u: String("Hapax Berbère"), op: 2}, &expression{u: exprTree{&expression{u: String("MS Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("UmePlus P Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("Microsoft YaHei"), op: 2}, &expression{u: exprTree{&expression{u: String("Microsoft JhengHei"), op: 2}, &expression{u: exprTree{&expression{u: String("WenQuanYi Zen Hei"), op: 2}, &expression{u: exprTree{&expression{u: String("WenQuanYi Bitmap Song"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL ShanHeiSun Uni"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL New Sung"), op: 2}, &expression{u: exprTree{&expression{u: String("MgOpen Modata"), op: 2}, &expression{u: exprTree{&expression{u: String("VL Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("IPAMonaGothic"), op: 2}, &expression{u: exprTree{&expression{u: String("IPAGothic"), op: 2}, &expression{u: exprTree{&expression{u: String("Sazanami Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("Kochi Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL KaitiM GB"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL KaitiM Big5"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL ShanHeiSun Uni"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL SungtiL GB"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL Mingti2L Big5"), op: 2}, &expression{u: exprTree{&expression{u: String("MS ゴシック"), op: 2}, &expression{u: exprTree{&expression{u: String("ZYSong18030"), op: 2}, &expression{u: exprTree{&expression{u: String("TSCu_Paranar"), op: 2}, &expression{u: exprTree{&expression{u: String("NanumGothic"), op: 2}, &expression{u: exprTree{&expression{u: String("UnDotum"), op: 2}, &expression{u: exprTree{&expression{u: String("Baekmuk Dotum"), op: 2}, &expression{u: exprTree{&expression{u: String("Baekmuk Gulim"), op: 2}, &expression{u: exprTree{&expression{u: String("KacstQura"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Bengali"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Gujarati"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Hindi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Marathi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Maithili"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Kashmiri"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Konkani"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Nepali"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Sindhi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Punjabi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Tamil"), op: 2}, &expression{u: exprTree{&expression{u: String("Meera"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Malayalam"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Kannada"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Telugu"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Oriya"), op: 2}, &expression{u: String("LKLUG"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("monospace"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Miriam Mono"), op: 2}, &expression{u: exprTree{&expression{u: String("VL Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("IPAMonaGothic"), op: 2}, &expression{u: exprTree{&expression{u: String("IPAGothic"), op: 2}, &expression{u: exprTree{&expression{u: String("Sazanami Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("Kochi Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL KaitiM GB"), op: 2}, &expression{u: exprTree{&expression{u: String("MS Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("UmePlus Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("NSimSun"), op: 2}, &expression{u: exprTree{&expression{u: String("MingLiu"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL ShanHeiSun Uni"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL New Sung Mono"), op: 2}, &expression{u: exprTree{&expression{u: String("HanyiSong"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL SungtiL GB"), op: 2}, &expression{u: exprTree{&expression{u: String("AR PL Mingti2L Big5"), op: 2}, &expression{u: exprTree{&expression{u: String("ZYSong18030"), op: 2}, &expression{u: exprTree{&expression{u: String("NanumGothicCoding"), op: 2}, &expression{u: exprTree{&expression{u: String("NanumGothic"), op: 2}, &expression{u: exprTree{&expression{u: String("UnDotum"), op: 2}, &expression{u: exprTree{&expression{u: String("Baekmuk Dotum"), op: 2}, &expression{u: exprTree{&expression{u: String("Baekmuk Gulim"), op: 2}, &expression{u: exprTree{&expression{u: String("TlwgTypo"), op: 2}, &expression{u: exprTree{&expression{u: String("TlwgTypist"), op: 2}, &expression{u: exprTree{&expression{u: String("TlwgTypewriter"), op: 2}, &expression{u: exprTree{&expression{u: String("TlwgMono"), op: 2}, &expression{u: exprTree{&expression{u: String("Hasida"), op: 2}, &expression{u: exprTree{&expression{u: String("GF Zemen Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("Hapax Berbère"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Bengali"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Gujarati"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Hindi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Marathi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Maithili"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Kashmiri"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Konkani"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Nepali"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Sindhi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Punjabi"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Tamil"), op: 2}, &expression{u: exprTree{&expression{u: String("Meera"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Malayalam"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Kannada"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Telugu"), op: 2}, &expression{u: exprTree{&expression{u: String("Lohit Oriya"), op: 2}, &expression{u: String("LKLUG"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("system-ui"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("Noto Sans Arabic UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Bengali UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Devanagari UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Gujarati UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Gurmukhi UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Kannada UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Khmer UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Lao UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Malayalam UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Myanmar UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Oriya UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Sinhala UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Tamil UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Telugu UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Noto Sans Thai UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Leelawadee UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Nirmala UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Yu Gothic UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Meiryo UI"), op: 2}, &expression{u: exprTree{&expression{u: String("MS UI Gothic"), op: 2}, &expression{u: exprTree{&expression{u: String("Khmer UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Lao UI"), op: 2}, &expression{u: exprTree{&expression{u: String("Microsoft YaHei UI"), op: 2}, &expression{u: String("Microsoft JhengHei UI"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}}, nil, nil}},
		{name: "confs/69-unifont.conf", description: "", domain: "", subst: [matchKindEnd][]directive{{{
			tests: []ruleTest{{expr: &expression{u: String("serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("FreeSerif"), op: 2}, &expression{u: exprTree{&expression{u: String("Code2000"), op: 2}, &expression{u: String("Code2001"), op: 2}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("sans-serif"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: String("FreeSans"), op: 2}, &expression{u: exprTree{&expression{u: String("Arial Unicode MS"), op: 2}, &expression{u: exprTree{&expression{u: String("Arial Unicode"), op: 2}, &expression{u: exprTree{&expression{u: String("Code2000"), op: 2}, &expression{u: String("Code2001"), op: 2}}, op: 36}}, op: 36}}, op: 36}}, op: 36}, binding: 0, object: 1, op: 14}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("monospace"), op: 2}, kind: 0, qual: 0, object: 1, op: 65558}},
			edits: []ruleEdit{{expr: &expression{u: String("FreeMono"), op: 2}, binding: 0, object: 1, op: 14}},
		}}, nil, nil}},
		{name: "confs/70-no-bitmaps.conf", description: "Reject bitmap fonts", domain: "", subst: [matchKindEnd][]directive{nil, nil, nil}},
		{name: "confs/70-yes-bitmaps.conf", description: "Accept bitmap fonts", domain: "", subst: [matchKindEnd][]directive{nil, nil, nil}},
		{name: "confs/80-delicious.conf", description: "", domain: "", subst: [matchKindEnd][]directive{nil, nil, {{
			tests: []ruleTest{{expr: &expression{u: String("Delicious"), op: 2}, kind: 2, qual: 0, object: 1, op: 65558},
				{expr: &expression{u: String("Heavy"), op: 2}, kind: 2, qual: 0, object: 3, op: 22}},
			edits: []ruleEdit{{expr: &expression{u: String("heavy"), op: 10}, binding: 0, object: 8, op: 11}},
		}}}},
		{name: "confs/90-synthetic.conf", description: "", domain: "", subst: [matchKindEnd][]directive{nil, {{
			tests: []ruleTest{{expr: &expression{u: String("roman"), op: 10}, kind: 1, qual: 0, object: 7, op: 22},
				{expr: &expression{u: String("roman"), op: 10}, kind: 0, qual: 0, object: 7, op: 23}},
			edits: []ruleEdit{{expr: &expression{u: exprTree{&expression{u: exprName{object: 32, kind: -1}, op: 9}, &expression{u: exprMatrix{xx: &expression{u: Float(1), op: 1}, xy: &expression{u: Float(0.2), op: 1}, yx: &expression{u: Float(0), op: 1}, yy: &expression{u: Float(1), op: 1}}, op: 3}}, op: 33}, binding: 0, object: 32, op: 11},
				{expr: &expression{u: String("oblique"), op: 10}, binding: 0, object: 7, op: 11},
				{expr: &expression{u: Bool(0), op: 5}, binding: 0, object: 39, op: 11}},
		}, {
			tests: []ruleTest{{expr: &expression{u: String("medium"), op: 10}, kind: 1, qual: 0, object: 8, op: 28},
				{expr: &expression{u: String("bold"), op: 10}, kind: 0, qual: 0, object: 8, op: 30}},
			edits: []ruleEdit{{expr: &expression{u: Bool(1), op: 5}, binding: 0, object: 38, op: 11},
				{expr: &expression{u: String("bold"), op: 10}, binding: 0, object: 8, op: 11}},
		}}, nil}}},
	customObjects:  map[string]Object{"pixelsizefixupfactor": 0x4a, "scalingnotneeded": 0x4b},
	acceptGlobs:    map[string]bool{},
	rejectGlobs:    map[string]bool{},
	acceptPatterns: Fontset{Pattern{25: &valueList{valueElt{Value: Bool(0), Binding: 1}}}},
	rejectPatterns: Fontset{Pattern{25: &valueList{valueElt{Value: Bool(0), Binding: 1}}}},
	maxObjects:     22,
}

Standard exposes the parsed configuration described in the 'confs' folder.

Functions

func DefaultFontDirs

func DefaultFontDirs() ([]string, error)

DefaultFontDirs return the OS-dependent usual directories for fonts, or an error if no one exists.

func WeightFromOT

func WeightFromOT(otWeight float32) float32

WeightFromOT returns a float value to use with `WEIGHT`, from a float in the 1..1000 range, resembling the numbers from OpenType specification's OS/2 usWeight numbers, which are also similar to CSS font-weight numbers. If input is negative, zero, or greater than 1000, returns -1. This function linearly interpolates between various WEIGHT constants. As such, the returned value does not necessarily match any of the predefined constants.

func WeightToOT

func WeightToOT(fcWeight float32) float32

WeightToOT is the inverse of `WeightFromOT`. If the input is less than `WEIGHT_THIN` or greater than `WEIGHT_EXTRABLACK`, it returns -1. Otherwise returns a number in the range 1 to 1000.

Types

type Bool

type Bool uint8

Bool is a tri-state boolean (see the associated constants)

const (
	False    Bool = iota // common `false`
	True                 // common `true`
	DontCare             // unspecified
)

func (Bool) String

func (b Bool) String() string

type Charset

type Charset struct {
	// contains filtered or unexported fields
}

Charset is a compact rune set.

Its internal representation is composed of a variable number of 'pages', where each page is a boolean set of size 256, encoding the last byte of a rune. Each rune is then mapped to a page number, defined by it second and third bytes.

func (*Charset) AddChar

func (fcs *Charset) AddChar(r rune)

AddChar add `r` to the set.

func (Charset) Copy

func (fcs Charset) Copy() Charset

Copy returns a deep copy of the charset.

func (Charset) DelChar

func (fcs Charset) DelChar(r rune)

DelChar remove the rune from the set.

func (*Charset) HasChar

func (fcs *Charset) HasChar(r rune) bool

HasChar returns `true` if `r` is in the set.

func (Charset) Len added in v0.0.2

func (a Charset) Len() int

Len returns the number of runes in the set.

func (Charset) String

func (s Charset) String() string

String returns a represensation of the internal storage of the charset.

type Config

type Config struct {
	// contains filtered or unexported fields
}

Config holds a complete configuration of the library.

This object is used to transform the patterns used in queries and returned as results. It also provides a way to exclude particular files/directories/patterns when scanning the available fonts.

A configuration is constructed from XML data files, with the `LoadFromMemory` and `LoadFromDir` methods. The 'standard' default configuration is provided in the 'confs/' directory and as the global variable `Standard`.

See also `ScanAndCache` for an all-in-one wrapper.

Example
c := NewConfig()
if err := c.LoadFromDir("confs"); err != nil {
	log.Fatal(err)
}
fontDirs, err := DefaultFontDirs()
if err != nil {
	log.Fatal(err)
}
_, err = c.ScanFontDirectories(fontDirs...)
if err != nil {
	log.Fatal(err)
}
fmt.Println("success")
Output:

success

func NewConfig

func NewConfig() *Config

NewConfig returns a new empty, initialized configuration

func (*Config) Copy added in v0.0.2

func (c *Config) Copy() *Config

Copy returns a deep copy of the configuration.

func (*Config) LoadFromDir

func (config *Config) LoadFromDir(dir string) error

LoadFromDir scans this directory, loading all files of the form [0-9]*.conf, and recurse through the subdirectories. It may be used with the included folder 'confs/' to build a 'standard' configuration. See `LoadFromMemory` if you want control over individual files.

func (*Config) LoadFromMemory

func (config *Config) LoadFromMemory(r io.Reader) error

Walks the configuration in `r` and constructs the internal representation in `config`. The new rules are added to the configuration, meaning that several file can be merged by repeated calls.

func (*Config) PrepareRender

func (config *Config) PrepareRender(pat, font Pattern) Pattern

PrepareRender creates a new pattern consisting of elements of `font` not appearing in `pat`, elements of `pat` not appearing in `font` and the best matching value from `pat` for elements appearing in both. The result is passed to `config.Substitute` with `kind = MatchResult` and then returned.

func (*Config) ScanFontDirectories

func (config *Config) ScanFontDirectories(dirs ...string) (Fontset, error)

ScanFontDirectories recursively scans the given directories, opening the valid font files and building the associated font patterns. Symbolic links for files are resolved, but not for directories. The rules with kind `MatchScan` in `config` are applied to the results. The <selectfont> rules defined in the configuration are applied to filter the returned set.

An error is returned if the directory traversal fails, not for invalid font files, which are simply ignored.

func (*Config) ScanFontFile

func (config *Config) ScanFontFile(path string) (Fontset, error)

ScanFontFile scans one font file (see ScanFontDirectories for more details). Here, an error is returned for an invalid font file. Note that only the pattern-based font selector specified in the config (if any), are applied.

func (*Config) ScanFontRessource

func (config *Config) ScanFontRessource(content fonts.Resource, contentID string) (Fontset, error)

ScanFontRessource is the same as `ScanFontFile`, for general content. `contentID` is included in the returned patterns as the file name.

func (*Config) Substitute

func (config *Config) Substitute(p, testPattern Pattern, kind matchKind)

Substitute performs the sequence of pattern modification operations on `p`. If `kind` is MatchQuery, then those tagged as pattern operations are applied, else if `kind` is MatchResult, those tagged as font operations are applied and `testPattern` is used for <test> elements with target=pattern.

type Float

type Float float32

type FontFormat

type FontFormat string

FontFormat identifies the supported font file types.

const (
	TrueType FontFormat = "TrueType"
	PCF      FontFormat = "PCF"
	Type1    FontFormat = "Type 1"
)

func ReadFontFile added in v0.0.2

func ReadFontFile(file fonts.Resource) (fonts.Faces, FontFormat)

ReadFontFile tries for every supported font format, returning a valid font format if one matches.

func (FontFormat) Loader

func (ff FontFormat) Loader() fonts.FontLoader

Loader returns the loader for the font format.

type Fontset

type Fontset []Pattern

Fontset contains a list of Patterns, containing the results of listing fonts. The order within the set does not determine the font selection, except in the case of identical matches in which case earlier fonts match preferrentially.

func LoadFontset

func LoadFontset(src io.Reader) (Fontset, error)

LoadFontset reads a cache file, exported by the `Fontset.Serialize` method, and constructs the associated font set.

func LoadFontsetFile added in v0.0.2

func LoadFontsetFile(file string) (Fontset, error)

LoadFontsetFile is a convenience wrapper of `LoadFontset` for files.

func ScanAndCache added in v0.0.2

func ScanAndCache(fontsFileCache string) (Fontset, error)

ScanAndCache uses the standard config, scans the fonts on disk from the default directories, and caches the result into `fontsFileCache`.

func (Fontset) List

func (set Fontset) List(p Pattern, objs ...Object) Fontset

List selects fonts matching `p` (all if p is empty), creates patterns from those fonts containing only the objects in `objs` and returns the set of unique such patterns. If no objects are specified, default to all builtin objects.

func (Fontset) Match

func (set Fontset) Match(p Pattern, config *Config) Pattern

Match finds the font in `set` most closely matching `pattern` and returns the result of `config.PrepareRender` for that font and the provided pattern. This function should be called only after `config.Substitute` and `p.SubstituteDefault` have been called for `p`; otherwise the results will not be correct.

func (Fontset) Serialize

func (fs Fontset) Serialize(dst io.Writer) error

Serialize serialise the content of the font set (using a custom binary encoding and gzip). Since scanning the fonts is rather slow, this methods can be used in conjonction with `LoadFontset` to cache the result of a scan.

func (Fontset) Sort

func (set Fontset) Sort(p Pattern, trim bool) (Fontset, Charset)

Sort returns the list of fonts from `set` sorted by closeness to `pattern`. If `trim` is true, elements in the list which don't include Unicode coverage not provided by earlier elements in the list are elided. The union of Unicode coverage of all of the fonts is returned. This function should be called only after `Config.Substitute` and `Pattern.SubstituteDefault` have been called for `p`; otherwise the results will not be correct. The returned `Fontset` references Pattern structures which may be shared by the return value from multiple `Sort` calls, applications cannot modify these patterns. Instead, they should be passed, along with `p`, to `Config.PrepareRender()` which combines them into a complete pattern.

type Int

type Int int32

type Langset

type Langset struct {
	// contains filtered or unexported fields
}

Langset holds the set of languages supported by a font. These are computed for a font based on orthographic information built into the fontconfig library. Fontconfig has orthographies for all of the ISO 639-1 languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA.

func NewLangset added in v0.0.2

func NewLangset(str string) Langset

NewLangset parse a set of language of the form <lang1>|<lang2>|... Each language should be of the form Ll-Tt where Ll is a two or three letter language from ISO 639 and Tt is a territory from ISO 3166.

func (Langset) Copy

func (ls Langset) Copy() Langset

Copy returns a deep copy of `ls`.

func (Langset) String

func (ls Langset) String() string

type Matrix

type Matrix struct {
	Xx, Xy, Yx, Yy float32
}

func (Matrix) Multiply

func (a Matrix) Multiply(b Matrix) Matrix

return a * b

type Object

type Object uint16

Object encode the properties of a font. Standard properties are built in the package, but custom ones may also be integrated inside patterns and configuration files.

const (
	FAMILY          Object // with type String
	FAMILYLANG             // with type String
	STYLE                  // with type String
	STYLELANG              // with type String
	FULLNAME               // with type String
	FULLNAMELANG           // with type String
	SLANT                  // with type Int
	WEIGHT                 // with type Range
	WIDTH                  // with type Range
	SIZE                   // with type Range
	ASPECT                 // with type Double
	PIXEL_SIZE             // with type Double
	SPACING                // with type Int
	FOUNDRY                // with type String
	ANTIALIAS              // with type Bool
	HINT_STYLE             // with type Int
	HINTING                // with type Bool
	VERTICAL_LAYOUT        // with type Bool
	AUTOHINT               // with type Bool
	GLOBAL_ADVANCE         // with type Bool
	FILE                   // with type String
	INDEX                  // with type Int
	RASTERIZER             // with type String
	OUTLINE                // with type Bool
	SCALABLE               // with type Bool
	DPI                    // with type Double
	RGBA                   // with type Int
	SCALE                  // with type Double
	MINSPACE               // with type Bool
	CHARWIDTH              // with type Int
	CHAR_HEIGHT            // with type Int
	MATRIX                 // with type Matrix
	CHARSET                // with type CharSet
	LANG                   // with type LangSet
	FONTVERSION            // with type Int
	CAPABILITY             // with type String
	FONTFORMAT             // with type String
	EMBOLDEN               // with type Bool
	EMBEDDED_BITMAP        // with type Bool
	DECORATIVE             // with type Bool
	LCD_FILTER             // with type Int
	NAMELANG               // with type String
	FONT_FEATURES          // with type String
	PRGNAME                // with type String
	HASH                   // with type String
	POSTSCRIPT_NAME        // with type String
	COLOR                  // with type Bool
	SYMBOL                 // with type Bool
	FONT_VARIATIONS        // with type String
	VARIABLE               // with type Bool
	FONT_HAS_HINT          // with type Bool
	ORDER                  // with type Int
	// Custom objects should be defined starting from this value
	FirstCustomObject
)

func (Object) String

func (object Object) String() string

type Pattern

type Pattern map[Object]*valueList

An Pattern holds a set of names with associated value lists; each name refers to a property of a font, also called `Object`. Patterns are used as inputs to the matching code as well as holding information about specific fonts. Each property can hold one or more values; conventionally all of the same type, although the interface doesn't demand that.

func BuildPattern

func BuildPattern(elements ...PatternElement) Pattern

func NewPattern

func NewPattern() Pattern

NewPattern returns an empty, initalized pattern

func (Pattern) Add

func (p Pattern) Add(object Object, value Value, appendMode bool)

Add adds the given value for the given object, with a strong binding. `appendMode` controls the location of insertion in the current list. A copy of `value` is made, so that the library retains no reference to any user-supplied data.

func (Pattern) AddBool

func (p Pattern) AddBool(object Object, value bool)

func (Pattern) AddFloat

func (p Pattern) AddFloat(object Object, value float32)

func (Pattern) AddInt added in v0.0.2

func (p Pattern) AddInt(object Object, value int32)

func (Pattern) AddString

func (p Pattern) AddString(object Object, value string)

func (Pattern) Del

func (p Pattern) Del(object Object)

Del remove all the values associated to `object`

func (Pattern) Duplicate

func (p Pattern) Duplicate() Pattern

Duplicate returns a new pattern that matches `p`. Each pattern may be modified without affecting the other one.

func (Pattern) FaceID added in v0.0.2

func (p Pattern) FaceID() fonts.FaceID

FaceID reads the FILE and INDEX records. Note that it usually only makes sense to call this function for results (for which the fields are garanteed to be valid).

func (Pattern) Format

func (p Pattern) Format() FontFormat

Format returns the font format of this pattern.

func (Pattern) GetAt

func (p Pattern) GetAt(object Object, id int) (Value, Result)

GetAt returns the value in position `id` for `object`, without type conversion.

func (Pattern) GetBool

func (p Pattern) GetBool(object Object) (Bool, bool)

GetBool return the potential Bool at `object`, index 0, if any.

func (Pattern) GetCharset

func (p Pattern) GetCharset(object Object) (Charset, bool)

GetCharset return the potential Charset at `object`, index 0, if any.

func (Pattern) GetFloat

func (p Pattern) GetFloat(object Object) (float32, bool)

GetFloat return the potential first float at `object`, if any.

func (Pattern) GetFloats

func (p Pattern) GetFloats(object Object) []float32

GetFloats returns the values with type Float at `object`

func (Pattern) GetInt

func (p Pattern) GetInt(object Object) (int32, bool)

GetInt return the potential first int at `object`, if any.

func (Pattern) GetInts

func (p Pattern) GetInts(object Object) []int32

GetInts returns the values with type Int at `object`

func (Pattern) GetMatrices

func (p Pattern) GetMatrices(object Object) []Matrix

GetMatrices returns the values with type FcMatrix at `object`

func (Pattern) GetMatrix

func (p Pattern) GetMatrix(object Object) (Matrix, bool)

GetMatrix return the potential Matrix at `object`, index 0, if any.

func (Pattern) GetString

func (p Pattern) GetString(object Object) (string, bool)

GetString return the potential string at `object`, index 0, if any.

func (Pattern) GetStrings

func (p Pattern) GetStrings(object Object) []string

GetStrings returns the values with type String at `object`

func (Pattern) Hash

func (p Pattern) Hash() string

Hash returns a value, usable as map key, and defining the pattern in terms of equality: two patterns with the same hash are considered equal.

func (Pattern) String

func (p Pattern) String() string

String returns a human friendly representation, mainly used for debugging.

func (Pattern) SubstituteDefault

func (pattern Pattern) SubstituteDefault()

SubstituteDefault performs default substitutions in a pattern, supplying default values for underspecified font patterns:

  • unspecified style or weight are set to Medium
  • unspecified style or slant are set to Roman
  • unspecified pixel size are given one computed from any specified point size (default 12), dpi (default 75) and scale (default 1).

type PatternElement

type PatternElement struct {
	Value  Value
	Object Object
}

PatternElement associate one value to a categorie (or Object)

type Range

type Range struct {
	Begin, End float32
}

type Result

type Result uint8

Result is returned when accessing elements of a pattern.

const (
	ResultMatch Result = iota
	ResultNoMatch
	ResultTypeMismatch
	ResultNoId
)

type String

type String string

type Value

type Value interface {
	// contains filtered or unexported methods
}

Value is a sum type for the values of the properties of a pattern

Directories

Path Synopsis
Read a set of language orthographies and build Go declarations for charsets which can then be used to identify which languages are supported by a given font.
Read a set of language orthographies and build Go declarations for charsets which can then be used to identify which languages are supported by a given font.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL