diff --git a/data/dictionary.tsv b/data/dictionary.tsv index f3656c8..605f7df 100644 --- a/data/dictionary.tsv +++ b/data/dictionary.tsv @@ -112,7 +112,6 @@ benedīçômus blessing benedīçā to bless (Romance/Latin church) bex five bidô please (Low German) -bin 1,728, 12³ — picked up on the road east out of the Black Sea bir one bjefā to bark (Scandinavian bjeffe) blasfemī blasphemy (Romance/Greek-Latin) @@ -513,7 +512,6 @@ jūni June jūnôr youth, young person jūr root — of a plant or tree; also root vegetable jūst cheese -jūz 144, 12² — a gross; the counting-house at home jǟ ice jǟdô ice-cold jǟmä to stay, remain @@ -711,7 +709,9 @@ krāgô collar, neckline (Low German) krāmô small goods, wares (Marīsô, slav) krāmôr vendor, wares-seller (Marīsô, slav) krīs unofficial, provisional, binding in name only — a rule, permit, or promise everyone treats as a formality; symbolic compliance (folk origin, now opaque: 'written in chalk') +krōlax 3,234,816 (12⁶+12⁵) — krōr laxô eroded into one root krōm crooked; dishonest, corrupt (coarse) +krōr 2,985,984, 12⁶ — the Red Sea; Persian kurūr digested krūpā to crawl (Low German krupen) krūçôfiks crucifix, rood (technical; -fiks frozen) krūçôveç cross-water, holy water (folk term; formal is sakrôveç) @@ -803,11 +803,9 @@ kēļkôrd grammar kēļôr grammarian kīl keel (Low German Kiel) kōbô cave, cavern (Livonian) -kōdī 2,985,984, 12⁶ — the end of the road, where it meets the sea kōit dawn, first light (Livonian) kōju homeward, home (to) kōk cake, sweet bread -kōlax 3,234,816 (12⁶+12⁵) — kōdī laxô fused by erosion kōlôr color kōrjā to gather, collect kōrrô to run @@ -845,8 +843,8 @@ latik bream (Livonian) lauk garlic lavērā to tack, to beat to windward (Low German lavéren) lax salmon (Scandinavian laks) -laxtum 269,568 (12⁵+12⁴) — laxô tūm fused by erosion -laxô 248,832, 12⁵ — the far markets, where the road turns south +laxmur 269,568 (12⁵+12⁴) — laxô mürās eroded into one root +laxô 248,832, 12⁵ — the Silk Road; Persian lakh digested laçertô lizard (Romance/Latin lacerta) legitīm legitimate (Romance/Latin) Legmō Netherlands (exonym, "low-land") @@ -1033,6 +1031,7 @@ muigā to smile (Livonian) mult many, much mumbõ about, roughly (approx.) muntāñ mountain +murastüs 22,464 (12⁴+12³) — mürās tüsaç eroded into one root murdā to break, snap — of a bone (Livonian) muretõ to worry murk carrot @@ -1065,6 +1064,7 @@ müristä to thunder müristü thunder mürk poison (Livonian) mürkäm the poisoned ground — the hostile away-arena (mürk + -äm place-suffix) +mürās 20,736, 12⁴ — the Black Sea; Greek myriás digested müä to sell (colloq.) müük sale; for sale mā earth @@ -1811,7 +1811,6 @@ tulevô future, coming tulvô flood tulvā to flood, overflow tulē to come -tumbôn 22,464 (12⁴+12³) — tūm bin fused by erosion tumô dull, matte tundô to feel tunnõl tunnel, polytunnel (international) @@ -1840,6 +1839,7 @@ tühjä empty; to empty out tühjā to drain, empty out tühjādôt emptied, drained tükä to set out, depart +tüsaç 1,728, 12³ — the Eastern Corridor; Slavic tysjača digested tāgô dough tām oak (Livonian) tārgô market stall (Marīsô, slav) @@ -1860,7 +1860,6 @@ tōl toll, fee; (vulgar) bribe, payoff (coarse) tōlpreverô toll-priest, fee-taking priest (hostile/folk; dockside insult for clergy who sell blessings) tōn tuna (Saharan/Mediterranean tūn) tōnô note, tone (Romance) -tūm 20,736, 12⁴ — the caravan reckoning of the steppe stages tūom bird-cherry (Livonian tūom) tūļ wind tūļkuiv wind-dried (tūļ 'wind' + kuiv) @@ -2049,6 +2048,7 @@ xȫvlā to skate (Low German) çent a hundred = 144, the square of the base (Latin centum) çentenār the hundredweight — çent librô, 144 pounds (Latin centenarium); the Zentner çenô bargain price, street price (Marīsô, slav) +çenāj 144, 12² — the Adriatic counting-house; Venetian centinaio digested çera wax; sealing-wax, the wax pressed under a seal on a document (Romance/Latin cera; the law-and-ledger register, cf. sīgel) çeñ shadow (Marīsô, slav; cf. çenô bargain-price — distinct) çeñôr the shadow, the eraser — the specialist whose job is to remove one opponent (çeñ + -ôr) diff --git a/numbers.html b/numbers.html index 1a156fd..0507e4e 100644 --- a/numbers.html +++ b/numbers.html @@ -205,21 +205,23 @@ const TEEN=[ ["dürdok","düzin dokūz","d- onset; final -ūz falls, as in dürsek"], ["dürn","düzin on","vowel-initial: the o- syncopates, leaving n as a bare coda"], ["dürjaz","düzin jāz","j- onset; the long ā shortens under the loss of its own stress"]]; -const DUNA="düzin", GROSO="jūz"; +const DUNA="düzin"; /* THE LADDER IS A MAP. Small numbers are home; each order of magnitude was picked up one stage further out along the road, at the moment the trade needed a number that large — and lexicalized on arrival as a power of TWELVE rather than of ten. Baltic counting-house → the Mediterranean and the Alpine passes → the length of the silk road. You can read the empire's reach off its own numerals. Each was digested by the same phonology that later fuses them. */ -const MAG={ 2:["jūz","12² · a gross — the counting-house at home"], - 3:["bin","12³ · the road east out of the Black Sea"], - 4:["tūm","12⁴ · the caravan reckoning of the steppe stages"], - 5:["laxô","12⁵ · the far markets, where the road turns south"], - 6:["kōdī","12⁶ · the end of the road, where it meets the sea"] }; -const FUSE={ "4+3":["tumbôn","tūm bin → tūmbin (juncture) → tūmbôn (i reduces to ô) → tumbôn (ū shortens)"], - "5+4":["laxtum","laxô tūm → laxôtūm → laxtūm (medial -ô- syncopates) → laxtum (ū shortens)"], - "6+5":["kōlax","kōdī laxô → kōdīlaxô → kōdlaxô (-ī- syncopates) → kōllaxô (/dl/ assimilates) → kōlaxô (degemination) → kōlax (final -ô apocopates)"] }; +const MAG={ 2:["çenāj","12² · Adriatic — Venetian centinaio, a hundred-count. çentināj → çentnāj (unstressed -i- syncopates) → çenāj (the /ntn/ cluster sheds its stop)"], + 3:["tüsaç","12³ · Eastern Corridor — Slavic tysjača. tüsjača → tüsjaç (final -a apocopates) → tüsaç (the glide -j- is absorbed)"], + 4:["mürās","12⁴ · Black Sea — Greek myriás, the myriad. müriās → mürās (unstressed -i- syncopates before the long vowel)"], + 5:["laxô","12⁵ · Silk Road — Persian lakh. The retroflex/aspirate lands on Nelôxi x [ʃ]; -ô is supplied as the native final"], + 6:["krōr","12⁶ · Red Sea — Persian kurūr, the far-trade great number. kurūr → krūr (unstressed u- syncopates) → krōr (ū lowers to ō under stress)"] }; +/* Adjacent magnitudes do not stand as separate words — they erode and fuse into + one opaque brick. Keyed "higher+lower", both with coefficient one. */ +const FUSE={ "4+3":["murastüs","mürās tüsaç → mürāstüsaç (juncture) → mürāstüs (the second root is clipped of its final syllable, as düzin → düz-) → murastüs (ā shortens, having lost the word's stress peak)"], + "5+4":["laxmur","laxô mürās → laxômürās (juncture) → laxmürās (medial -ô- syncopates) → laxmur (the final -ās is clipped away)"], + "6+5":["krōlax","krōr laxô → krōrlaxô (juncture) → krōllaxô (/rl/ assimilates) → krōlaxô (degemination) → krōlax (final -ô apocopates)"] }; /* The Turkish tens re-pointed from ten to twelve. They are already OPAQUE — jirmī, otūz, kôrk, ellī are not derivable from ikī, üç, dört, bex — so the dozens come out as single unglued words for free. @@ -317,7 +319,7 @@ function fold(s){ .replace(/ō/g,"o").replace(/ū/g,"u").replace(/ñ/g,"n").replace(/ç/g,"c") .replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/õ/g,"o"); } -const UNITW={ [fold(DUNA)]:12, [fold(GROSO)]:144 }; +const UNITW={ [fold(DUNA)]:12 }; const MAGW={}; Object.keys(MAG).forEach(k=>MAGW[fold(MAG[k][0])]=Math.pow(12,+k)); const FUSEW={}; Object.keys(FUSE).forEach(k=>{ const [hi,lo]=k.split("+").map(Number); @@ -605,10 +607,10 @@ $("q").addEventListener("input",draw); /* ── self-check: the canon examples must come out exactly as written ───────── */ (function(){ - const MUST=[[0,"sôfôr"],[11,"jāz"],[12,"düzin"],[13,"dürber"],[14,"dürkī"], - [22,"dürn"],[24,"jirmī"],[41,"otūz bex"],[120,"langhunt"],[132,"jāzlôk"], - [144,"jūz"],[157,"jūz dürber"],[1728,"bin"],[20736,"tūm"],[248832,"laxô"], - [Math.pow(12,6),"kōdī"],[22464,"tumbôn"],[269568,"laxtum"],[3234816,"kōlax"]]; + const MUST=[[0,"sôfôr"],[11,"jāz"],[12,"düzin"],[13,"dürber"],[22,"dürn"], + [24,"jirmī"],[120,"langhunt"],[132,"jāzlôk"],[144,"çenāj"],[1728,"tüsaç"], + [20736,"mürās"],[248832,"laxô"],[Math.pow(12,6),"krōr"], + [22464,"murastüs"],[269568,"laxmur"],[3234816,"krōlax"]]; const bad=MUST.filter(([n,w])=>cardinal(n)!==w) .map(([n,w])=>`${n}: got "${cardinal(n)}", canon "${w}"`); /* every value must also read back to itself */ diff --git a/tools/build_numbers.py b/tools/build_numbers.py index d051398..fd8b027 100644 --- a/tools/build_numbers.py +++ b/tools/build_numbers.py @@ -223,21 +223,23 @@ const TEEN=[ ["dürdok","düzin dokūz","d- onset; final -ūz falls, as in dürsek"], ["dürn","düzin on","vowel-initial: the o- syncopates, leaving n as a bare coda"], ["dürjaz","düzin jāz","j- onset; the long ā shortens under the loss of its own stress"]]; -const DUNA="düzin", GROSO="jūz"; +const DUNA="düzin"; /* THE LADDER IS A MAP. Small numbers are home; each order of magnitude was picked up one stage further out along the road, at the moment the trade needed a number that large — and lexicalized on arrival as a power of TWELVE rather than of ten. Baltic counting-house → the Mediterranean and the Alpine passes → the length of the silk road. You can read the empire's reach off its own numerals. Each was digested by the same phonology that later fuses them. */ -const MAG={ 2:["jūz","12² · a gross — the counting-house at home"], - 3:["bin","12³ · the road east out of the Black Sea"], - 4:["tūm","12⁴ · the caravan reckoning of the steppe stages"], - 5:["laxô","12⁵ · the far markets, where the road turns south"], - 6:["kōdī","12⁶ · the end of the road, where it meets the sea"] }; -const FUSE={ "4+3":["tumbôn","tūm bin → tūmbin (juncture) → tūmbôn (i reduces to ô) → tumbôn (ū shortens)"], - "5+4":["laxtum","laxô tūm → laxôtūm → laxtūm (medial -ô- syncopates) → laxtum (ū shortens)"], - "6+5":["kōlax","kōdī laxô → kōdīlaxô → kōdlaxô (-ī- syncopates) → kōllaxô (/dl/ assimilates) → kōlaxô (degemination) → kōlax (final -ô apocopates)"] }; +const MAG={ 2:["çenāj","12² · Adriatic — Venetian centinaio, a hundred-count. çentināj → çentnāj (unstressed -i- syncopates) → çenāj (the /ntn/ cluster sheds its stop)"], + 3:["tüsaç","12³ · Eastern Corridor — Slavic tysjača. tüsjača → tüsjaç (final -a apocopates) → tüsaç (the glide -j- is absorbed)"], + 4:["mürās","12⁴ · Black Sea — Greek myriás, the myriad. müriās → mürās (unstressed -i- syncopates before the long vowel)"], + 5:["laxô","12⁵ · Silk Road — Persian lakh. The retroflex/aspirate lands on Nelôxi x [ʃ]; -ô is supplied as the native final"], + 6:["krōr","12⁶ · Red Sea — Persian kurūr, the far-trade great number. kurūr → krūr (unstressed u- syncopates) → krōr (ū lowers to ō under stress)"] }; +/* Adjacent magnitudes do not stand as separate words — they erode and fuse into + one opaque brick. Keyed "higher+lower", both with coefficient one. */ +const FUSE={ "4+3":["murastüs","mürās tüsaç → mürāstüsaç (juncture) → mürāstüs (the second root is clipped of its final syllable, as düzin → düz-) → murastüs (ā shortens, having lost the word's stress peak)"], + "5+4":["laxmur","laxô mürās → laxômürās (juncture) → laxmürās (medial -ô- syncopates) → laxmur (the final -ās is clipped away)"], + "6+5":["krōlax","krōr laxô → krōrlaxô (juncture) → krōllaxô (/rl/ assimilates) → krōlaxô (degemination) → krōlax (final -ô apocopates)"] }; /* The Turkish tens re-pointed from ten to twelve. They are already OPAQUE — jirmī, otūz, kôrk, ellī are not derivable from ikī, üç, dört, bex — so the dozens come out as single unglued words for free. @@ -335,7 +337,7 @@ function fold(s){ .replace(/ō/g,"o").replace(/ū/g,"u").replace(/ñ/g,"n").replace(/ç/g,"c") .replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(/õ/g,"o"); } -const UNITW={ [fold(DUNA)]:12, [fold(GROSO)]:144 }; +const UNITW={ [fold(DUNA)]:12 }; const MAGW={}; Object.keys(MAG).forEach(k=>MAGW[fold(MAG[k][0])]=Math.pow(12,+k)); const FUSEW={}; Object.keys(FUSE).forEach(k=>{ const [hi,lo]=k.split("+").map(Number); @@ -623,10 +625,10 @@ $("q").addEventListener("input",draw); /* ── self-check: the canon examples must come out exactly as written ───────── */ (function(){ - const MUST=[[0,"sôfôr"],[11,"jāz"],[12,"düzin"],[13,"dürber"],[14,"dürkī"], - [22,"dürn"],[24,"jirmī"],[41,"otūz bex"],[120,"langhunt"],[132,"jāzlôk"], - [144,"jūz"],[157,"jūz dürber"],[1728,"bin"],[20736,"tūm"],[248832,"laxô"], - [Math.pow(12,6),"kōdī"],[22464,"tumbôn"],[269568,"laxtum"],[3234816,"kōlax"]]; + const MUST=[[0,"sôfôr"],[11,"jāz"],[12,"düzin"],[13,"dürber"],[22,"dürn"], + [24,"jirmī"],[120,"langhunt"],[132,"jāzlôk"],[144,"çenāj"],[1728,"tüsaç"], + [20736,"mürās"],[248832,"laxô"],[Math.pow(12,6),"krōr"], + [22464,"murastüs"],[269568,"laxmur"],[3234816,"krōlax"]]; const bad=MUST.filter(([n,w])=>cardinal(n)!==w) .map(([n,w])=>`${n}: got "${cardinal(n)}", canon "${w}"`); /* every value must also read back to itself */