Typst Rewrite part the third

This commit is contained in:
2026-01-21 09:10:57 +01:00
parent 59d80ac5b5
commit ee47244bc2
3 changed files with 308 additions and 176 deletions

View File

@ -3,12 +3,12 @@
#import "/templates/utils/lang-mos.typ": *
#let high = html.span.with(class: "high")
#show: conf.with(page-title: "Mosici")
%lang %mos
#set heading(numbering: "1.")
%lang %mos %langauge-documentation
#set heading(numbering: "IA1a")
#let low = html.span.with(class: "low")
#let gloss-opts = (
txt-style: sn,
translation-style: low
translation-style: low,
)
#let g = gloss.with(..gloss-opts)
#let ex = example.with(..gloss-opts)
@ -134,9 +134,12 @@ called the #sn[] 〈sitrapaóha〉.
== Nouns <morpho-nouns>
=== Number <morpho-nouns-number>
Number is marked by reduplicating the last orthographic vowel of the root without the sitrapaóha #low[(see following table)]. In most cases the pronunciation of the plural isn't directly derivable from the pronunciation of the singular.
Number is marked by reduplicating the last orthographic vowel of the root without the sitrapaóha #low[(see following
table)]. In most cases the pronunciation of the plural isn't directly derivable from the pronunciation of the
singular.
#table(columns: 2,
#table(
columns: 2,
[*Singular*], [*Plural*],
sn[], sn[],
sn[], sn[],
@ -150,29 +153,29 @@ Number is marked by reduplicating the last orthographic vowel of the root withou
=== Cases <morpho-nouns-cases>
Nouns are also marked for case. There are 5 simple cases --- agent, patient,
genitive, dative and ablative --- and 2 compound cases --- spatial and temporal
locative.
Nouns are also marked for case. There are 5 simple cases --- agent, patient, genitive, dative and ablative --- and 2
compound cases --- spatial and temporal locative.
They are 7 patterns for the simple cases based on the the coda consonant(s) of
the agent form: the concatenative pattern, and the 6 substitutive patterns
(#sn[], #sn[], #sn[], #sn[], #sn[], #sn[])
They are 7 patterns for the simple cases based on the the coda consonant(s) of the agent form: the concatenative
pattern, and the 6 substitutive patterns (#sn[], #sn[], #sn[], #sn[], #sn[], #sn[])
#table(
columns: 8, align: center,
columns: 8,
align: center,
[], [*C*], [*Sub* #sn[]], [*Sub* #sn[]], [*Sub* #sn[]], [*Sub* #sn[]], [*Sub* #sn[]], [*Sub* #sn[]],
[*Agent*], [], sn[], sn[], sn[], sn[], sn[], sn[],
[*Patient*], table.cell(colspan: 7, sn[]),
[*Genitive*], table.cell(colspan: 7, sn[]),
[*Dative*], table.cell(colspan: 2, sn[]), sn[], sn[], sn[],
[*Dative*], table.cell(colspan: 2, sn[]), sn[], sn[], sn[],
sn[], sn[],
[*Ablative*], table.cell(colspan: 3, sn[]), table.cell(colspan: 2, sn[]),
table.cell(colspan: 2, sn[])
table.cell(colspan: 2, sn[]),
)
==== Agent <case-agent>
The Agent case #low(sc[age]) indicates the agent of a transitive clause, or the subject of an active intransitive clause.
The Agent case #low(sc[age]) indicates the agent of a transitive clause, or the subject of an active intransitive
clause.
#ex(
caption: [Agent case in an transitive clause],
@ -181,7 +184,7 @@ The Agent case #low(sc[age]) indicates the agent of a transitive clause, or the
phono: (bl + high[ʟɔɐ̯nɛ], [ɛ̃ð], [eʎɔʎeː] + br),
morphemes: (high[Loarne.#sc[age]], sc[dem.pat], [say.#sc[pst.3sa]]),
translation: [#high[Loarne] said that],
lbl: "ex-case-age-trans"
lbl: "ex-case-age-trans",
)
#ex(
caption: [Agent case in an active intransitve clause],
@ -190,21 +193,23 @@ The Agent case #low(sc[age]) indicates the agent of a transitive clause, or the
phono: (bl + high[ʟɔɐ̯nɛ], [e], high[mazɛ̃ẅ], [vjõʀøɐ̯] + br),
morphemes: (high[Loarne.#sc[age]], [and], high[Mazealn.#sc[age]], [eat.#sc[fut.3pa]]),
translation: [#high[Loarne] and #high[Mazealn] will eat],
lbl: "ex-case-age-intrans"
lbl: "ex-case-age-intrans",
)
==== Patient <case-patient>
The Patient case #low(sc[pat]) indicates the patient of a transitive clause, or the subject of a stative intransitive clause.
The Patient case #low(sc[pat]) indicates the patient of a transitive clause, or the subject of a stative intransitive
clause.
#ex(
caption: [Patient case in a transitive clause#footnote[Note that while the pronoun is dropped thanks to the verb conjugation, but the clause is still transitive]<fn-pat-trans>],
caption: [Patient case in a transitive clause#footnote[Note that while the pronoun is dropped thanks to the verb
conjugation, but the clause is still transitive]<fn-pat-trans>],
txt: [#high[] ],
translit: (high[nriiht], [vionreef.]),
phono: (bl + high[nʁiːθ], [vjõʀiɸ] + br),
morphemes: (high[grain#sc[.pl.pat]], [eat#sc[.prs.1s]]),
translation: [I eat #high[grains]],
lbl: "ex-case-pat-trans"
lbl: "ex-case-pat-trans",
)
#ex(
@ -214,12 +219,13 @@ The Patient case #low(sc[pat]) indicates the patient of a transitive clause, or
phono: (bl + high[ʀɛ̃ð], [ytas] + br),
morphemes: (high[house#sc[.pat]], [be\_tall#sc[gno.3si]]),
translation: [#high[The house] is tall],
lbl: "ex-case-pat-intrans"
lbl: "ex-case-pat-intrans",
)
==== Genitive <case-genitive>
The genitive case #low(sc[gen]) indicates poessesion or qualification. Note that in the case of qualification, the formation of a compound is also possible. Note: Compounding is not subject to coalescence.
The genitive case #low(sc[gen]) indicates poessesion or qualification. Note that in the case of qualification, the
formation of a compound is also possible. Note: Compounding is not subject to coalescence.
#ex(
caption: [Possessive genitive case],
@ -228,7 +234,7 @@ The genitive case #low(sc[gen]) indicates poessesion or qualification. Note that
phono: (bl + high[eẅɣ], [ʀɛ̃] + br),
morphemes: (high(sc[1s.gen]), [house#sc[.age]]),
translation: [#high[my] house],
lbl: "ex-case-gen-poss"
lbl: "ex-case-gen-poss",
)
#ex(
caption: [Qualificative genitive case],
@ -237,7 +243,7 @@ The genitive case #low(sc[gen]) indicates poessesion or qualification. Note that
phono: (bl + high[øːx], [esovɛ] + br),
morphemes: (high[fiction.#sc[gen]], [job#sc[.age]]),
translation: [a #high[fictional] job],
lbl: "ex-case-gen-qual"
lbl: "ex-case-gen-qual",
)
#ex(
@ -247,12 +253,14 @@ The genitive case #low(sc[gen]) indicates poessesion or qualification. Note that
phono: (bl + [øː-], [esovɛ] + br),
morphemes: ([fiction-], [job#sc[.age]]),
translation: [a fictional job],
lbl: "ex-case-gen-compound"
lbl: "ex-case-gen-compound",
)
==== Dative <case-dative>
The dative case #low(sc[dat]) indicates the beneficiary of a ditransitive verbs, as well as indicating a direction faced. Note hover that it isn't used with verbs of movement towards something, for those use the patient case (see @case-patient) instead, the dative instead indicates the means of displacement.
The dative case #low(sc[dat]) indicates the beneficiary of a ditransitive verbs, as well as indicating a direction
faced. Note hover that it isn't used with verbs of movement towards something, for those use the patient case (see
@case-patient) instead, the dative instead indicates the means of displacement.
#ex(
caption: [Dative in ditransitive clauses],
txt: [#high[]  ],
@ -260,7 +268,7 @@ The dative case #low(sc[dat]) indicates the beneficiary of a ditransitive verbs,
phono: (bl + high[ɛẅɕ], [ʀɛ̃ð], [ɕjɛːf] + br),
morphemes: (high(sc[2s.dat]), [house#sc[.pat]], [give.#sc[pres.1s]]),
translation: [I give #high[you] a house],
lbl: "ex-case-dat-ditrans"
lbl: "ex-case-dat-ditrans",
)
#ex(
caption: [Dative as means of displacement for verbs of movement towards],
@ -269,66 +277,83 @@ The dative case #low(sc[dat]) indicates the beneficiary of a ditransitive verbs,
phono: (bl + [ãɕaẅmosicɛθ], high[fydztsɛʟaɕ], [øsɛʎẽ] + br),
morphemes: ([#sc[ppn-]Chalmosique#sc[.dat]], high[train.#sc[dat]], [go#sc[.pst.2s]]),
translation: [You#ann[sg] went to Chalmosique #high[by train]],
lbl: "ex-case-dat-mot"
lbl: "ex-case-dat-mot",
)
#ex(
caption: [Dative as an allative substitute for other verbs],
txt: [#high[]   ],
translit: (high[an·cairniasialsi], [an·sialmosécet], [foítztselavia], [vilinef.]),
phono: (bl + high[ãkɛɐ̯nɛɕaẅɕ], [ãɕaẅmosicɛθ], [fydztsɛʟavja], [veʎẽnɛf] + br),
morphemes: (high[#sc[ppn-]Quernechal#sc[.dat]], [#sc[ppn-]Chalmosique#sc[.pat]], [train.#sc[abl]], [leave.#sc[prs.1s]]),
morphemes: (
high[#sc[ppn-]Quernechal#sc[.dat]],
[#sc[ppn-]Chalmosique#sc[.pat]],
[train.#sc[abl]],
[leave.#sc[prs.1s]],
),
translation: [I leave Chalmosique by train #high[to Quernechal].],
lbl: "ex-case-dat-all"
lbl: "ex-case-dat-all",
)
==== Ablative <case-abl>
The ablative case #low(sc[abl]) indicates the provenance of the action. It is also used as an instrumental, indicating the means by which the action is done.
For verbs of movement away from something, it only has it's instrumental meaning, the source is indicated by the patient case (see @case-patient). For verbs of movement towards something, the ablative doesn't have the instrumental meaning, for that role use the dative instead.
The ablative case #low(sc[abl]) indicates the provenance of the action. It is also used as an instrumental, indicating
the means by which the action is done. For verbs of movement away from something, it only has it's instrumental meaning,
the source is indicated by the patient case (see @case-patient). For verbs of movement towards something, the ablative
doesn't have the instrumental meaning, for that role use the dative instead.
#ex(caption: [Ablative case in an ablative meaning],
#ex(
caption: [Ablative case in an ablative meaning],
txt: [#high[]  ],
translit: (high[an·sialmosécevia], [nriiht], [vionreef.]),
phono: (bl + [ãɕaẅmosicɛvja], [nʁiːθ], [vjõʀiɸ] + br),
morphemes: (high[#sc[ppn]-Chalmosique.#sc[abl]], [grain#sc[.pl.pat]], [eat#sc[.prs.1s]]),
translation: [I eat grains #high[from Chalmosique]],
lbl: "ex-case-abl-abl"
lbl: "ex-case-abl-abl",
)
#ex(caption: [Ablative case as instrumental],
#ex(
caption: [Ablative case as instrumental],
txt: [#high[] ],
translit: (high[hoévenvia], [cirtív.]),
phono: (bl + high[yvɛ̃vja], [ceɐ̯div] + br),
morphemes: (high[pen#sc[.abl]], [write#sc[.past.1pe]]),
translation: [We#ann[excl] wrote #high[with a pen].],
lbl: "ex-case-abl-inst"
lbl: "ex-case-abl-inst",
)
==== Spatial Locative <case-spaloc>
The spatial locative cases #low(sc[sploc]) is used to indicate a spacial location. it is marked by expressing the noun in the genitive case, followed by the #sn[] ⟨la⟩ particle.
The spatial locative cases #low(sc[sploc]) is used to indicate a spacial location. it is marked by expressing the noun
in the genitive case, followed by the #sn[] ⟨la⟩ particle.
#ex(caption: [Spatial Locative],
#ex(
caption: [Spatial Locative],
txt: [ #high[ ]],
translit: ([il], high[an·vansterilc‿la] + [.]),
phono: (bl + [eẅ], [ãvãstɛʀeẅʝ ʟa] + br),
morphemes: (sc[1s.age], [#sc[ppn-]Vansterel#sc[.gen‿sploc]]),
translation: [We#ann[excl] wrote #high[with a pen].],
lbl: "ex-case-sploc"
lbl: "ex-case-sploc",
)
==== Temporal Locative <case-temploc>
There are four temporal locatives: past, present, future and gnomic #low(sc[tmploc.pst, tmploc.prs, tmploc.fut] + [ and ] + sc[tmploc.gno]). The past case (resp. present and future) is used, as its name indicates, to locate events that happened in the past (resp. present and future). The gnomic case locates events that are either generally happeneing, happening at an unknown point in time, or happening repeatedly.
The past case (resp. present, future, gnomic) are indicated by expressing the noun in the oblique followed by the particle #sn[] ⟨anip⟩ (resp #sn[] ⟨anep⟩, #sn[] ⟨anop⟩ and #sn[] ⟨anap⟩)
However the present case is rarely used outside of set phrases like #sn[ ] “today” or #sn[ ] “now”
There are four temporal locatives: past, present, future and gnomic #low(
sc[tmploc.pst, tmploc.prs, tmploc.fut] + [ and ] + sc[tmploc.gno],
). The past case (resp. present and future) is used, as its name indicates, to locate events that happened in the past
(resp. present and future). The gnomic case locates events that are either generally happeneing, happening at an unknown
point in time, or happening repeatedly. The past case (resp. present, future, gnomic) are indicated by expressing the
noun in the oblique followed by the particle #sn[] ⟨anip⟩ (resp #sn[] ⟨anep⟩, #sn[] ⟨anop⟩ and
#sn[] ⟨anap⟩) However the present case is rarely used outside of set phrases like #sn[ ] “today” or
#sn[ ] “now”
#ex(caption: [Present temporal locative],
#ex(
caption: [Present temporal locative],
txt: [#high[ ] ],
translit: (high[vint‿anep], [mareves.]),
phono: (bl + high[vẽð ãneɸ], [maʀɛvɛs] + br),
morphemes: (high[day.#sc[pat‿tmploc.prs]], [be_cold.#sc[prs.3si]]),
translation: [Its cold #high[today]],
lbl: "ex-case-tmploc-prs"
lbl: "ex-case-tmploc-prs",
)
#ex(
@ -338,7 +363,7 @@ However the present case is rarely used outside of set phrases like #sn[
phono: (bl + [eẅ], high[vjõʀipθ ãneɸ], [|], [ceɐ̯dẽ] + br),
morphemes: (sc[1s.act], high[eat#sc[.pst.pcp.pat‿tmploc.pst]], [|], [write] + sc[.pst.2s]),
translation: [#high[When] I #high[ate], you#ann[sg] wrote],
lbl: "ex-case-tmploc-pst"
lbl: "ex-case-tmploc-pst",
)
#ex(
caption: [Future temporal locative],
@ -347,7 +372,7 @@ However the present case is rarely used outside of set phrases like #sn[
phono: (bl + [eẅ], high[vjõʀøpθ ãnoɸ], [|], [ceɐ̯dõ] + br),
morphemes: (sc[1s.act], high[eat#sc[.fut.pcp.pat‿tmploc.fut]], [|], [write] + sc[.fut.2s]),
translation: [#high[When] I#high[ll eat], you#ann[sg]ll write],
lbl: "ex-case-tmploc-fut"
lbl: "ex-case-tmploc-fut",
)
#ex(
caption: [Gnomic temporal locative],
@ -356,11 +381,60 @@ However the present case is rarely used outside of set phrases like #sn[
phono: (bl + [eẅ], high[vjõʀɛpθ ãnaɸ], [|], [ceɐ̯dã] + br),
morphemes: (sc[1s.act], high[eat#sc[.gno.pcp.pat‿tmploc.gno]], [|], [write] + sc[.gno.2s]),
translation: [#high[Whenever] I #high[eat], you#ann[sg] write],
lbl: "ex-case-tmploc-gno"
lbl: "ex-case-tmploc-gno",
)
=== Proper noun clitic <morpho-ppn>
=== Proper noun clitic #sn[] <morpho-ppn>
Proper nouns that aren't personal names always take the proper noun clitic #low(sc[ppn]) #sn[] ⟨an·⟩
The affix #sn[] ⟨ni-⟩ --- which on proper nouns forms demonyms --- attaches to the front of the proper noun clitic:
#sn[] gives #sn[] and not \*#sn[] or \*#sn[]. Demonyms formed this way also
mark plural on the proper noun clitic: #sn[] pluralises to #sn[] and not \*#sn[].
== Pronouns <morpho-pronouns>
Mosici has a full set of personal, demonstrative and interrogative pronouns (see table at the end of this section). However, the use of personal pronouns is limited to situations where they are necessary.
The Agent and patient forms especially are often dropped in non-participal clauses. Indeed, a speaker would more often use the passive marking and avoid a pronoun altogether than use an patient form: Use #sn[ ] #low[(Loarne.#sc[age] #sc[pass.]eat#sc[.prs.3si])] rather than ?#sn[  ] #low[?(Loarne#sc[.age] #sc[3si.pat] eat#sc[.prs.3sa])] for "Loarne eats it."
#mos-pron(none)
== Verbs <morpho-verbs>
Verbs are mainly conjugated according to their tense and the grammatical person of the agent, unless marked with the
passive voice prefix #sn[] ⟨na-⟩, in which case, it agrees with the patient instead.
Orthographically the pattern is completely regular, however the vowel coalescence (see @sec-coalescence) causes the
pronunciation to be quite chaotic. The plural forms of past and present tense are always identical when spoken but
distinguished in writing.
Verbs are typically listed in their gnomic infinitive form. to derive the stem, remove the final #sn[]. Here is a
conjugation table for an hypothetical null-stemmed verb as a way to list the affixes#footnote[You may find those forms
verbatim in some older texts as a now defunct copula.] <fn-old-copula>
#mos-v("")
=== Aspect, mood ⁊ related nonsense <morpho-verbs-extra-tam>
If you need other moods or aspects than an unaspected indicative, there is a pletora of affixes you can stack on verbs
to specify them further, they all are interpreted as nested, coming away from the verb, and can be combined and stacked
for more specific meanings
Here is a (eventually but not yet) exhaustive list of such affixes: #low[(all of them are prefixes)]
==== Conditionals, irrealis <morpho-verbs-cond>
==== Imperfective, durative, iterative <morpho-verb-npfv>
==== Perfective, terminative <morpho-verb-pfv>
==== Desirative, Optative, Hortative <morpho-verb-opt>
==== Imperative <morpho-verb-imp>
==== Causatives <morpho-verb-cau>
==== Passive <morpho-verb-pas>
==== Negation <morpho-verb-neg>
The negation prefix is #sn[] ⟨ta-⟩. It negates whatever component of the verb is immediately following it.
==== Also on other parts of speach <morpho-verb-other>
While frowned upon in more formal texts, all of the above mood and aspect affixes can be added to nouns to great effect
in less formal or more poetic registers. Execption is of the negation affix which is considered perfectly acceptable in
all registers.

View File

@ -25,7 +25,7 @@
it.body
})
}
show regex("%[a-z0-9/]+"): it => tag(it.text.slice(1))
show regex("%[a-z0-9/-]+"): it => tag(it.text.slice(1))
show link-re: it => wl(..it.text.match(link-re).captures)
set table(stroke: none)
html.head({

View File

@ -8,7 +8,8 @@
- #base.wl("/worlds/Asteron/Mosici", [Standard], none) [#ipa]
]
#let mos-translit(s) = {
s .replace("", "a")
s
.replace("", "a")
.replace("", "á")
.replace("", "c")
.replace("", "e")
@ -35,13 +36,13 @@
}
#let mos-cit(t) = [#sn(t) #html.span(class: "low", mos-translit(t))]
#let mos-nstem(w) = {
if w.ends-with("") {(w.clusters().slice(0, -2).join(), "")}
else if w.ends-with("") {(w.clusters().slice(0, -2).join(), "")}
else if w.ends-with("") {(w.clusters().slice(0, -2).join(), "")}
else if w.ends-with("") {(w.clusters().slice(0, -2).join(), "")}
else if w.ends-with("") {(w.clusters().slice(0, -1).join(), "")}
else if w.ends-with("") {(w.clusters().slice(0, -1).join(), "")}
else {(w, "")}
if w.ends-with("") { (w.clusters().slice(0, -2).join(), "") } else if w.ends-with("") {
(w.clusters().slice(0, -2).join(), "")
} else if w.ends-with("") { (w.clusters().slice(0, -2).join(), "") } else if w.ends-with("") {
(w.clusters().slice(0, -2).join(), "")
} else if w.ends-with("") { (w.clusters().slice(0, -1).join(), "") } else if w.ends-with("") {
(w.clusters().slice(0, -1).join(), "")
} else { (w, "") }
}
#let mos-vstem(w) = w.clusters().slice(0, -1).join()
@ -66,10 +67,13 @@
let c(it) = [#base.s("nahan", it) \ #html.span(class: "low", mos-translit(it))]
html.details({
html.summary[ *Declension for* _#mos-cit(sg)_ #if pl != none and pl != false [*Irr. pl. stem* _#mos-cit(pl)_] else if pl == false [*(Uncountable)*]]
table(columns: if pl != false {3} else {2},
..if pl != false { ([],
base.sc[*sg*], base.sc[*pl*],)} else {()},
html.summary[
*Declension for* _#mos-cit(sg)_ #if pl != none and pl != false [*Irr. pl. stem* _#mos-cit(pl)_] else if (
pl == false
) [*(Uncountable)*]]
table(
columns: if pl != false { 3 } else { 2 },
..if pl != false { ([], base.sc[*sg*], base.sc[*pl*]) } else { () },
base.sc[*age*], c(sg), ..if pl != false { (c(pr),) } else { () },
base.sc[*pat*], c(ss + ""), ..if pl != false { (c(ps + ""),) } else { () },
base.sc[*gen*], c(ss + ""), ..if pl != false { (c(ps + ""),) } else { () },
@ -83,7 +87,8 @@
let c(it) = [#base.s("nahan", it) \ #html.span(class: "low", mos-translit(it))]
html.details({
html.summary[*Conjugation for* _#mos-cit(w)_]
table(columns: 5,
table(
columns: 5,
[], base.sc[*prs*], base.sc[*pst*], base.sc[*fut*], base.sc[*gno*],
base.sc[*1s*], c(s + ""), c(s + ""), c(s + ""), c(s + ""),
base.sc[*2s*], c(s + ""), c(s + ""), c(s + ""), c(s + ""),
@ -96,34 +101,87 @@
base.sc[*3pi*], c(s + ""), c(s + ""), c(s + ""), c(s + ""),
base.sc[*inf*], c(s + ""), c(s + ""), c(s + ""), c(s + ""),
base.sc[*pcp.sg*], c(s + ""), c(s + ""), c(s + ""), c(s + ""),
base.sc[*pcp.pl*], c(s+""), c(s+""), c(s+""), c(s+"")
base.sc[*pcp.pl*], c(s + ""), c(s + ""), c(s + ""), c(s + ""),
)
})
}
#let mos-pron(this) = {
let c(k, h: false) = if h and k != this [
#base.wl("dict/"+mos-translit(k), base.s("nahan", k), "mos") \ #html.span(class: "low", mos-translit(k))
#base.wl("/dict/" + mos-translit(k), base.s("nahan", k), "mos") \ #html.span(class: "low", mos-translit(k))
] else [
#base.s("nahan", k) \ #html.span(class: "low", mos-translit(k))
]
html.details({
html.summary[Mosici Pronouns]
table(columns: 6,
[], base.sc[*agt*], base.sc[*pat*], base.sc[*gen*], base.sc[*dat*], base.sc[*abl*],
table(
columns: 6,
[], base.sc[*age*], base.sc[*pat*], base.sc[*gen*], base.sc[*dat*], base.sc[*abl*],
base.sc[*1s*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*1p*], c( ""), c(""), c(""), c(""), c(""),
base.sc[*1p*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*2s*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*2p*], c( ""), c(""), c(""), c(""), c(""),
base.sc[*2p*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*3sa*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*3pa*], c( ""), c(""), c(""), c(""), c(""),
base.sc[*3pa*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*3si*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*3pi*], c( ""), c(""), c(""), c(""), c(""),
base.sc[*3pi*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*dem.sg*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*dem.pl*], c( ""), c(""), c(""), c(""), c(""),
base.sc[*dem.pl*], c(h: true, ""), c(""), c(""), c(""), c(""),
base.sc[*q*], c(h: true, ""), c(""), c(""), c(""), c(""),
)
})
}
#let nahan-numeral(n) = {
let res = ()
while n > 6 {
res = (..res, calc.rem-euclid(n, 6))
n = calc.div-euclid(n, 6)
}
if n != 0 { res = (..res, n) }
for _ in range(res.len()) {
for i in range(res.len() - 1, -1, step: -1) {
if (res.at(i) == 0 and i != res.len() - 1 and res.at(i + 1) != 0) {
res = (..res.slice(0, i), 6, res.at(i + 1) - 1, ..res.slice(i + 2))
}
}
}
sn(res.map(it => ("", "", "", "", "", "", "").at(it)).join(""))
}
#let num-nahan-sh(..nums) = nums.pos().map(nahan-numeral).join(sn[])
#let num-nahan-let(..nums) = {
let base13 = (
"0": 0,
"1": 1,
"2": 2,
"3": 3,
"4": 4,
"5": 5,
"6": 6,
"7": 7,
"8": 8,
"9": 9,
"a": 10,
"b": 11,
"c": 12,
)
let res = nums
.pos()
.map(it => str(it, base: 13))
.map(str.clusters)
.map(it => it.map(this => base13.at(this)))
.map(it => {
for _ in range(it.len()) {
for i in range(1, it.len()) {
if (it.at(i) == 0 and it.at(i - 1) != 0) {
it = (..it.slice(0, i - 1), it.at(i - 1) - 1, 13, ..it.slice(i + 1))
}
}
}
let letters = ("", "", "", "", "", "", "", "", "", "", "", "", "", "")
sn(it.map(this => letters.at(this)).join())
})
res.join(sn[])
}