1
0

typst 0.15 bundle rewrite

This commit is contained in:
2026-07-10 23:10:35 +02:00
parent c9298ed5ea
commit 4fddaf1c2f
171 changed files with 4712 additions and 2883 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@ bun.lock
# Generated output # Generated output
public_html public_html
.cache/

File diff suppressed because one or more lines are too long

View File

@ -1,12 +0,0 @@
window.onload = async () => {
let pages_data = await fetch("/index.json")
let pages = await pages_data.json()
let q = document.getElementsByClassName("random_page")
if (q.length > 0) {
q.item(0).addEventListener("click", async (ev) => {
let i = Math.floor(Math.random() * pages.length)
console.log(i, pages[i])
window.location.href = `/${pages[i].id}.html`
})
}
}

View File

@ -1,12 +0,0 @@
window.onload = async () => {
let pages_data = await fetch("/index.json")
let pages = await pages_data.json()
pages.sort((a, b) => a.id.localeCompare(b.id, "en"))
let l = document.getElementById("list")
if (l) {
l.innerHTML = ""
for (let page of pages) {
l.innerHTML += `<li><a href="/${page.id}.html">${page.id}: ${page.title}</a></li>`
}
}
}

View File

@ -1,47 +0,0 @@
window.addEventListener("load", async function (ev) {
let data_req = await fetch("/index.json")
let data = await data_req.json()
let fuse = new Fuse(data, {keys: [
"tags",
"id",
"title",
"body"
]
})
async function search(args) {
try {
let x = fuse.search(args)
return x
} catch {
return null
}
}
document.getElementById('searchbox').addEventListener("input",
async function(e) {
let results = document.getElementById('results') // .innerHTML = idx.search(e.target.value))
if (e.target.value == "") {
results.innerHTML = ""
} else {
Promise.race([
search(e.target.value),
new Promise((resolve, reject) => {
setTimeout(() => {
resolve(-1)
}, 3000);
})
]).then((r) => {
if (r == null) {
results.innerHTML = "<ul class='sresult'><li class='sresult'><strong>Search results</strong></li><li class='sresult'>An error occured</li></ul>"
} else if (r == -1) {
results.innerHTML = "<ul class='sresult'><li class='sresult'><strong>Search results</strong></li><li class='sresult'>Query timed out</li></ul>"
} else if (r.length == 0) {
results.innerHTML = "<ul class='sresult'><li class='sresult'><strong>Search results</strong></li><li class='sresult'>No result</li></ul>"
} else {
results.innerHTML = "<ul class='sresult'>" + r.map((it) => "<li class='sresult'>" + "<a href=\"/" + it.item.id + ".html\">" + it.item.title + "</a></li>").reduce((a, b) => a + b) + "</ul>"
}
})
}
}
)
})

167
build.ts
View File

@ -1,136 +1,45 @@
#!/usr/bin/env -S bun run #!/usr/bin/env -S bun run
import { $ } from "bun"; import { $ } from "bun";
import { readdir } from "node:fs/promises" import { readdir } from "node:fs/promises";
import { parseArgs } from "util"; function info(message: any) { console.log(`\x1b[1;44;97m INFO \x1b[0m ${message}`) }
import { JSDOM } from "jsdom"; function err(message: any) { console.log(`\x1b[1;41;97m ERROR \x1b[0m ${message}`) }
import { Dirent } from "node:fs"; info("Annwan’s wiki build script v3");
import { mkdir, stat } from "node:fs/promises"; info("Collecting pages...");
let page_files = await readdir("./pages", {withFileTypes: true, recursive: true});
let page_list = [];
enum LogLevel { for(let f of page_files) {
DEBUG = 0, if (f.isFile() && f.name.endsWith(".typ")) {
INFO = 1, page_list.push((f.parentPath + "/" + f.name).slice(6, -4));
WARN = 2,
ERROR = 3,
FATAL = 4
}
let {DEBUG, INFO, WARN, ERROR, FATAL} = LogLevel
let minLogLevel : LogLevel = INFO
function log(level: LogLevel, message: any) {
const p = Bun.argv[1]?.split("/").slice(-1)[0] ?? "build script";
switch (level) {
case DEBUG: if (minLogLevel <= DEBUG) console.log(`\x1b[90m${p}: \x1b[1;45;97m [DEBUG] \x1b[0m ${message}`); break;
case INFO: if (minLogLevel <= INFO) console.log(`\x1b[90m${p}: \x1b[1;44;97m [INFO] \x1b[0m ${message}`); break;
case WARN: if (minLogLevel <= WARN) console.log(`\x1b[90m${p}: \x1b[1;48;5;208;97m [WARN] \x1b[0m ${message}`); break;
case ERROR: if (minLogLevel <= ERROR) console.log(`\x1b[90m${p}: \x1b[1;41;97m [ERROR] \x1b[0m ${message}`); break;
case FATAL: /*Cannot suppress fatal*/console.log(`\x1b[90m${p}: \x1b[1;41;97m [FATAL] ${message} \x1b[0m`); process.exit(); break;
default: log(FATAL, `${level} isn't a valid log level`);
} }
} }
log(INFO, "Annwan’s wiki’s custom build script v2") info(`Found ${page_list.length} pages.`)
let pages = `pages=${JSON.stringify(page_list)}`
async function build_typst_file(file: Dirent) { info("Collecting assets...");
let path = file.parentPath + "/" + file.name let static_files = await readdir("static", {withFileTypes: true, recursive: true});
let dir = "public_html" + file.parentPath.slice(3) let static_list = [];
let slug = path.slice(4, -4) for(let f of static_files) {
let outfile = `public_html/${slug}.html` if (f.isFile()) { static_list.push((f.parentPath + "/" + f.name).slice(7)); }
log(INFO, `Compiling ${slug}`) }
await mkdir(dir, {recursive: true}) info(`Found ${static_list.length} static assets.`)
await $`typst c --features html --format html --root . ${path} ${outfile}` let assets = `static=${JSON.stringify(static_list)}`
log(DEBUG, `Checking if ${slug} needs post processing`) info("Collecting data files...")
let html = await Bun.file(outfile).text(); let data_files = await readdir("./data", {withFileTypes: true, recursive: true});
let heads = html.match(new RegExp("<head>.*?</head>", "sg")); let data_list = [];
if (heads != null && heads.length >= 2) { for (let f of data_files) {
log(DEBUG, `Postprocessing ${slug}`) if (f.isFile() && f.name.endsWith(".toml")) {
html = html.replace(heads[1], ""); data_list.push(f.parentPath + "/" + f.name.slice(0, -5));
html = html.replace(heads[0], heads[1]);
await Bun.write(outfile, html);
} }
log(INFO, `${slug} done`)
} }
info(`Found ${data_list.length} data files.`);
let data = `data=${JSON.stringify(data_list)}`;
async function build_all_typst() { info("Generating watch script...");
let files = await readdir("src", {withFileTypes: true, recursive: true}); await $`mkdir -p .cache`;
let promises: Promise<void>[] = []; let cmd = `#!/bin/sh\ntypst --color always w --features html,bundle --format bundle --root . root.typ public_html --input '${pages}' --input '${assets}' --input '${data}' --port 8080`;
for (let f of files) { await $`echo ${cmd} > .cache/watch.sh`;
if (f.isFile() && f.name.endsWith(".typ")) await $`chmod +x .cache/watch.sh`;
promises.push(build_typst_file(f)) info("Done.");
} info("Compiling typst bundle...");
await Promise.all(promises)
}
async function copy_assets() {
log(INFO, "Updating assets")
await $`rm -rf ${minLogLevel == DEBUG ? "-v" : ""} public_html/assets/`
await $`cp -r ${minLogLevel == DEBUG ? "-v" : ""} assets/ public_html/`
await $`cp ${minLogLevel == DEBUG ? "-v" : ""} public_html/assets/favicon.ico public_html/favicon.ico`
}
type IndexEntry = { id: string; title: string; body: string; tags: string;}
async function collect_data(f:string) : Promise<IndexEntry> {
let id = f.slice(12, -5)
log(INFO, `collecting metadata for ${id}`)
let dom = await JSDOM.fromFile(f)
log(DEBUG, `${id}: read`)
let things = dom.window.document.getElementsByTagName("main")
let body = ""
for (let thing of things) body += thing.textContent;
log(DEBUG, `${id}: body extracted`)
let title = dom.window.document.getElementById("search-title")?.getAttribute("content") ?? ""
log(DEBUG, `${id} title extracted: ${title}`)
let tags = dom.window.document.getElementById("search-tags")?.getAttribute("content") ?? ""
log(DEBUG, `${id}: tags extracted: ${tags}`)
return {id, title, body, tags}
}
async function gen_index() {
let files = await readdir("public_html", {withFileTypes: true, recursive: true})
log(INFO, "Generating the search index");
let promises : Promise<IndexEntry>[] = [];
for (let f of files) {
if (f.isFile() && f.name.endsWith(".html")) {
promises.push(collect_data(f.parentPath + "/" + f.name));
}
}
let data : IndexEntry[] = await Promise.all(promises)
log(INFO, `Writing index`)
await Bun.write("public_html/index.json", JSON.stringify(data), {mode: 0o644, createPath: true})
}
const args = parseArgs({
args: Bun.argv,
options: {
"build": {type: "boolean", short: "b"},
"assets": {type: "boolean", short: "a"},
"index": {short: "i", type: "boolean" },
"verbose": {short: "v", type: "string"},
"help": {type: "boolean", short: "h"}
},
allowPositionals: true
}).values
if (args.verbose) {
try { try {
minLogLevel = parseInt(args.verbose); await $`typst --color always c --features html,bundle --format bundle --root . root.typ public_html --input ${pages} --input ${assets} --input ${data}`;
} catch { } catch { err("something went wrong, see typst log above"); process.exit(); }
log(FATAL, `'${args.verbose}' isn't a number`); info("Done.");
}
}
if (args.help) {
log(INFO, `USAGE:`)
log(INFO, `\t${Bun.argv[1]} [-b|--build] [-a|--assets] [-i|--index] [-v ⟨n⟩|--verbose ⟨n⟩]`)
log(INFO, `\t${Bun.argv[1]} -h|--help`)
} else {
if (!args.build && !args.assets && !args.index) {
await build_all_typst()
await copy_assets()
await gen_index()
}
if (args.build) await build_all_typst();
if (args.assets) await copy_assets();
if (args.index) await gen_index();
log(INFO, "DONE");
}

77
data/mosici_dict.toml Normal file
View File

@ -0,0 +1,77 @@
[[words]]
l = ""
t = "ain"
i = "ɛ̃"
p = "p"
label = "ain-p"
d = "3rd person singular inanimate agent pronoun"
[[words.e]]
lang = "cln"
word = ""
[[words]]
l = ""
t = "ain"
i = "ɛ̃"
p = "n"
label = "ain-n"
d = "Thing, object"
[[words.e]]
lang = "cln"
word = ""
[[words]]
l = ""
t = "ainilapil"
i = "ɛ̃neʎapeɥ"
p = "n"
d = "#low[(Grammar)] noun, substantive"
[[words.e]]
lang = "msc"
label = "ain-n"
[[words.e]]
lang = "msc"
word = ""
[[words]]
l = ""
t = "ainilapiltee"
i = "ɛ̃neʎapeɥdi"
p = "n"
d = "Agent plural form of  #low[ainilapil]"
[[words]]
l = ""
t = "ala"
i = "aʟa"
p = "v"
d = "#low[(Archaic)] To do, perorm an action"
[[words.e]]
lang = "cln"
word = ""
[[words]]
l = ""
t = "cirtss"
i = "ceɐ̯ts"
p = "n"
d = """+ Writ, text
+ Document, book"""
[[words.e]]
lang="cln"
word = ""
[[words]]
l = ""
t = "contsse"
i = "qõtsɛ"
p = "n"
d = "Novelty, innovation"
[[words.e]]
lang="cln"
word=""
[[words]]
l = ""
t = "ila"
i = "eʎa"
p = "n"
d = "Language, speech"
[[words.e]]
lang = "cln"
word = ""

View File

@ -1,14 +0,0 @@
{
"name": "wiki-build-tools",
"private": true,
"devDependencies": {
},
"peerDependencies": {
"typescript": "^5"
},
"dependencies": {
"@types/jsdom": "^27.0.0",
"jsdom": "^27.4.0",
"@types/bun": "latest"
}
}

77
pages/index.typ Normal file
View File

@ -0,0 +1,77 @@
#import "/templates/article.typ": high
#let opts = (
title: "Index",
has-page-js: false,
has-page-css: false,
no-toc: true,
make-pdf: true,
)
#let doc(_) = [
Hi, welcome to my wiki-website-blog-thing.
Feel Free to look around.
= Other cool people and sites
#context if target() == "html" {
import html: *
div(class: "buttonbox", {
a(href: "https://dipndops.neocities.org/", target: "_blank", img(
src: "https://dipndops.neocities.org/dipdop_button.gif",
title: "dipdop hideout",
alt: "dipndops",
))
a(href: "https://khimatales.neocities.org/", target: "_blank", img(
src: "https://khimatales.neocities.org/FloralsCoolAwesomeNeoCitiesAffilateLink.gif",
title: "Khima Tales",
alt: "Khima Tales",
))
a(href: "https://yokokasquest.com/", target: "_blank", img(
src: "https://yokokasquest.com/wp-content/uploads/2026/01/yq-button.png",
title: "Yokoka's Quest - An Adventure Webcomic That Updates M/W/F!",
alt: "Yokoka's Quest",
))
a(href: "https://r534.cisumchronicles.com", target:"_blank", img(
src:"https://room534.cisumchronicles.com/images/layout/r534button.png",
title:"Room 534 - An Original Characters Archive",
alt:"Room 534"
))
a(href: "https://toyhou.se/katesleepybun", target: "_blank", img(
src: "https://f2.toyhou.se/file/f2-toyhou-se/characters/37336946?1769119669.png",
title: "katethesleepybun on ToyHouse",
alt: "katethesleepybun on ToyHouse",
))
a(href: "https://forums.cisumchronicles.com/viewtopic.php?t=19", target: "_blank", img(
src: "https://khimatales.neocities.org/CanYou.gif",
title: "The Execution of Talo [CYOA]",
alt: "The Execution of Talo [CYOA]",
))
a(href: "https://toyhou.se/DreamyPumpkins", target: "_blank", img(
src: "https://f2.toyhou.se/file/f2-toyhou-se/images/113846742_IaqYsOqwcaKAQz6.png",
title: "DreamyPumpkins on ToyHouse",
alt: "DreamyPumpkins on ToyHouse",
))
a(href: "https://end-mythos.neocities.org", target: "_blank", img(
src: "https://64.media.tumblr.com/284abf48960684f29c6d30334c93474c/212108410f12363b-41/s100x200/dc496daea04014c1226c16807dd33aa8ecb85b17.png",
title: "Mythos of Wind and Thunder",
alt: "Mythos of Wind and Thunder",
))
a(href: "https://khimatales.neocities.org/NolaFanclub", target: "_blank", img(
src: "https://khimatales.neocities.org/NolaFanclubButton.gif",
title: "Nola Fanclub",
alt: "Nola Fanclub",
))
heading(level: 3)[You want a button to here?]
a(href: "https://wiki.annwan.me/", target: "_blank", img(
src: "https://wiki.annwan.me/assets/webring-button.png",
title: "Annwan's Wiki",
alt: "Annwan's Wiki",
))
textarea(
readonly: true,
"<a href=\"https://wiki.annwan.me/\" target=\"_blank\"><img src=\"https://wiki.annwan.me/assets/webring-button.png\" title=\"Annwan's Wiki\" alt=\"Annwan's Wiki\" /></a>",
)
})
} else {high[This section only makes sense in a web format and was ommited from the PDF generation, it contains several links to friend’s websites]}
]

View File

@ -0,0 +1,338 @@
#import "/templates/article.typ": setup, gloss, low, high, dictionary, figure, ref
#let opts = (
title: "Mosici",
tags: "language",
make-pdf: true
)
#let doc(p) = [
#set heading(numbering: "1.")
#show: setup
*Mosici* (  [ãmoziciç eʎa]) is a Nielf languages spoken in the confederation of the eastern isles.
This page mostly treats of the Cairneshalese (of  / Cairneshal), the standard variety
= History
#low[[WIP]]
= Sound ⁊ Letters
== Basis of Phonology and Phonetics
Mosici has the phonemes described in #ref(p+"consonants") and #ref(p+"vowels").
#figure(
caption: [Mosici consonants],
table(columns: 5,
table.header[][Labial][Coronal][Palatal][Dorsal],
strong[Nasal], [m], [n], [], [],
strong[Plosive], [p], [t], [], [k],
strong[Fricative], [f v], [s z], [ʃ ʒ], [ʀ],
strong[Approximant], [w], [], [j], [ʟ],
),
label: p+"consonants",
)
#figure(
caption: [Mosici vowels],
table(columns: 4,
table.header(
table.cell(rowspan: 2)[],
table.cell(colspan: 2)[Front],
table.cell(rowspan: 2)[Back],
[Unrounded], [Rounded]
),
strong[Close], [i], [u], [y],
strong[Close-Mid], [e], [ø], [o],
strong[Open-Mid], [ɛ], [], [ɔ],
strong[Open], [a], [], []
),
label: p + "vowels"
)
The following pronounciation rules apply:
+ The dorsal approximant is delateralied and fronted (compared to what would imply rules 7-11) in coda position;
+ The dorsal trill is realised as the semivowel [ɐ̯] in coda position;
+ The dorsal trill is realised as the fricative [ʁ] in consonant clusters;
+ Nasal consonats nasalise immediately preceeding vowels;
+ Nasal consonants aren't pronounced in coda positions --- but nasalisation still happens;
+ Close nasalised vowels \*[ĩ ũ] are realised as near-close [ɪ̃ ʏ̃ ʊ̃];
+ The dorsal plosive and approximant are realised as palatal before /i y e j/;
+ The drosal plosive and approximant are realised as uvular before /o u w/;
+ The dorsal plosive and approximant are realised as palatal after /e i j/;
+ The dorsal plosive and approximant are realised as palatal in the codas of syllables with /e/ or /i/ as nuclei;
+ Otherwise the dorsal plosive and approximant are realised as velar;
+ Plosives are voiced when adjacent to phonemicaically voiced consoants
+ Plosives are realised as non-sibilant fricatives of same place of articulation world finaly, at the exception of /p/ which is realised as [h\] in those same environments;
+ A word-initial nasal-plosive or nasal-fricative cluster is realised as the prenasalised version of the plosive or fricative.
== Coalescence
Vowel coalescence is an historical sound change of mosici, the understanding of which is required to read the written standard of the language.
It affects vowels in hiatus, reducing them to single monophongs, sometimes separated by approximants.
Given that Late Classical Nielf --- in particular the insular varieties that give rise to Mosici --- had many such instances of hiatus, mosici spelling, can be at first glance irregular and unpredictable.
This sound change occured in Late Old Mosici, that is after the transition from distinctions in vowel length to distinctions in vowel quality (/a e i o oː/ #sym.arrow /a ɔ ɛ i e i o u/), and after the deletion of the central vowel /ə/ and the unvoiced dorsal fricative /x/ #sym.arrow /h/, but before the nasalisation of vowels before nasal consonants.
At this point in Mosici's evolution, the primary stress was located on the penultimate vowel of the word, with secondary stress on every other vowel from there.
The sound change proceeds in 4 steps:
+ For each vowel pair in hiatus /ˈV#sub[1];.V#sub[2]/, merge them as per #ref(p+"coal")
+ Recompute the positions of the stress according to the same pattern as above
+ Repeat from (1) 2 more times;
+ Merge any remaining /V#sub[1];.V#sub[2]/ pairs as per #ref(p+"coal").
#figure(caption: [Mosici vowel coalescence (values in IPA)],
table(
columns: 10,
table.header[V#sub[2]#sym.arrow\ V#sub[1]#sym.arrow.b][a][ɛ][ɔ][e][ø][o][i][y][u],
strong[a], [ɔ], [a], [ɔ], [ɛ], [ɛ], [ɔ], [e], [ø], [o],
strong[ɛ], [ɛ], [i], [ø], [i], [e], [ø], [i], [ø], [ø],
strong[ɔ], [ɔ], [ø], [ɔ], [ø], [ø], [o], [ø], [ø], [o],
strong[e], [ɛ], [i], [ø], [i], [e], [ø], [i], [ø], [ø],
strong[ø], [ø], [e], [ø], [e], [y], [o], [y], [y], [y],
strong[o], [ɔ], [ø], [o], [ø], [ø], [u], [ø], [ø], [u],
strong[i], [ja], [jɛ], [jɔ], [je], [jø], [jo], [i], [jy], [ju],
strong[a], [ø], [ø], [ø], [ø], [y], [ø], [i], [i], [y],
strong[u], [wa], [wɛ], [wɔ], [we], [wø], [wo], [wi], [y], [u],
),
label: p+"coal"
)
== The Naran Alphabet
Mosici is written in the naran alphabet (sometimes also called "poliah alphabet", from the frist few letters), which, in Mosici, is considered to have the letters defined in #ref(p+"letters")
#figure(
caption: [Naran alphabet for Mosici],
table(
columns: 5,
table.header[Letter][Transcription][Value (IPA)][Letter name][Numeric value],
[], [p], [/p/], [ · paí · [pe]], [1],
[], [o], [/o/], [ · óss · [us]], [2],
[], [l], [/ʟ/], [ · lán · [ʟɔ̃]], [3],
[], [i], [/e/, /j/], [ · írne · [iɐ̯nɛ]], [4],
[], [a], [/a/], [ · ánp · [ɔ̃h]], [5],
[], [h], [-], [ · hapffe · [apfɛ]], [6 (0 with the diacritic)],
[], [r], [/ʀ/], [ \ fastesiec hapffe\ [vazdeʒɛx apfɛ]], [used in fraction notation],
[], [c], [/k/], [ · cal · [kaẅ]], [36 = 6#super[2]],
[], [n], [/n/], [ · naol · [noẅ]], [216 = 6#super[3]],
[], [e], [/ɛ/], [ · ésstal · [istaẅ]], [1~296 = 6#super[4]],
[], [s], [/z/], [ · ssipal · [ʃpaẅ]], [7~776 = 6#super[5]],
[], [f], [/v/], [ · fasoh · [vazo]], [46~656 = 6#super[6]],
[], [m], [/m/], [ · milá · [meʎo]], [279~936 = 6#super[7]],
[], [t], [/t/], [ · tecio · [teɟjo]], [1~679~616 = 6#super[8]],
),
label: p+"letters"
)
Hapffe ⟨⟩ is completely silent, and is transparent to vowel coalescence and nasalisation, but acts as a consonant for all other aspects targetting adjacent vowels.
Fastesiec hapffe ⟨⟩ is an Early Middle Mosici innovation to indicate velar fricative that had voiced in old Mosici and thus were still pronounced (then ɣ, now ʀ in Standard Modern Mosici) and distingush them from the now-silent hapffe. A similar reform was proposed for ssipal and fasoh, with the letters fastesiec ssipal ⟨⟩ and fastesiec fasoh ⟨⟩, but didn't encounter as wide a success and didn't persist to the modern language. In the modern language, unvoiced s and f are written with a doubling of ssipal and fasoh respectively.
The Naran alphabet as it is used in Mosici also has a singular diacritic, the sitrapaóha ( [ʒdʀapawa]), that changes the quality of vowels. Historically it used to indicate the long vowels of Classical Nielf. It is commonly transcribed with an accute in latin: ó /u/, í /i/, á /ɔ/ et é /i/.
There are also multigraph to write the palatal fricatives:  ssi /ʃ/,  si /ʒ/.
Finally Mosici uses a small set of punctuation mark: the short pause ⟨⟩ the sentence break ⟨⟩, the joiner ⟨⟩ and the brevity mark ⟨⟩. They are usually transliterated with a comma, a period, an interpunct or an hyphen, and an apostrophe respectively.
= Morphology
== Nouns
=== Number
The plural was, in Old Mosici, marked by the reduplication of the last vowel of the noun, without length contrasyt. Orthographically, that is still the case, where the plural is marked by reduplicating the last orthographic vowel of the noun. However, it is generally not possible to derive the pronounciation of the plural of a noun, solely from it’s singular form, nor is the reverse
#figure(
caption: [Plural patterns],
table(
columns: 9,
strong[Singlular], [], [], [], [], [], [], [], [],
strong[Plural], [], [], [], [], [], [], [], [],
)
)
=== Cases
Nouns are declined according to 7 gramatical cases: 5 simple cases --- agent, patient, genitive, dative, ablative --- and 2 compound cases --- spatial and temporal locatives. There are 7 declension patterns based on the coda of the agent form: a concatentaive pattern (∅) and 6 subsitutive patterns, (, , , , , and ).
Mosici inflects according to a split-active morpho-syntactic system: Transitive agents are inflected like agent-like intransitive subjects, and transitive patients are inflected like patient-like intransitive subjects. Whether an intransitive clause takes an agent form or a patient form depends on the verb, divided along somewhat semantic lines
#figure(caption: [Mosici eclension patterns],
table(columns: 8,
table.header[][∅][][][][][][],
[Agent], [],[],[],[],[],[],[],
[Patient], table.cell(colspan: 7)[],
[Genitive], table.cell(colspan: 7)[],
[Agent], [],[],[],[],[],[],[],
[Dative],
table.cell(colspan: 3)[],
table.cell(colspan: 2)[],
table.cell(colspan: 2)[]
)
)
==== Agent
The agent case #low[AGE] indicates the agent of a transitive clause, or the agent-like subject of an intransitive clause.
#gloss(
[Agent case in a transitive clause],
txt: [#high[]  ],
translit: [#high[loarne] mpat ilaalih],
split: (high[loarne], high[-∅], [mpa], [-t], [ilaal], [-ih]),
phono: (high[\[ʟɔɐ̯nɛ], high[-], [ⁿba], [θ], [eʎɔʎ], [e\]]),
morphemes: (high[Loarne], high[-AGE], [DEM], [-PAT], [say], [-PST.3SG.AN]),
translation: [#high[Loarne] said it.]
)
#gloss(
[Agent calse in an intransitive clause],
txt: [#high[] #high[] ],
translit: [#high[loarne] i #high[masealan] fionreór],
split: (high[loarne], high[-∅], [i], high[masealan], high[-∅], [fionre], [-ór]),
phono: (high[\[ʟɔɐ̯nɛ], high[-], [e], high[mazɛʟã], high[-], [vjõʀ], [\\øɐ̯\]]),
morphemes: (high[loarne], high[-AGE], [and], high[masealan], high[-AGE], [eat], [-FUT.3PL.AN],),
translation: [#high[Loarne] and #high[Masealan] will eat.]
)
==== Patient
The patient case #low[PAT] indicates the patient of a transitive clause, or the patient-like subject of an intransitive clause.
#gloss(
[Patient case in a transitive clause],
txt: [#high[] ],
translit: [#high[nriiht] fionreeff.],
split: (high[nriihs], high[\\t], [fionre], [-eff]),
phono: (high[\[ⁿʀi], high[\\θ], [vjõʀ], [\\if\]]),
morphemes: (high[seed.PL], high[\\PAT], [eat], [-PRES.1SG]),
translation: [I eat #high[seeds]\ #low[Despite the pronoun beeing omitted, this sentence is indeed transitive.]]
)
#gloss(
[Patient case in an intransitive clause],
txt: [#high[] ],
translit: [#high[rent] oítass.],
split: (high[ren], high[-t], [oít], [-ass]),
phono: (high[\[ʀẽ], high[ð], [yt], [-as\]]),
morphemes: (high[house], high[-PAT], [be_tall], [-GNO.3SG]),
translation: [The #high[house] is tall.],
)
==== Genitive
The genitive case indicates that the marked noun qualifies, or is inalienably the possesor of, an other noun. Note that in a qualifying, use, the creation of a compound noun is also possible. The two parts of a compound noun are usually not subject to vowel coalescence.
#gloss(
[Qualifying genitive case],
txt: [#high[] ],
translit: [#high[áhioc] issofe.],
split: (high[áhio], high[-c], [issofe], [-∅]),
phono: (high[\[ø], [x], [esovɛ], []),
morphemes: (high[falseness], high[-GEN], [job], [AGE]),
translation: [A #high[fake] job]
)
#gloss(
[Compound noun],
txt: [],
translit: [áhioissofe],
split: ([áhio-], [issofe]),
phono: ([\[ø], [esovɛ\]]),
morphemes: ([falseness], [job]),
translation: [A fake job]
)
#gloss(
[Inalienable possessive genitive case],
txt: [#high[] ],
translit: [#high[loarnec] ntinal],
split: (high[loarne], high[-c], [ntinal], [-∅]),
phono: (high[\[ʟɔɐ̯nɛ], high[x], [ⁿdẽnaẅ], [\]]),
morphemes: (high[Loarne], high[-GEN], [hand], [-AGE]),
translation: [#high[Loarne’s] hand]
)
==== Dative
The dative #low[DAT] indicates the beneficiary of a ditransitive verb, as well as the direction of an action. Note however that it is not used as the destination of the verbs of movements towards somewhere, which use the patient case for that role. For said verbs, the dative indicates the means of the movement.
#gloss(
[Dative in a ditransitive clause],
txt: [#high[]  ],
translit: [#high[elssi] rent ssiehíheff.],
split: (high[el], high[-ssi], [ren], [-t], [ssiehíh], [-eff]),
phono: (high[\[ɛẅ], high[ʃ], [ʀɛ̃], [-ð], [ʃɛj], [-ɛf]),
morphemes: (high[2SG], high[-DAT], [house], [-PAT], [give], [-PRES.1SG]),
translation: [I gave #high[you] a house.]
)
#gloss([Dative as means of movement of a verb of motion towards something],
txt: [ #high[] ],
translit: [an·ssialmosécet #high[ffoítstsselassi] oissailin.],
split: ([an·], [ssialmoséce], [-t], high[ffoítstssela], high[-ssi], [oissail], [-in]),
phono: ([\[ã], [ʃaẅmozicɛ],[-θ],high[fydztsɛʟa],high[-ʃ], [øsɛʎ], [-ẽ\]]),
morphemes: ([PPN·],[Chalmosique],[PAT],high[train],high[-DAT],[go],[-PAST.2SG]),
translation: [You went to Chalmosique #high[by train].],
)
==== Ablative
The ablative #low[ABL] indicates a source or a provenence. It is also used as an instrumental, indicating the means by which the action is realised. For verbs of movement from somewhere it only ever has that instrumental meaning, as the source is expressed in the patient case.
#gloss([Ablative as a source],
txt: [#high[]  ],
translit: [#high[an·ssialmosécefia] nriiht fionreeff],
split: (high[an·],high[ssialmoséce],high[-fia],[nriihs],[\\t],[fionre],[-eff]),
phono: (high[\[ã],high[ʃaẅmozicɛ],high[-vja],[ⁿʀi],[\\θ],[vjonʀ],[\\if\]]),
morphemes: (high[PPN·],high[Chalmosique],high[-ABL],[seed.PL],[\\PAT],[eat],[-PRES.1SG]),
translation: [I eat seeds #high[from Chalmosique]]
)
#gloss([Ablative as instrumental],
txt: [#high[] ],
translit: [#high[hoéfeenfia] cirtalíf.],
split: (high[hoéfeen], high[-fia], [cirtal], [-íf]),
phono: (high[\[yvɪ̃], high[-vja], [ceɐ̯daʎ], [-iv]),
morphemes: (high[pen.PL], high[-ABL], [write], [-PAST.1PL.EXCL]),
translation: [We#sub(low[EXCL]) wrote #high[with pens].]
)
==== Spatial Locative
The spatial locative #low[SPLOC] is used to indicate a position in space. It is marked by expressing the noun in the genitive, followed by the particle  ⟨la⟩. It is however pronounced as if the particle was part of the word itself: it blocks the lenition of, and voices, the final of the genitive marking.
#gloss(
[Spatial locative],
txt: [ #high[ ]],
translit: [il #high[an·cairniassialc la]],
split: ([il],high[an·], high[cairniassial], high[-c la]),
phono: ([\[], high[ã], high[kɛɐ̯nɛʃaẅ], high[-gʟa\]]),
morphemes: ([1SG.AGE], high[PPN·], high[Cairneshal], high[-SPLOC]),
translation: [I am #high[in Cairneshal]\ #low[and not \*\[ ãkɛɐ̯nɛʃaẅɣ ʟa\]]],
)
==== Temporal Locative
=== Proper noun enclitic
== Pronouns
== Verbs
=== Aspect, mood ⁊ related nonsense
==== Conditional
==== Imperfective, durative, iterative, Inchoative
==== Perfective, terminative
==== Desiderative, Necessitatives, Optative, Hortative
==== Imperative
==== Causatives
==== Passive
==== Negation
==== Also on other parts of speech
== Numerals
= Syntax
#dictionary(p, "/data/mosici_dict.toml", sortby: (a, b) => {
let alphabet = (
p: "a", o: "b", ó: "b", l: "c", i: "d", í: "d", a: "e", á: "e", h: "f",
r: "g", c: "h", n: "i", e: "j", é: "j", s: "k", f: "l", m: "m", t: "n"
)
let aa = a.t.clusters().map(it => alphabet.at(it, default: "")).join()
let bb = b.t.clusters().map(it => alphabet.at(it, default: "")).join()
aa <= bb
},
htmlinputclasses: ("scr-nahan",))
]

134
root.typ Normal file
View File

@ -0,0 +1,134 @@
#let pages = json(bytes(sys.inputs.at("pages", default: bytes("[]"))))
#let static = json(bytes(sys.inputs.at("static", default: bytes("[]"))))
#let data = json(bytes(sys.inputs.at("data", default: bytes("[]"))))
#let site-name = "Annwan’s Wiki"
#let site-root = "https://wiki.annwan.me/"
#for page in pages [
#let page-slug = page.replace("/", "-")
#import "pages/" + page + ".typ": opts, doc
#metadata((path: page, tags: opts.at("tags", default: ""), title: opts.title)) <page>
#document(page + ".html", title: site-name + "—" + opts.title)[
#show raw.where(block: true): it => {
html.pre(html.code(class:"language-" + it.lang, it.text))
}
#show raw.where(block: false): it => {
html.code(class:"language-" + it.lang, it.text)
}
#context {
import html: *
html(
head({
meta(charset: "utf-8")
meta(name: "viewport", content: "width=device-width, initial-scale=1")
meta(name: "authors", content: opts.at("authors", default: ("Annwan",)).join(", "))
link(rel: "stylesheet", href: "/assets/style/style.css")
link(rel: "stylesheet", href: "/assets/style/highlight.css")
script(src: "/assets/scripts/highlight.js")
script(`hljs.highlightAll();`.text)
script(src: "/assets/scripts/common.js")
if opts.at("has-page-js", default: false) {
script(src: "/static/scripts/"+page+".js")
}
title(site-name + "—" + opts.title)
})
+ body({
header({
h1(a(href: "/", site-name))
nav({
input(id: "searchbox", type: "text", placeholder: "Search...")
})
})
div(id: "results")[]
div(id: "main-body", {
[#metadata(none) #std.label(page-slug + "--start")]
counter(heading).update((0,))
counter(std.figure.where(kind: table)).update((0,))
counter(std.figure.where(kind: image)).update((0,))
counter(std.figure.where(kind: raw)).update((0,))
counter(std.figure.where(kind: "gloss")).update((0,))
main({
h1(opts.title);
doc(page-slug + "--")
})
[#metadata(none) #std.label(page-slug + "--end")]
if not opts.at("no-toc", default: false) {
aside(outline(
target: heading.where(level: 1)
.or(heading.where(level: 2))
.or(heading.where(level: 3))
.or(heading.where(level: 4))
.or(heading.where(level: 5))
.after(std.label(page-slug + "--start"))
.before(std.label(page-slug + "--end"))
))}
})
if not opts.at("no-foot", default: false) {
footer[
#import sym: *
#if opts.at("make-pdf", default: false) {
std.link(std.label("pdf-" + page-slug))[Download this page as PDF]
}
#opts.title on #site-name #copyright Annwan. This work is
licensed under the terms of the #std.link(
"https://creativecommons.org/licenses/by-sa/4.0/",
)[CC BY-SA 4.0 #cc #cc.by #cc.sa] license.
Source code available on #std.link(
"https://git.annwan.me/worldbuilding/wiki"
)[my gitea instance].
]
}
})
)}
] #label(page)
#if opts.at("make-pdf", default: false) [
#document("pdf/" + page + ".pdf", title: opts.title)[
#set text(font: "Iosevka Aile", features: (cv47: 10), hyphenate: false);
#set par(justify: true)
#show table: set par(justify: false)
#show raw: set text(font: "Iosevka Slab", size: 1em / 0.8)
This document is the PDF version of
#link(site-root + page + ".html", raw(page)) on #site-name as of
#datetime.today().display("[year]-[month]-[day]").
#show figure.where(kind: table): set figure(placement: bottom )
#line(length: 100%, stroke: gray)
#title()
#metadata(none) #label(page-slug + "--startpdf")
#counter(figure.where(kind: table)).update((0,))
#counter(figure.where(kind: image)).update((0,))
#counter(figure.where(kind: raw)).update((0,))
#counter(figure.where(kind: "gloss")).update((0,))
#counter(heading).update((0,))
#doc(page-slug)
#metadata(none) #label(page + "--endpdf")
#if not opts.at("no-toc", default: false) {
outline(
target: heading.where(level: 1)
.or(heading.where(level: 2))
.or(heading.where(level: 3))
.or(heading.where(level: 4))
.or(heading.where(level: 5))
.after(label(page-slug + "--startpdf"))
.before(label(page-slug + "--endpdf"))
)}
] #label("pdf-" + page-slug)
]
]
#for file in data {
asset(file + ".json",
bytes(json.encode(pretty: false, toml(file + ".toml"))))
}
#context asset("index.json", bytes(json.encode(query(<page>).map(it => it.value), pretty: false)))
#asset("favicon.ico", read("/static/favicon.ico", encoding: none)) <favicon.ico>
#for file in static [
#asset("assets/" + file, read("static/" + file, encoding: none)) #label(file)
]

View File

@ -1,14 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "-ala")
%dict %word
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/ala", mos-cit(""),"cln")
=== Pronunciation <mos-1-pro>
#mos-pro[\*aʟa]
=== Affix <mos-1-affix>
%mos/affix
#mos-cit("")
1. Noun #low[x] arrow Verb "causing the existence of #low[x]"

View File

@ -1,15 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "Entec R. Tsiets")
%dict %word
= Mosici <mos>
%mos
=== Pronunciation <mos-1-p>
#mos-pro[ɛ̃dɛx aɐ̯ dʑɛdz]
=== Proper Noun <mos-1-proper>
%mos/proper
#mos-cit("  ")
1. Enderjed, the man, the myth, the legend
#mos-n("  ", pl: false)

View File

@ -1,20 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ain")
%dict %word
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/ainy", [#sn[]], "cln") #low[ainy]
=== Pronunciation <mos-1-pro>
#mos-pro[ɛ̃]
=== Pronoun <mos-1-pronoun>
%mos/pronoun
#mos-cit("")
1. Third person inannimate pronoun
#mos-pron("")
=== Noun <mos-1-noun>
%mos/noun
#mos-cit("")
1. Thing, object
#mos-n("")

View File

@ -1,15 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ainilapil")
%dict %word
= Mosici <mos>
%mos
From #wl("/dict/ain", mos-cit(""), "mos-1-noun") + #wl("/dict/ilapil", mos-cit(""), "mos")
=== Pronunciation <mos-1-p>
#mos-pro[ɛ̃neʎapeẅ]
=== Noun <mos-1-noun>
%mos/noun
#mos-cit("") (plural #wl("/dict/ainilapiltee", mos-cit(""), "mos"))
1. Noun, substantive
#mos-n("", pl: "")

View File

@ -1,13 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ainilapiltee")
%dict
= Mosici <mos>
%mos
=== Pronunciation <mos-1-p>
#mos-pro[ɛ̃neʎapeẅdi]
=== Moun <mos-1-noun>
%mos/noun
#mos-cit("")
1. plural form of #wl("/dict/ainilapil", mos-cit(""), "mos"))

View File

@ -1,13 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ainy")
%dict %word
= Classical Nyelaf <cln>
%cln
=== Pronounciation <cln-1-p>
- /a.inə/
=== Noun <cln-1-noun>
%cln/noun
#sn[] #low[ainy]
1. Thing, object

View File

@ -1,8 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ala")
%dict %word
= Classical Nyelaf <cln>
%cln
#sn[] #low[ala] [aɫa]

View File

@ -1,13 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "an·oreaiác ila")
%word %dict
= Mosici <mos>
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/oheaiā", sn[], "cln") #low[oheaiā] and the regular formation for language names
=== Pronunciation <mos-1-p>
#mos-pro[ãdoʀeç eʎa]
=== Proper noun <mos-1-proper>
#mos-cit(" ")
1. #reg[Out of Universe] #link("https://www.laghariportals.com/78h")[O’eaiā]
#mos-n(" ", pl: false)

View File

@ -1,8 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "cihyty")
%dict %word
= Classical Nyelaf <cln>
%cln
#sn[] #low[cihyty] [kixətə]

View File

@ -1,16 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "cirtss")
%word %dict
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/cihyty", sn[], "cln") #low[cihyty]
=== Pronunciation <mos-1-p>
#mos-pro[ceɐ̯ts]
=== Noun <mos-1-noun>
%mos/noun
#mos-cit("")
1. Writing, text
2. Document, book
#mos-n("")

View File

@ -1,16 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "contsse")
%word %dict
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/contysse", sn[], "cln") #low[contysse]
=== Pronunciation <mos-1-p>
#mos-pro[qõtsɛ]
=== Noun <mos-1-noun>
%mos/noun
#mos-cit("")
1. Novelty, innovation
#mos-n("")

View File

@ -1,15 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "contsseila")
%word %dict
= Mosici <mos>
%mos
From #wl("/dict/contsse", sn[], "mos-1-noun") #low[contse] + #wl("/dict/ila", sn[], "mos-1-verb") #low[ila]
=== Pronunciation <mos-1-p>
#mos-pro[qõtsiʎa]
=== Verb <mos-1-verb>
%mos/verb
#mos-cit("")
1. To present, to announce
#mos-v("")

View File

@ -1,8 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "contysse")
%word %dict
= Classical Nyelaf <cln>
%cln
#sn[] #low[contysse] [kontəsːə]

View File

@ -1,8 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "effyha")
%word %dict
= Classical Nyelaf <cln>
%cln
#sn[] #low[effyha] [efːəxa]

View File

@ -1,21 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "i")
%dict
%word
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/i", sn[], "cln") #low[i]
=== Pronunciation <mos-1-p>
#mos-pro[e]
=== Particle <mos-1-part>
%mos/particle
#mos-cit("")
1. and
2. also
= Classical Nyelaf <cln>
%cln
#mos-cit("") [i]

View File

@ -1,28 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ila")
%dict
%word
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/ila", mos-cit(""), "cln")
=== Prononciation <mos-1-pro>
#mos-pro[eʎa]
=== Noun <mos-1-noun>
%mos/noun
#mos-cit("")
1. Language, especially spoken
2. Speech, announcement
3. #poet word
#mos-n("")
=== Verb <mos-1-verb>
%mos/verb
#mos-cit("")
1. #arch to speak, to tell
#mos-v("")
= Classical Nyelaf <cln>
%cln
#mos-cit("") [iɫa]

View File

@ -1,17 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ilaala")
%dict
%word
= Mosici <mos>
%mos
From #wl("/dict/ila", sn[], "mos") #low[ila] + #wl("/dict/-ala", sn[], "mos") #low[-ala]
=== Pronunciation <mos-1-pro>
#mos-pro[eʎɔʟa]
=== Verb <mos-1-verb>
%mos/verb
#mos-cit("")
1. To speak
#mos-v("")

View File

@ -1,16 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ilamócirtss")
%dict
%word
= Mosici <mos>
%mos
From #wl("/dict/ilamóss", sn[], "mos") #low[ilamóss] + #wl("/dict/cirtss", sn[], "mos") #low[cirtss]
=== Pronunciation <mos-1-pro>
#mos-pro[eʎamuceɐ̯ts]
=== Noun <mos-1-noun>
%mos/noun
#mos-cit("")
1. Grammar (book)
#mos-n("")

View File

@ -1,16 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ilamóss")
%dict
%word
= Mosici <mos>
%mos
From #wl("/dict/ila", sn[], "mos") #low[ila] + [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/mōssy", sn[], "cln") #low[mōssy] (see also #wl("/dict/móssnier", sn[], "mos") #low[móssnier])
=== Pronunciation <mos-1-p>
#mos-pro[eʎamus]
=== Noun
%mos/noun
#mos-cit("")
1. Grammar, language rules
#mos-n("")

View File

@ -1,16 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ilapil")
%dict
%word
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/ila", sn[], "cln") #low[ila] #wl("/dict/pilyteny", sn[], "cln") #low[pily(teny)]
=== Pronunciation <mos-1-pro>
#mos-pro[eʎapeẅ]
=== Noun <mos-1-noun>
%mos/noun
#mos-cit("") (plural #wl("/dict/ilapiltee", sn[], "mos") #low[ilapiltee])
1. Word
#mos-n("", pl: "")

View File

@ -1,13 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ilapiltee")
%dict
= Mosici <mos>
%mos
=== Pronunciation <mos-1-p>
#mos-pro[eʎapeẅdi]
=== Moun <mos-1-noun>
%mos/noun
#mos-cit("")
1. plural form of #wl("/dict/ilapil", mos-cit(""), "mos"))

View File

@ -1,18 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ipianlei")
%dict
= Mosici <mos>
%word %mos
From the [[/worlds/Asteron/Classical Nyelaf]] phrase #sn[]#wl("/dict/i", sn[], "cln") #low[i] #wl("/dict/piany", sn[], "cln") #low[piany] #wl("/dict/lei", sn[], "cln") #low[lei] #sn[] (and afterwards, two)
=== Pronunciation <mos-1-pro>
#mos-pro[epjãʎi]
=== Noun <mos-1-noun>
%mos/noun
#mos-cit("") (plural #wl("/dict/ipianalei", mos-cit(""), "mos"))
1. Sequence, ordering
#mos-n("", pl: "")

View File

@ -1,18 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "lei")
%dict
%word
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/lei", sn[], "cln") #low[lei]
=== Pronunciation
#mos-pro[ʎi]
=== Numeral <mos-1-numeral>
%mos/numeral
#mos-cit("")
1. two
= Classical Nyelaf <cln>
%cln
#mos-cit("") [ɫe.i]

View File

@ -1,15 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "móssnier")
%dict %word
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/mōssy", sn[], "cln") #low[mōssy] + #wl("/dict/niehy", sn[], "cln") #low[niehy]
=== Pronunciation <mos-1-p>
#mos-pro[musɲiɐ̯]
=== Noun <mos-1-noun>
#mos-cit("")
1. Convention, custom
2. Rule (of a game)
#mos-n("")

View File

@ -1,9 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "mōssy")
%dict
%word
= Classical Nyelaf <cln>
%cln
#sn[] #low[mōssy] [moːsːə]

View File

@ -1,9 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "niehy")
%dict
%word
= Classical Nyelaf <cln>
%cln
#sn[] #low[niehy] [ni.exə]

View File

@ -1,15 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "o")
%dict %word
= Mosici <mos>
%mos
From onomatopeic origin
=== Pronunciation <mos-1-p>
#mos-pro[o]
=== Particle <mos-1-particle>
#mos-cit("")
1. #reg[After nouns] Vocative marker
2. #reg[After verbs] Imperative marker

View File

@ -1,8 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ohaioa")
%word %dict
= Classical Nyelaf <cln>
%cln
#sn[] #low[ohaioa] [oxajo.a]

View File

@ -1,9 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "oheaiā")
%word %dict
= Classical Neyelaf
%cln
#sn[] #low[oheaiā] [oxe.a.i.aː]
1. #reg[Out of Universe] #link("https://www.laghariportals.com/78h")[O’eaiā]

View File

@ -1,9 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "oiaō")
%word %dict
= Classical Nyelaf <cln>
%cln
#sn[] #low[oiaō] [o.i.a.oː]

View File

@ -1,15 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "óassonela")
%word %dict
= Mosici <mos>
%mos
From [[/worlds/Asteron/Classical Nyelaf]] #wl("/dict/ōas", sn[], "cln") #low[ōas] + #wl("/dict/sonela", sn[], "cln") #low[sonela]
=== Pronunciation <mos-1-p>
#mos-pro[wasõnɛʟa]
=== Verb <mos-1-verb>
%mos/verb
#mos-cit("")
1. To discover
#mos-v("")

View File

@ -1,9 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "īly")
%dict
%word
= Classical Nyelaf <cln>
%cln
#sn[] #low[īly] [iːɫə]

View File

@ -1,9 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "īny")
%dict
%word
= Classical Nyelaf <cln>
%cln
#sn[] #low[īny] [iːnə]

View File

@ -1,8 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/dict.typ": *
#import "/templates/utils/lang-mos.typ": *
#show: conf.with(page-title: "ōas")
%word %dict
= Classical Nyelaf <cln>
%cln
#sn[] #low[ōas] [oːas]

View File

@ -1,71 +0,0 @@
#import "../templates/base.typ": *
#show: conf.with(
page-title: sitename,
title-override: "Index",
notoc: true,
page-script: "index",
)
Hi, welcome to my wiki website blog thing
Search a page in the search bar above (#sym.arrow.t), see a list of all the pages on the #link("/pagelist.html")[Page
List] or #html.a(href: "#random", class: "random_page")[visit a random page]
=== Other cool people and sites
#{
import html: *
div(class: "buttonbox", {
a(href: "https://dipndops.neocities.org/", target: "_blank", img(
src: "https://dipndops.neocities.org/dipdop_button.gif",
title: "dipdop hideout",
alt: "dipndops",
))
a(href: "https://khimatales.neocities.org/", target: "_blank", img(
src: "https://khimatales.neocities.org/FloralsCoolAwesomeNeoCitiesAffilateLink.gif",
title: "Khima Tales",
alt: "Khima Tales",
))
a(href: "https://yokokasquest.com/", target: "_blank", img(
src: "https://yokokasquest.com/wp-content/uploads/2026/01/yq-button.png",
title: "Yokoka's Quest - An Adventure Webcomic That Updates M/W/F!",
alt: "Yokoka's Quest",
))
a(href: "https://toyhou.se/katesleepybun", target: "_blank", img(
src: "https://f2.toyhou.se/file/f2-toyhou-se/characters/37336946?1769119669.png",
title: "katethesleepybun on ToyHouse",
alt: "katethesleepybun on ToyHouse",
))
a(href: "https://forums.cisumchronicles.com/viewtopic.php?t=19", target: "_blank", img(
src: "https://khimatales.neocities.org/CanYou.gif",
title: "The Execution of Talo [CYOA]",
alt: "The Execution of Talo [CYOA]",
))
a(href: "https://toyhou.se/DreamyPumpkins", target: "_blank", img(
src: "https://f2.toyhou.se/file/f2-toyhou-se/images/113846742_IaqYsOqwcaKAQz6.png",
title: "DreamyPumpkins on ToyHouse",
alt: "DreamyPumpkins on ToyHouse",
))
a(href: "https://end-mythos.neocities.org", target: "_blank", img(
src: "https://64.media.tumblr.com/284abf48960684f29c6d30334c93474c/212108410f12363b-41/s100x200/dc496daea04014c1226c16807dd33aa8ecb85b17.png",
title: "Mythos of Wind and Thunder",
alt: "Mythos of Wind and Thunder",
))
a(href: "https://khimatales.neocities.org/NolaFanclub", target: "_blank", img(
src: "https://khimatales.neocities.org/NolaFanclubButton.gif",
title: "Nola Fanclub",
alt: "Nola Fanclub",
))
})
}
==== You want a button to here?
#html.a(href: "https://wiki.annwan.me/", target: "_blank", html.img(
src: "https://wiki.annwan.me/assets/webring-button.png",
title: "Annwan's Wiki",
alt: "Annwan's Wiki",
))
#html.textarea(
readonly: true,
"<a href=\"https://wiki.annwan.me/\" target=\"_blank\"><img src=\"https://wiki.annwan.me/assets/webring-button.png\" title=\"Annwan's Wiki\" alt=\"Annwan's Wiki\" /></a>",
)

View File

@ -1,6 +0,0 @@
#import "../templates/base.typ": *
#show: conf.with(page-title: "Page List", notoc: true, page-script: "pagelist", nofoot: true)
This is a list of all the pages on the site:
#html.ul(id: "list")

View File

@ -1,4 +0,0 @@
#import "/templates/base.typ": *
#show: conf.with(page-title: "Classical Nyelaf")
#tag("lang") #tag("cln")
#set heading(numbering: "1.")

View File

@ -1,660 +0,0 @@
#import "/templates/base.typ": *
#import "/templates/utils/gloss.typ": example, gloss
#import "/templates/utils/lang-mos.typ": *
#let high = html.span.with(class: "high")
#show: conf.with(page-title: "Mosici")
%lang %mos %language-documentation
#set heading(numbering: "I.A.1.a.")
#let low = html.span.with(class: "low")
#let gloss-opts = (
txt-style: sn,
translation-style: low,
)
#let g = gloss.with(..gloss-opts)
#let ex = example.with(..gloss-opts)
#let bl = "["
#let br = "]"
#let ann = it => sub(sc(it))
#let abb = it => low(sc(it))
This page describes Cairniasial standard Mosici, with brief mentions about other
close varieties such as Sialmoséce standard Mosici
= Sound ⁊ Letters <sec-sound-letters>
== Phonology <sec-phonology>
Mosici has the following phonemes
#table(
columns: 5,
[], [*Labial*], [*Coronal*], [*Palatal*], [*Dorsal*],
[*Nasal*], [m], [n], [], [],
[*Stop*], [p], [t], [], [k],
[*Fricative*], [f v], [s z], [ɕ ʑ], [ʀ],
[*Approximants*], [w], [], [j], [ʟ],
)
#table(
columns: 3,
[], [*Front*], [*Back*],
[*Close*], [i y], [u],
[*Close-Mid*], [e ø], [o],
[*Open-Mid*], [ɛ], [ɔ],
[*Open*], table.cell(colspan: 2)[a],
)
All vowels can also all be long,
There is also the following allophony rules:
- The dorsal approximant is realised as a [] off-glide in coda positions.
- The dorsal fricative is realised as a [ɐ̯] off-glide in coda positions.
- The dorsal fricative is realised as a true fricative [ʁ] in consonant
clusters.
- /n/ nasalises a preceding vowel.
- /n/ itself is not pronounced in coda positions.#footnote[still applies
nasalisation] <fn-nasal-even-coda>
- Nasalised close vowels are realised as mid-centralised: ĩː ỹː ũ ũː/ [ɪ̃ ɪ̃ː
ʏ̃ ʏ̃ː ʊ̃ ʊ̃ː]
- The dorsal plosive approximant are realised as palatal before /i y e j/
#footnote[or their or their long and/or nasalised
variants] <fn-dorsal-assimilation>,
- The dorsal plosive approximant are realised as uvular before /u o
w/@fn-dorsal-assimilation
- The dorsal plosive approximant are realised as palatal after /e i
j/@fn-dorsal-assimilation or in the coda of a syllable with /e
i/@fn-dorsal-assimilation as the nucleus.
- The dorsal plosive approximant are realised as velar otherwise
- Plosives are realised as voiced next to other phonemically voiced consonants.
- Plosives are realised as non-sibilant fricatives of the same place of
articulation word finally.
== Coalescence <sec-coalescence>
Mosici doesn't allow consecutive vowels inside of words. To resolve would-be
hiatuses, a coalescence process is used. This process is historic for all native
words, but it still current to resolve diphthongs in loan words and is necessary
to understand to read the written language, as the spelling was fixed before
that sound change occurred.
The process goes thusly (before applying the allophony):
1. Group <enumitem-coalesce-start> all consecutive vowels by pairs, starting at
near the start of the word
2. Combine all pairs of vowels according to the table below (the first vowel
indexes the row, and the second vowel indexes the column)
3. If any vowel is long, the resulting vowel is long;
4. Repeat from #context link(query(<enumitem-coalesce-start>).first().location())[step 1] until all hiatus has been resolved.
#table(
columns: 10,
[ ], [*a*], [*ɛ*], [*ɔ*], [*e*], [*ø*], [*o*], [*i*], [*y*], [*u*],
[*a*], [ɔ], [a], [ɔ], [ɛ], [ɛ], [ɔ], [e], [ø], [o],
[*ɛ*], [ɛ], [i], [ø], [i], [e], [ø], [i], [ø], [ø],
[*ɔ*], [ɔ], [ø], [ɔ], [ø], [ø], [o], [ø], [ø], [o],
[*e*], [ɛ], [i], [ø], [i], [e], [ø], [i], [ø], [ø],
[*ø*], [ø], [e], [ø], [e], [y], [ø], [y], [y], [y],
[*o*], [ɔ], [ø], [o], [ø], [ø], [u], [ø], [ø], [u],
[*i*], [ja], [], [], [je], [], [jo], [i], [jy], [ju],
[*y*], [ø], [ø], [ø], [ø], [y], [ø], [i], [i], [y],
[*u*], [wa], [], [], [we], [], [wo], [wi], [y], [u],
)
== The Nahan Script <sec-nahan-script>
Mosici is written in the [[/worlds/Asteron/Nahan Script]] (also named the
Polia(h)r alphabet), which is am alphabet which in Mosici is considered to have
the following letters, digraphs and diacritic’d letters. The sole diacritic is
called the #sn[] 〈sitrapaóha〉.
#figure(caption: [Poliahr for Mosici], table(
columns: 5,
[*Letter*], [*Transliteration*], [*Value (IPA)*], [*Name*], [*Name (IPA)*],
sn[], [p], [/p/], sn[], [[pe]],
sn[], [o], [/o/], sn[], [[us]],
sn[], [l], [/ʟ/], sn[], [[ʟɔ̃]],
sn[], [i], [/e/], sn[], [[iɐ̯nɛ]],
sn[], [a], [/a/], sn[], [[ɔ̃ɸ]],
sn[], [h], [/∅/#footnote[Lengthens a preceding vowel] <fn-script-h>], sn[], [[apfɛ]],
sn[], [r], [/ʀ/], sn[ #footnote[Literally "sounded hapfe"] <fn-script-sounded>], [[fasteɕɛx apfɛ]],
sn[], [c], [/k/], sn[], [[kaẅ]],
sn[], [n], [/n/], sn[], [[nɔẅ]],
sn[], [e], [/ɛ/], sn[], [[istaẅ]],
sn[], [s], [/z/], sn[], [[ɕpaẅ]],
sn[], [f], [/v/], sn[], [[fasoː]],
sn[], [m], [/m/], sn[], [[miʎɔ]],
sn[], [t], [/t/], sn[], [[tɛɟjo]],
))
#figure(caption: [Digraphs], table(
columns: 3,
[*Letter(s)*], [*Transliteration*], [*Value IPA*],
sn[], [ó], [/u/],
sn[], [í], [/i/],
sn[], [á], [/ɔ/],
sn[], [é], [/i/],
sn[], [ssi], [/ɕ/],
sn[], [si], [/ʑ/],
sn[], [ff], [/f/],
sn[], [ss], [/s/],
))
#figure(caption: [Punctuation], table(
columns: 3,
[*Punctuation*], [*Transliteration*], [*Use*],
sn[], [,], [Comma, short break],
sn[], [.], [Period, long break, sentence end],
sn[], [· or -], [word-internal separator, hyphen],
sn[],
[ or : or .],
[Abbreviation mark, list initiator and hyphenation marker (on both sides of
the cut).\ Transliteration depends on use],
sn[ ], [( )], [Quotes or parrenthesis],
))
=== Numbering with the Poliahr order
The letters can be used to number things in the manner most alphabets are used
elsewhere. for those purpose the order is as used above but #sn[] isn't used.
=== Note for Mosici as used on Nguhcraft
Mosici can also be found on the #link("https://mc.nguh.org/")[Nguhcraft world].
That "Sialmoséce standard" version of the language is nearly identical to the
Cairniasial standard described in this document, but has experienced a minor
spelling reform affecting the spelling of voiced fricatives. it introduces two
new modified letters, inserted after their plain versions in the order. They
aren't used in Poliahr order numbering either.
#figure(caption: [New letters in Sialmoséce standard Mosici], table(
columns: 5,
[*Letter*], [*Transliteration*], [*Value (IPA)*], [*Name*], [*Name (IPA)*],
sn[], [z], [/z/], sn[ ], [[fasteɕɛx ɕpaẅ]],
sn[], [v], [/v/], sn[ ], [[fasteɕex fasoː]],
))
the following sequences are thus respelled
#figure(
caption: [Repellings in Sialmoséce standard Mosici],
table(
columns: 2,
[*Cairniasial Standard*], [*Sialmoséce Standard*],
sn[], sn[],
sn[], sn[],
sn[], sn[],
sn[], sn[],
sn[], sn[],
sn[], sn[],
),
)
== Examples <ex-ortho>
#sn[] ⟨tráihéinss⟩ "fox"
- \*/tʀɔiːɛins/
- \*/tʀ#high[øːi]ns/ #low[Coalescence 1]
- /tʀ#high[]ns/ #low[Coalescence 2]
- [d#high[ʁʏ̃ː]s] #low[Allophony]
#sn[] ⟨mosséceec⟩ "of islands"
- \*/mosikɛɛk/
- /mosik#high[i]k/ #low[Coalescence]
- [mosi#high[c]i#high[ç]/ #low[Allophony]
#sn[] ⟨an·nielfc⟩ "of Nyelaf"
- \*/annjɛʟvk/
- /a#high[n]jɛʟvk/ #low[Particle shenanigans]
- [#high[ã]njɛ#high[]v#high[ɣ]] #low[Allophony]
= Words <morph>
== Nouns <morph-nouns>
=== Number <morph-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.
#table(
columns: 2,
[*Singular*], [*Plural*],
sn[], sn[],
sn[], sn[],
sn[], sn[],
sn[], sn[],
sn[], sn[],
sn[], sn[],
sn[], sn[],
sn[], sn[],
)
=== Cases <morph-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.
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,
[],
[*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*], sn[], sn[], sn[], sn[], sn[],
sn[], sn[],
[*Ablative*],
table.cell(colspan: 3, sn[]),
table.cell(colspan: 2, sn[]),
table.cell(colspan: 2, sn[]),
)
==== Agent <case-agent>
The Agent case #abb[age] indicates the agent of a transitive clause, or the
subject of an active intransitive clause.
#ex(
caption: [Agent case in an transitive clause],
txt: [#high[]  ],
translit: (high[loarne], [aint], [ilaalih.]),
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",
)
#ex(
caption: [Agent case in an active intransitive clause],
txt: [#high[] #high[] ],
translit: ([#high[loarne]], [i], high[masealn], [fionreor.]),
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",
)
==== Patient <case-patient>
The Patient case #abb[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>],
txt: [#high[] ],
translit: (high[nriiht], [fionreeff.]),
phono: (bl + high[nʁiːθ], [vjõʀif] + br),
morphemes: (high[grain#sc[.pl.pat]], [eat#sc[.prs.1s]]),
translation: [I eat #high[grains]],
lbl: "ex-case-pat-trans",
)
#ex(
caption: [Patient case in an intransitive clause],
txt: [#high[] ],
translit: (high[rent], [oítass.]),
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",
)
==== Genitive <case-genitive>
The genitive case #abb[gen] indicates possession 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],
txt: [#high[] ],
translit: (high[ilc], [ren]),
phono: (bl + high[eẅɣ], [ʀɛ̃] + br),
morphemes: (high(sc[1s.gen]), [house#sc[.age]]),
translation: [#high[my] house],
lbl: "ex-case-gen-poss",
)
#ex(
caption: [Qualificative genitive case],
txt: [#high[] ],
translit: (high[áhioc], [issofe]),
phono: (bl + high[øːx], [esovɛ] + br),
morphemes: (high[fiction.#sc[gen]], [job#sc[.age]]),
translation: [a #high[fictional] job],
lbl: "ex-case-gen-qual",
)
#ex(
caption: [Compounding],
txt: [],
translit: ([#sn[]\ áhio-], [#sn[]\ issofe]),
phono: (bl + [øː-], [esovɛ] + br),
morphemes: ([fiction-], [job#sc[.age]]),
translation: [a fictional job],
lbl: "ex-case-gen-compound",
)
==== Dative <case-dative>
The dative case #abb[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[]  ],
translit: (high[elssi], [rent], [ssiehíeff]),
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",
)
#ex(
caption: [Dative as means of displacement for verbs of movement towards],
txt: [ #high[] ],
translit: ([an·ssialmossécet], high[ffoítstsselassi], [oissailin.]),
phono: (bl + [ãɕaẅmosicɛθ], high[fydztsɛʟaɕ], [øsɛʎẽ] + br),
morphemes: (
[#sc[ppn-]Sialmoséce#sc[.dat]],
high[train.#sc[dat]],
[go#sc[.pst.2s]],
),
translation: [You#ann[sg] went to Sialmoséce #high[by train]],
lbl: "ex-case-dat-mot",
)
#ex(
caption: [Dative as an allative substitute for other verbs],
txt: [#high[]   ],
translit: (
high[an·cairniassialssi],
[an·ssialmosécet],
[ffoítstsselafia],
[filineff.],
),
phono: (
bl + high[ãkɛɐ̯nɛɕaẅɕ],
[ãɕaẅmosicɛθ],
[fydztsɛʟavja],
[veʎẽnɛf] + br,
),
morphemes: (
high[#sc[ppn-]Cairniasial#sc[.dat]],
[#sc[ppn-]Sialmoséce#sc[.pat]],
[train.#sc[abl]],
[leave.#sc[prs.1s]],
),
translation: [I leave Sialmoséce by train #high[to Cairniasial].],
lbl: "ex-case-dat-all",
)
==== Ablative <case-abl>
The ablative case #abb[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],
txt: [#high[]  ],
translit: (high[an·ssialmossécefia], [nriiht], [fionreeff.]),
phono: (bl + [ãɕaẅmosicɛvja], [nʁiːθ], [vjõʀiɸ] + br),
morphemes: (
high[#sc[ppn]-Sialmoséce.#sc[abl]],
[grain#sc[.pl.pat]],
[eat#sc[.prs.1s]],
),
translation: [I eat grains #high[from Sialmoséce]],
lbl: "ex-case-abl-abl",
)
#ex(
caption: [Ablative case as instrumental],
txt: [#high[] ],
translit: (high[hoéfenfia], [cirtíf.]),
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",
)
==== Spatial Locative <case-spaloc>
The spatial locative cases #abb[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. It is however pronounced as there was no word boundary
between the word and the particle.
#ex(
caption: [Spatial Locative],
txt: [ #high[ ]],
translit: ([il], high[an·fanssterilc‿la] + [.]),
phono: (bl + [eẅ], [ãvãstɛʀeẅʝ ʟa] + br),
morphemes: (sc[1s.age], [#sc[ppn-]Vansteril#sc[.gen‿sploc]]),
translation: [I am #high[in Vansteril]],
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 happening, 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”.
Note that those are pronounced as there was no word boundary between the word
and the particle.
#ex(
caption: [Present temporal locative],
txt: [#high[ ] ],
translit: (high[fint‿anep], [marefess.]),
phono: (bl + high[vẽð ãneɸ], [maʀɛvɛs] + br),
morphemes: (high[day.#sc[pat‿tmploc.prs]], [be_cold.#sc[prs.3si]]),
translation: [It’s cold #high[today]],
lbl: "ex-case-tmploc-prs",
)
#ex(
caption: [Past temporal locative],
txt: [ #high[ ] ],
translit: ([il], high[fionreipt‿anip], [,], [cirtin.]),
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",
)
#ex(
caption: [Future temporal locative],
txt: [ #high[ ] ],
translit: ([il], high[fionreapt‿anop], [,], [cirton.]),
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",
)
#ex(
caption: [Gnomic temporal locative],
txt: [ #high[ ] ],
translit: ([il], high[fionreapt‿anap], [,], [cirtan.]),
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",
)
=== Proper noun enclitic #sn[] <morph-ppn>
Proper nouns that aren't personal names always take the proper noun enclitic
#abb[ppn] #sn[] ⟨an·⟩
The affix #sn[] ⟨ni-⟩ --- which on proper nouns forms demonyms --- attaches
to the front of the proper noun enclitic: #sn[] gives
#sn[] and not \*#sn[] or \*#sn[]. Demonyms
formed this way also mark plural on the proper noun enclitic: #sn[]
pluralises to #sn[] and not \*#sn[].
== Pronouns <morph-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-participial
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, open: true)
== Verbs <morph-verbs>
Verbs are mainly conjugated according to their tense and the grammatical person
of the agent.
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("", open: true)
=== Aspect, mood ⁊ related nonsense <morph-verbs-extra-tam>
If you need other moods or aspects than an unaspected indicative, there is a
plethora 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, or occasionaly derive new core meanings. In
the latter case those are typically indicated in dictionaries.
Here is a (eventually but not yet) exhaustive list of such affixes: #low[(all of
them are prefixes)]
==== Conditional <morph-verbs-cond>
The conditional #sn[] ⟨ffói-⟩ #abb[cond] indicates that the action of a
verb is an hypothetical, or unreal situation.
==== Imperfective, durative, iterative, Inchoative <morph-verb-npfv>
#low[*TODO*: Imperfective, durative]
The iterative #sn[] ⟨atéo-⟩ #abb[iter] indicates that the action of the
verb is appening again, or repeatedly.
The inchoative #sn[] ⟨marai-⟩ #abb[inch] is used to indicate that the
start with an action.
==== Perfective, terminative <morph-verb-pfv>
The perfective #sn[] ⟨ntof-⟩ #abb[pfv] is used to indicate that an action
was ponctual instead of lasting. When combined with the inchoative it has a
translative meaning: it indicates a transition into the state resulting of the
active verb or described by the stative verb.
The terminative #sn[] ⟨offa-⟩ #abb[term] is used to indicate that an
action was entirely completed, or that a state is no longer current.
==== Desiderative, Necessitatives, Optative, Hortative <morpho-verb-opt>
The desiderative #sn[] ⟨ffats-⟩ #abb[des] indicates that the results of
the verb are desired by the subject.
The moral necessitative #sn[] ⟨réan-⟩ #abb[mness] indicates that the
agent is morally obligated to perform the action.
The hortative #sn[] ⟨cofa-⟩ #abb[hort] indicates a strong injunction to
perform the action.
#low[*TODO*: Optative, Physical necessitative]
==== Imperative <morph-verb-imp>
The imperative, contrary to all the other moods, is expressed with a particle
#sn[] ⟨o⟩ after the verb complex. If you need an affix form for
@morph-verb-other reasons, you should use the hortative (see @morpho-verb-opt)
instead.
==== Causatives <morph-verb-cau>
Mosici has two causatives: the purposeful and the accendental.
The purposeful causative #sn[] ⟨siehí-⟩ #abb[vcaus] indicates that the described
state is caused by the agent intentionally.
The accidental causative #sn[] ⟨ssní-⟩ #abb[icaus] indicates that the described state
is cased by the agent in unintentionally or accidentally.
Both change the valency of the verb. the cause is expressed as the agent, what
would the agent of the root verb is expressed as the patient, and what would
have been the patient of the root verb is expressed in the dative, the verb
agrees with it's new agent (unless further modified).
==== Passive <morph-verb-pas>
The passive affix #sn[] ⟨na-⟩ #abb[pass] makes a transitive verb agree with its
patient instead of its agent.
==== Negation <morph-verb-neg>
The negation prefix is #sn[] ⟨ta-⟩ #abb[neg]. It negates whatever component of the
verb is immediately following it.
==== Also on other parts of speech <morph-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. Exception is of the negation affix which is considered perfectly
acceptable in all registers.
== Numerals
#low[*TODO*]
= Syntax
At the sentence level Mosici has a mostly constituant order due to heavy role
marking. That said, it tends to default to topic fronting on an underlying SOV
order.
Inside constituants, it depends on the type of adjuncts: genitives and ordinals
come before the noun they qualify, but verbal participles and demonstrative come
after the noun they qualify.
Relative clauses are formed by expressing the verb in the participle, declined
in case with its role in the main clause.

View File

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 894 B

Some files were not shown because too many files have changed in this diff Show More