🚨 LOCKDOWN: Repository migration in progress

DO NOT CREATE NEW ISSUES OR PULL REQUESTS HERE

All packages are moving to: https://github.com/swaits-typst-packages
Existing issues and PRs are being migrated.

This is a temporary lockdown while migration is completed.
This commit is contained in:
swaits committed 2025-10-26 21:22:33 -06:00
1 parent b84900ffc1
commit 38d33d3c8a
52 files changed
+1279 -664

No files matched your search

+244 -255
View File
@@ -2,285 +2,274 @@
#let tests = (
// Main tests (covers most of English language)
("Europe","a"),
("European","a"),
("Hannah","a"),
("T-shirt","a"),
("Xerox","a"),
("Zebra","a"),
("aardvark","an"),
("apple","an"),
("boat","a"),
("car","a"),
("cat","a"),
("chair","a"),
("dog","a"),
("egg","an"),
("elephant","an"),
("emu","an"),
("eucalyptus","a"),
("eulogy","a"),
("euphemism","a"),
("exhausted","an"),
("ghost","a"),
("hat","a"),
("heir","an"),
("heiress","an"),
("herb","an"),
("herbal","an"),
("historic","a"),
("history","a"),
("homage","an"),
("honest","an"),
("honestly","an"),
("honor","an"),
("honorary","an"),
("honour","an"),
("horse","a"),
("hour","an"),
("hourglass","an"),
("house","a"),
("iris","an"),
("orange","an"),
("owl","an"),
("table","a"),
("ugly","an"),
("umbrella","an"),
("umpire","an"),
("unicorn","a"),
("unique","a"),
("university","a"),
("urn","an"),
("usage","a"),
("user","a"),
("utensil","a"),
("Europe", "a"),
("European", "a"),
("Hannah", "a"),
("T-shirt", "a"),
("Xerox", "a"),
("Zebra", "a"),
("aardvark", "an"),
("apple", "an"),
("boat", "a"),
("car", "a"),
("cat", "a"),
("chair", "a"),
("dog", "a"),
("egg", "an"),
("elephant", "an"),
("emu", "an"),
("eucalyptus", "a"),
("eulogy", "a"),
("euphemism", "a"),
("exhausted", "an"),
("ghost", "a"),
("hat", "a"),
("heir", "an"),
("heiress", "an"),
("herb", "an"),
("herbal", "an"),
("historic", "a"),
("history", "a"),
("homage", "an"),
("honest", "an"),
("honestly", "an"),
("honor", "an"),
("honorary", "an"),
("honour", "an"),
("horse", "a"),
("hour", "an"),
("hourglass", "an"),
("house", "a"),
("iris", "an"),
("orange", "an"),
("owl", "an"),
("table", "a"),
("ugly", "an"),
("umbrella", "an"),
("umpire", "an"),
("unicorn", "a"),
("unique", "a"),
("university", "a"),
("urn", "an"),
("usage", "a"),
("user", "a"),
("utensil", "a"),
// Acronym tests
("ASCII","an"),
("CFO","a"),
("F.A.Q.","an"),
("FBI","an"),
("GIF","a"),
("HIV","an"),
("JPEG","a"),
("LED","an"),
("MRI","an"),
("NATO","an"),
("PNG","a"),
("Q&A","a"),
("RF","an"),
("RNG","an"),
("SAS","an"),
("SMS","an"),
("SOS","an"),
("SQL","an"),
("UFO","a"),
("URL","a"),
("VCR","a"),
("WWW","a"),
("X.Y.Z.","an"),
("YAML","a"),
("ASCII", "an"),
("CFO", "a"),
("F.A.Q.", "an"),
("FBI", "an"),
("GIF", "a"),
("HIV", "an"),
("JPEG", "a"),
("LED", "an"),
("MRI", "an"),
("NATO", "an"),
("PNG", "a"),
("Q&A", "a"),
("RF", "an"),
("RNG", "an"),
("SAS", "an"),
("SMS", "an"),
("SOS", "an"),
("SQL", "an"),
("UFO", "a"),
("URL", "a"),
("VCR", "a"),
("WWW", "a"),
("X.Y.Z.", "an"),
("YAML", "a"),
// Extra tests (courtesy of LLM)
// Common English words starting with vowels
("idea","an"),
("island","an"),
("offer","an"),
("option","an"),
("operation","an"),
("appletree","an"),
("iguana","an"),
("octopus","an"),
("atom","an"),
("item","an"),
("idea", "an"),
("island", "an"),
("offer", "an"),
("option", "an"),
("operation", "an"),
("appletree", "an"),
("iguana", "an"),
("octopus", "an"),
("atom", "an"),
("item", "an"),
// Words starting with vowel but "yoo" sound (thus 'a')
("universe","a"),
("unicycle","a"),
("uniform","a"),
("union","a"),
("united","a"),
("unique","a"), // already tested, reaffirmed
("usual","a"),
("useful","a"),
("utility","a"),
("utopia","a"),
("universe", "a"),
("unicycle", "a"),
("uniform", "a"),
("union", "a"),
("united", "a"),
("unique", "a"), // already tested, reaffirmed
("usual", "a"),
("useful", "a"),
("utility", "a"),
("utopia", "a"),
// More common vowel words with a/an
("umbrella","an"), // repeated but reaffirming
("eggplant","an"),
("insect","an"),
("eleven","an"),
("olive","an"),
("impulse","an"),
("ox","an"),
("aroma","an"),
("ear","an"),
("ocean","an"),
("umbrella", "an"), // repeated but reaffirming
("eggplant", "an"),
("insect", "an"),
("eleven", "an"),
("olive", "an"),
("impulse", "an"),
("ox", "an"),
("aroma", "an"),
("ear", "an"),
("ocean", "an"),
// Words starting with 'h' but pronounced, so 'a'
("house","a"), // repeated for emphasis
("hammer","a"),
("helmet","a"),
("history","a"), // repeated
("hero","a"),
("hill","a"),
("hobby","a"),
("holiday","a"),
("harmony","a"),
("hover","a"),
("house", "a"), // repeated for emphasis
("hammer", "a"),
("helmet", "a"),
("history", "a"), // repeated
("hero", "a"),
("hill", "a"),
("hobby", "a"),
("holiday", "a"),
("harmony", "a"),
("hover", "a"),
// More silent 'h' words (already in set, but variations)
("honorific","an"),
("honorarium","an"),
("honesties","an"),
("hourly","an"),
("heirloom","an"),
("honorific", "an"),
("honorarium", "an"),
("honesties", "an"),
("hourly", "an"),
("heirloom", "an"),
// Words starting with 'e' + 'u' combo with "yoo" sound
("Europe","a"), // repeated
("European","a"), // repeated
("euphoric","a"),
("eureka","a"),
("euphemistic","a"),
("euphonious","a"),
("eucalyptus","a"), // repeated
("euthanasia","a"),
("eugenics","a"),
("Eurasia","a"),
("Europe", "a"), // repeated
("European", "a"), // repeated
("euphoric", "a"),
("eureka", "a"),
("euphemistic", "a"),
("euphonious", "a"),
("eucalyptus", "a"), // repeated
("euthanasia", "a"),
("eugenics", "a"),
("Eurasia", "a"),
// Common consonant-start words
("book","a"),
("pen","a"),
("fork","a"),
("spoon","a"),
("knife","a"),
("ball","a"),
("tree","a"),
("river","a"),
("mountain","a"),
("cloud","a"),
("book", "a"),
("pen", "a"),
("fork", "a"),
("spoon", "a"),
("knife", "a"),
("ball", "a"),
("tree", "a"),
("river", "a"),
("mountain", "a"),
("cloud", "a"),
// More vowel-start words
("ostrich","an"),
("amphibian","an"),
("eleven","an"), // repeated
("issue","an"),
("incense","an"),
("antenna","an"),
("echo","an"),
("aisle","an"),
("oracle","an"),
("overcoat","an"),
("ostrich", "an"),
("amphibian", "an"),
("eleven", "an"), // repeated
("issue", "an"),
("incense", "an"),
("antenna", "an"),
("echo", "an"),
("aisle", "an"),
("oracle", "an"),
("overcoat", "an"),
// More acronym/initialism tests:
("ATM","an"), // A = 'ay'
("EPA","an"), // E = 'ee'
("FAQ","an"), // F = 'eff', repeated as F.A.Q.
("HTML","an"), // H = 'aitch'
("IBM","an"), // I = 'eye'
("LAN","an"), // L = 'el'
("NFL","an"), // N = 'en'
("OSHA","an"), // O = 'oh'
("RAM","an"), // R = 'ar'
("SMS","an"), // repeated, S = 'ess'
("ATM", "an"), // A = 'ay'
("EPA", "an"), // E = 'ee'
("FAQ", "an"), // F = 'eff', repeated as F.A.Q.
("HTML", "an"), // H = 'aitch'
("IBM", "an"), // I = 'eye'
("LAN", "an"), // L = 'el'
("NFL", "an"), // N = 'en'
("OSHA", "an"), // O = 'oh'
("RAM", "an"), // R = 'ar'
("SMS", "an"), // repeated, S = 'ess'
// Acronyms starting with consonant sound letters
("GIF","a"), // G = 'jee', repeated
("CFO","a"), // C = 'see', repeated (consonant sound 's')
("CEO","a"), // C = 'see'
("DNA","a"), // D = 'dee' starts with 'd' consonant sound
("PGA","a"), // P = 'pee' starts with 'p' consonant sound
("QVC","a"), // Q = 'kyoo' starts with 'k' consonant sound
("TNT","a"), // T = 'tee' starts with 't' consonant sound
("UPS","a"), // U = 'yoo' sound, hence 'a'
("VIP","a"), // V = 'vee' starts with 'v' consonant sound
("WIPO","a"), // W = 'double-u' starts with 'd' consonant sound
("GIF", "a"), // G = 'jee', repeated
("CFO", "a"), // C = 'see', repeated (consonant sound 's')
("CEO", "a"), // C = 'see'
("DNA", "a"), // D = 'dee' starts with 'd' consonant sound
("PGA", "a"), // P = 'pee' starts with 'p' consonant sound
("QVC", "a"), // Q = 'kyoo' starts with 'k' consonant sound
("TNT", "a"), // T = 'tee' starts with 't' consonant sound
("UPS", "a"), // U = 'yoo' sound, hence 'a'
("VIP", "a"), // V = 'vee' starts with 'v' consonant sound
("WIPO", "a"), // W = 'double-u' starts with 'd' consonant sound
// More tricky 'u' words with 'yoo' sound for 'a'
("unify","a"),
("unilateral","a"),
("ubiquitous","a"), // 'yoo-bik...'
("usurp","a"),
("usuary","a"), // 'yoo-zhoo-ary' (rare, but treat like usual)
("uterus","a"), // 'yoo-terus'
("usher","an"), // 'uh-sher' vowel sound
("ugly","an"), // repeated, 'uh-glee'
("upper","an"), // 'uh-pur' (vowel sound but actually 'uh' sound = 'an'? Actually "upper" starts with a simple vowel sound 'uh', so should it be 'an'? It's commonly "an upper hand".
("update","an"), // 'up-date' starts with 'uh' vowel sound → 'an update' normally. Actually we say "an update" commonly. Correcting to 'an':
("unify", "a"),
("unilateral", "a"),
("ubiquitous", "a"), // 'yoo-bik...'
("usurp", "a"),
("usuary", "a"), // 'yoo-zhoo-ary' (rare, but treat like usual)
("uterus", "a"), // 'yoo-terus'
("usher", "an"), // 'uh-sher' vowel sound
("ugly", "an"), // repeated, 'uh-glee'
("upper", "an"), // 'uh-pur' (vowel sound but actually 'uh' sound = 'an'? Actually "upper" starts with a simple vowel sound 'uh', so should it be 'an'? It's commonly "an upper hand".
("update", "an"), // 'up-date' starts with 'uh' vowel sound → 'an update' normally. Actually we say "an update" commonly. Correcting to 'an':
// Words starting with 'u' that actually take "an"
// (because they start with a vowel sound 'uh'):
("under","an"),
("understand","an"),
("unusual","an"),
("unreal","an"),
("unemployed","an"),
("unequal","an"),
("unopened","an"),
("unarmed","an"),
("uneasy","an"),
("united","a"), // 'yoo-nited' is 'a united front'
("universal","a"),
("umbrella","an"), // repeated
("upset","an"), // 'uh-pset' vowel start
("under", "an"),
("understand", "an"),
("unusual", "an"),
("unreal", "an"),
("unemployed", "an"),
("unequal", "an"),
("unopened", "an"),
("unarmed", "an"),
("uneasy", "an"),
("united", "a"), // 'yoo-nited' is 'a united front'
("universal", "a"),
("umbrella", "an"), // repeated
("upset", "an"), // 'uh-pset' vowel start
// More vowel words to ensure coverage:
("animal","an"),
("image","an"),
("order","an"),
("arrow","an"),
("ace","an"),
("acre","an"),
("agent","an"),
("artist","an"),
("idea","an"), // repeated
("aim","an"),
("item","an"), // repeated
("isotope","an"),
("opera","an"),
("animal", "an"),
("image", "an"),
("order", "an"),
("arrow", "an"),
("ace", "an"),
("acre", "an"),
("agent", "an"),
("artist", "an"),
("idea", "an"), // repeated
("aim", "an"),
("item", "an"), // repeated
("isotope", "an"),
("opera", "an"),
// Words starting with vowels but pronounced with consonant sound 'y' → 'a'
("euphemistic","a"), // repeated
("euphoric","a"),
("eulogy","a"), // repeated
("Europe","a"), // repeated
("European","a"), // repeated
("eugenics","a"), // repeated
("euphemism","a"), // repeated
("eureka","a"), // repeated
("euphonious","a"),
("Eurasia","a"),
("euphemistic", "a"), // repeated
("euphoric", "a"),
("eulogy", "a"), // repeated
("Europe", "a"), // repeated
("European", "a"), // repeated
("eugenics", "a"), // repeated
("euphemism", "a"), // repeated
("eureka", "a"), // repeated
("euphonious", "a"),
("Eurasia", "a"),
// Common consonant-start words:
("milk","a"),
("road","a"),
("stone","a"),
("book","a"), // repeated
("pen","a"), // repeated
("fork","a"), // repeated
("spoon","a"), // repeated
("knife","a"), // 'knife' actually starts with /n/ sound because 'k' is silent. "a knife" or "an knife"? It's "a knife" (starts with 'n' consonant sound?), actually 'kn' in 'knife' is silent, so 'knife' is pronounced 'nife' with a consonant sound 'n', so "a knife" is correct.
("glass","a"),
("window","a"),
("milk", "a"),
("road", "a"),
("stone", "a"),
("book", "a"), // repeated
("pen", "a"), // repeated
("fork", "a"), // repeated
("spoon", "a"), // repeated
("knife", "a"), // 'knife' actually starts with /n/ sound because 'k' is silent. "a knife" or "an knife"? It's "a knife" (starts with 'n' consonant sound?), actually 'kn' in 'knife' is silent, so 'knife' is pronounced 'nife' with a consonant sound 'n', so "a knife" is correct.
("glass", "a"),
("window", "a"),
// Final checks with tricky silent letters:
("gnome","a"), // 'g' silent, pronounced 'nome' with 'n' consonant sound → 'a gnome'
("gnat","a"), // 'nat' consonant sound → 'a gnat'
("xylophone","a"), // 'zylophone' → 'z' consonant sound → 'a xylophone'
("xenon","a"), // 'zee-non' consonant sound 'z' → 'a xenon'
("honorific","an"), // repeated but reaffirming
("hourly","an"), // repeated but reaffirming
("honorably","an"),
("honorifics","an"),
("honors","an"),
("gnome", "a"), // 'g' silent, pronounced 'nome' with 'n' consonant sound → 'a gnome'
("gnat", "a"), // 'nat' consonant sound → 'a gnat'
("xylophone", "a"), // 'zylophone' → 'z' consonant sound → 'a xylophone'
("xenon", "a"), // 'zee-non' consonant sound 'z' → 'a xenon'
("honorific", "an"), // repeated but reaffirming
("hourly", "an"), // repeated but reaffirming
("honorably", "an"),
("honorifics", "an"),
("honors", "an"),
)
#for (word, article) in tests {
let chosen = __determine_article(word)
if chosen != article {
panic("bad choice! word: " + word + ", article: " + article + ", chosen: " + chosen)
panic(
"bad choice! word: "
+ word
+ ", article: "
+ article
+ ", chosen: "
+ chosen,
)
}
}