Typst rewrite part the fourth

This commit is contained in:
2026-01-23 22:30:50 +01:00
parent 2abbc7f8cf
commit 34492978f4
12 changed files with 1961 additions and 286 deletions

BIN
assets/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 894 B

View File

@ -0,0 +1,12 @@
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

@ -0,0 +1,12 @@
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

@ -2,8 +2,8 @@
/* Andika with the nahan script */ /* Andika with the nahan script */
@font-face { @font-face {
font-family: AndikaAmbNaran; font-family: AndikaAmbNaran;
src: url("../fonts/AndikaAmbNaran.ttf") format("truetype"); src: url("../fonts/AndikaAmbNaran.ttf") format("truetype");
} }
/* Iosevka Aile as the main font */ /* Iosevka Aile as the main font */
@ -322,180 +322,863 @@
src: url('../fonts/WOFF2/IosevkaAile-HeavyItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaAile-HeavyItalic.ttf') format('truetype'); src: url('../fonts/WOFF2/IosevkaAile-HeavyItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaAile-HeavyItalic.ttf') format('truetype');
} }
/****** Iosevka Slab for code ******/
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 100;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-Thin.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Thin.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 100;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedThin.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedThin.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 100;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ThinOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ThinOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 100;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ThinOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ThinOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 100;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedThinOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedThinOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 100;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedThinOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedThinOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 100;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ThinItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ThinItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 100;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedThinItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedThinItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 200;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtraLight.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtraLight.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 200;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedExtraLight.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedExtraLight.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 200;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtraLightOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtraLightOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 200;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtraLightOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtraLightOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 200;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedExtraLightOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedExtraLightOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 200;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedExtraLightOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedExtraLightOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 200;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtraLightItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtraLightItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 200;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedExtraLightItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedExtraLightItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 300;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-Light.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Light.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 300;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedLight.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedLight.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 300;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-LightOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-LightOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 300;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-LightOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-LightOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 300;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedLightOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedLightOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 300;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedLightOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedLightOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 300;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-LightItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-LightItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 300;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedLightItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedLightItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-Regular.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Regular.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 400;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-Extended.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Extended.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-Oblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Oblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 400;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-Oblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Oblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 400;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 400;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-Italic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Italic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 400;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 500;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-Medium.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Medium.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 500;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedMedium.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedMedium.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 500;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-MediumOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-MediumOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 500;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-MediumOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-MediumOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 500;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedMediumOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedMediumOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 500;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedMediumOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedMediumOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 500;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-MediumItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-MediumItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 500;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedMediumItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedMediumItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 600;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-SemiBold.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-SemiBold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 600;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedSemiBold.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedSemiBold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 600;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-SemiBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-SemiBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 600;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-SemiBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-SemiBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 600;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedSemiBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedSemiBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 600;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedSemiBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedSemiBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 600;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-SemiBoldItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-SemiBoldItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 600;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedSemiBoldItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedSemiBoldItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-Bold.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Bold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 700;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedBold.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedBold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-BoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-BoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 700;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-BoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-BoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 700;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 700;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-BoldItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-BoldItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 700;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedBoldItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedBoldItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 800;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtraBold.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtraBold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 800;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedExtraBold.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedExtraBold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 800;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtraBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtraBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 800;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtraBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtraBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 800;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedExtraBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedExtraBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 800;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedExtraBoldOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedExtraBoldOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 800;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtraBoldItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtraBoldItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 800;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedExtraBoldItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedExtraBoldItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 900;
font-stretch: normal;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-Heavy.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-Heavy.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 900;
font-stretch: expanded;
font-style: normal;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedHeavy.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedHeavy.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 900;
font-stretch: normal;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-HeavyOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-HeavyOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 900;
font-stretch: normal;
src: url('../fonts/WOFF2/IosevkaSlab-HeavyOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-HeavyOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 900;
font-stretch: expanded;
font-style: oblique;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedHeavyOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedHeavyOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web Oblique';
font-display: swap;
font-weight: 900;
font-stretch: expanded;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedHeavyOblique.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedHeavyOblique.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 900;
font-stretch: normal;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-HeavyItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-HeavyItalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Slab Web';
font-display: swap;
font-weight: 900;
font-stretch: expanded;
font-style: italic;
src: url('../fonts/WOFF2/IosevkaSlab-ExtendedHeavyItalic.woff2') format('woff2'), url('../fonts/TTF/IosevkaSlab-ExtendedHeavyItalic.ttf') format('truetype');
}
/****** basics ******/ /****** basics ******/
:root { :root {
--bg: #282828; --bg: #282828;
--bg-accent: #504945; --bg-accent: #504945;
--fg: #ebdbb2; --fg: #ebdbb2;
--fg-disabled: #bdae93; --fg-disabled: #bdae93;
--accent: #fe8019; --accent: #fe8019;
--note: #b8bb26; --note: #b8bb26;
--info: #83a598; --info: #83a598;
--warn: #fabd2f; --warn: #fabd2f;
--error: #fb4934; --error: #fb4934;
--font-main: Iosevka Aile Web, sans-serif; --font-main: Iosevka Aile Web, sans-serif;
--font-mono: Iosevka, monospace; --font-mono: Iosevka, monospace;
} font-family: var(--font-main);
* { font-weight: 300;
font-family: var(--font-main);
font-weight: 300;
padding: 0pt;
margin: 0pt;
}
body {
background-color: var(--bg);
color: var(--fg);
} }
h1, h2, h3, h4, h5, h6 { * {
font-weight: 800; padding: 0pt;
margin: 0pt;
} }
body {
background-color: var(--bg);
color: var(--fg);
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: 800;
}
strong { strong {
font-weight: 600; font-weight: 600;
} }
/****** header ****/ /****** header ****/
header { header {
width: 100%; width: 100%;
background-color: var(--bg-accent); background-color: var(--bg-accent);
text-align: center; text-align: center;
} }
header h1 a { header h1 a {
text-decoration: none; text-decoration: none;
} }
a { a {
display: inline; display: inline;
color: var(--accent) color: var(--accent)
} }
header nav { header nav {
width: 100%; width: 100%;
padding: 0pt, 10pt; padding: 0pt, 10pt;
background-color: var(--bg-accent); background-color: var(--bg-accent);
justify-items: stretch; justify-items: stretch;
justify-content: space-evenly; justify-content: space-evenly;
align-items: stretch; align-items: stretch;
display: flex; display: flex;
} }
nav input { nav input {
width: 25vw; width: 25vw;
background-color: var(--bg); background-color: var(--bg);
margin: 10pt; margin: 10pt;
color: var(--fg); color: var(--fg);
} }
aside, aside * { aside,
background-color: var(--bg-accent); aside * {
background-color: var(--bg-accent);
}
footer {
width: 100%;
padding: 10pt;
background-color: var(--bg-accent);
}
pre,
code {
font-family: 'Iosevka Slab Web', monospace;
} }
/****** Search Box ******/ /****** Search Box ******/
ul.sresult { ul.sresult {
width: 50vw; width: 50vw;
height: 20vw; height: 20vw;
overflow: scroll; overflow: scroll;
justify-content: center; justify-content: center;
position: absolute; position: absolute;
top: 25%; top: 25%;
left: 50%; left: 50%;
transform: translate(-50%, 0%); transform: translate(-50%, 0%);
background-color: var(--bg-accent); background-color: var(--bg-accent);
padding: 10pt; padding: 10pt;
border: .1em solid var(--fg-disabled); border: .1em solid var(--fg-disabled);
} }
li.sresult { li.sresult {
list-style: none; list-style: none;
font-size: 1.5em; font-size: 1.5em;
} }
/****** Table of contents ******/ /****** Table of contents ******/
aside { aside {
padding: 10pt; padding: 10pt;
height: min-content; height: min-content;
} }
@media (min-width: 1000px) { @media (min-width: 1000px) {
#main-body {display: flex;} #main-body {
main { display: flex;
width: calc(100% - 20em); }
}
aside { main {
margin: 10pt 10pt 10pt 0pt; width: calc(100% - 20em);
width: 20em; }
}
aside {
margin: 10pt 10pt 10pt 0pt;
width: 20em;
}
} }
@media (max-width: 1000px) { @media (max-width: 1000px) {
main { main {
width: 100% - 20pt width: 100% - 20pt
} }
aside { width: 100% - 20pt }
aside {
width: 100% - 20pt
}
} }
/****** Main body styling ******/ /****** Main body styling ******/
main { main {
padding: 25pt 10pt; padding: 25pt 10pt;
} }
main h1 { main h1 {
font-size: 2em; font-size: 2em;
font-weight: bold; font-weight: bold;
} }
main li { main li {
list-style-position: inside; list-style-position: inside;
padding: 0 0 0 10pt; padding: 0 0 0 10pt;
} }
main table { main table {
margin: 1em; margin: 1em;
} }
main td { main td {
padding: 0em 1em; padding: 0em 1em;
margin: 0; margin: 0;
} }
main .low { main .low {
color: var(--fg-disabled); color: var(--fg-disabled);
font-style: italic; font-style: italic;
font-size: .8em;
} }
main .high { main .high {
color: var(--accent); color: var(--accent);
font-family: inherit; font-family: inherit;
} }
main em { main em {
color: var(--accent); color: var(--accent);
} }
main table, main td, main tr { main table,
border-collapse: collapse; main td,
margin: 10px; main tr {
border-collapse: collapse; border-collapse: collapse;
border: 1px solid var(--fg-disabled); margin: 10px;
text-align: center; border-collapse: collapse;
border: 1px solid var(--fg-disabled);
text-align: center;
} }
main h2, main h3, main h4, main h5, main h6{ main h2,
padding-top: 1em; main h3,
main h4,
main h5,
main h6 {
padding-top: 1em;
}
main button {
padding: 1em;
background-color: var(--bg-accent);
color: var(--accent);
border: none;
}
main button:hover {
background-color: var(--fg-disabled);
color: var(--bg-accent);
} }
/****** GLOSSES ******/ /****** GLOSSES ******/
.gloss, .gloss tr, .gloss td { .gloss,
border: none; .gloss tr,
text-align: left; .gloss td {
padding: 0 .25em; border: none;
text-align: left;
padding: 0 .25em;
} }
/****** SCRIPTS ******/ /****** SCRIPTS ******/
.scr-nahan { .scr-nahan {
font-family: AndikaAmbNaran; font-family: AndikaAmbNaran;
} }

BIN
assets/webring-button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

View File

@ -7,9 +7,6 @@ import { Dirent } from "node:fs";
import { mkdir, stat } from "node:fs/promises"; import { mkdir, stat } from "node:fs/promises";
function out_path(path: string) {
}
enum LogLevel { enum LogLevel {
DEBUG = 0, DEBUG = 0,
INFO = 1, INFO = 1,
@ -67,6 +64,7 @@ async function copy_assets() {
log(INFO, "Updating assets") log(INFO, "Updating assets")
await $`rm -rf ${minLogLevel == DEBUG ? "-v" : ""} public_html/assets/` await $`rm -rf ${minLogLevel == DEBUG ? "-v" : ""} public_html/assets/`
await $`cp -r ${minLogLevel == DEBUG ? "-v" : ""} assets/ public_html/` 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;} type IndexEntry = { id: string; title: string; body: string; tags: string;}

View File

@ -1,7 +1,21 @@
#import "../templates/base.typ": * #import "../templates/base.typ": *
#show: conf.with(page-title: sitename, title-override: "Index") #show: conf.with(page-title: sitename, title-override: "Index", notoc: true, page-script: "index")
= Welcome <welcome> Hi, welcome to my wiki website blog thing
foo bar baz
== H2 Search a page in the search bar above (#sym.arrow.t), see a list of all the pages on the #link("/pagelist.html")[Page
=== H3 List] or #html.a(href: "#random", class: "random_page")[visit a random page]
#html.hr()
/*
Want a button to this website? Copy the following code
```html
<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>
```
*/

6
src/pagelist.typ Normal file
View File

@ -0,0 +1,6 @@
#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

@ -3,8 +3,8 @@
#import "/templates/utils/lang-mos.typ": * #import "/templates/utils/lang-mos.typ": *
#let high = html.span.with(class: "high") #let high = html.span.with(class: "high")
#show: conf.with(page-title: "Mosici") #show: conf.with(page-title: "Mosici")
%lang %mos %langauge-documentation %lang %mos %language-documentation
#set heading(numbering: "IA1a") #set heading(numbering: "I.A.1.a.")
#let low = html.span.with(class: "low") #let low = html.span.with(class: "low")
#let gloss-opts = ( #let gloss-opts = (
txt-style: sn, txt-style: sn,
@ -15,8 +15,12 @@
#let bl = "[" #let bl = "["
#let br = "]" #let br = "]"
#let ann = it => sub(sc(it)) #let ann = it => sub(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> = Sound ⁊ Letters <sec-sound-letters>
== Phonolgy <sec-phonology> == Phonology <sec-phonology>
Mosici has the following phonemes Mosici has the following phonemes
#table( #table(
columns: 5, columns: 5,
@ -41,33 +45,44 @@ There is also the following allophony rules:
- The dorsal approximant is realised as a [] off-glide in coda positions. - 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 [ɐ̯] off-glide in coda positions.
- The dorsal fricative is realised as a true fricative [ʁ] in consonant clusters. - The dorsal fricative is realised as a true fricative [ʁ] in consonant
clusters.
- /n/ nasalises a preceding vowel. - /n/ nasalises a preceding vowel.
- /n/ itself is not pronounced in coda positions.#footnote[still applies nasalisation] <fn-nasal-even-coda> - /n/ itself is not pronounced in coda positions.#footnote[still applies
- Nasalised close vowels are realised as mid-centralised: ĩː ỹː ũ ũː/ [ɪ̃ ɪ̃ː ʏ̃ ʏ̃ː ʊ̃ ʊ̃ː] nasalisation] <fn-nasal-even-coda>
- The dorsal plosive approximant are realised as palatal before /i y e j/ #footnote[or their or their long and/or - Nasalised close vowels are realised as mid-centralised: ĩː ỹː ũ ũː/ [ɪ̃ ɪ̃ː
nasalised variants] <fn-dorsal-assimilation>, ʏ̃ ʏ̃ː ʊ̃ ʊ̃ː]
- The dorsal plosive approximant are realised as uvular before ther /u o w/@fn-dorsal-assimilation - The dorsal plosive approximant are realised as palatal before /i y e j/
- The dorsal plosive approximant are realised as palatal after /e i j/@fn-dorsal-assimilation or in the coda of a #footnote[or their or their long and/or nasalised
syllable with /e i/@fn-dorsal-assimilation as the nucleus. 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 - The dorsal plosive approximant are realised as velar otherwise
- Plosives are realised as voiced next to other phonemically voiced consonants. - 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. - Plosives are realised as non-sibilant fricatives of the same place of
articulation word finally.
== Coalescence <sec-coalescence> == Coalescence <sec-coalescence>
Mosici doesn't allow consecutive vowels inside of words. To resolve would-be hiatuses, a coalescence process is used. Mosici doesn't allow consecutive vowels inside of words. To resolve would-be
This process is historic for all native words, but it still current to resolve diphthongs in loan words and is necessary hiatuses, a coalescence process is used. This process is historic for all native
to understand to read the written language, as the spelling was fixed before that sound change occurred. 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): 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 1. Group <enumitem-coalesce-start> all consecutive vowels by pairs, starting at
2. Combine all pairs of vowels according to the table below (the first vowel indexes the row, and the second vowel near the start of the word
indexes the column) 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; 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 4. Repeat from #context link(
resolved. query(<enumitem-coalesce-start>).first().location(),
)[step 1] until all hiatus has been resolved.
#table( #table(
columns: 10, columns: 10,
[ ], [*a*], [*ɛ*], [*ɔ*], [*e*], [*ø*], [*o*], [*i*], [*y*], [*u*], [ ], [*a*], [*ɛ*], [*ɔ*], [*e*], [*ø*], [*o*], [*i*], [*y*], [*u*],
@ -83,46 +98,111 @@ The process goes thusly (before applying the allophony):
) )
== The Nahan Script <sec-nahan-script> == 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 Mosici is written in the [[/worlds/Asteron/Nahan Script]] (also named the
which in Mosici is considered to have the following letters, digraphs and diacriticd letters. The sole diacritic is Polia(h)r alphabet), which is am alphabet which in Mosici is considered to have
the following letters, digraphs and diacriticd letters. The sole diacritic is
called the #sn[] 〈sitrapaóha〉. called the #sn[] 〈sitrapaóha〉.
#table( #figure(caption: [Poliahr for Mosici], table(
columns: 5, columns: 5,
[Letter], [Transliteration], [Value (IPA)], [Name], [Name (IPA)], [*Letter*], [*Transliteration*], [*Value (IPA)*], [*Name*], [*Name (IPA)*],
sn[], [p], [/p/], sn[], [[pe]], sn[], [p], [/p/], sn[], [[pe]],
sn[], [o], [/o/], sn[], [[us]], sn[], [o], [/o/], sn[], [[us]],
sn[], [l], [/ʟ/], sn[], [[ʟɔ̃]], sn[], [l], [/ʟ/], sn[], [[ʟɔ̃]],
sn[], [i], [/e/], sn[], [[iɐ̯nɛ]], sn[], [i], [/e/], sn[], [[iɐ̯nɛ]],
sn[], [a], [/a/], sn[], [[ɔ̃ɸ]], sn[], [a], [/a/], sn[], [[ɔ̃ɸ]],
sn[], [h], [/∅/#footnote[Lengthens a preceeding vowel] <fn-script-h>], sn[], [[apfɛ]], sn[],
[h],
[/∅/#footnote[Lengthens a preceding vowel] <fn-script-h>],
sn[],
[[apfɛ]],
sn[], sn[],
[r], [r],
[/ʀ/], [/ʀ/],
sn[ #footnote[Literally "sounded 〈base letter〉"] <fn-script-sounded>], sn[ #footnote[Literally "sounded hapfe"] <fn-script-sounded>],
[[fasteɕɛx apfɛ]], [[fasteɕɛx apfɛ]],
sn[], [c], [/k/], sn[], [[kaẅ]], sn[], [c], [/k/], sn[], [[kaẅ]],
sn[], [n], [/n/], sn[], [[nɔẅ]], sn[], [n], [/n/], sn[], [[nɔẅ]],
sn[], [e], [/e/], sn[], [[istaẅ]], sn[], [e], [/e/], sn[], [[istaẅ]],
sn[], [s], [/s/], sn[], [[ɕpaẅ]], sn[], [s], [/z/], sn[], [[ɕpaẅ]],
sn[], [z], [/z/], sn[  @fn-script-sounded], [[fasteɕɛx ɕpaẅ]], sn[], [f], [/v/], sn[], [[fasoː]],
sn[], [f], [/f/], sn[], [[fasoː]],
sn[], [v], [/v/], sn[  @fn-script-sounded], [[fasteɕex fasoː]],
sn[], [m], [/m/], sn[], [[miʎɔ]], sn[], [m], [/m/], sn[], [[miʎɔ]],
sn[], [t], [/t/], sn[], [[tɛɟjo]], sn[], [t], [/t/], sn[], [[tɛɟjo]],
) ))
== Examples <ex-orthopho> #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[] ⟨tráihéins⟩ "fox" 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ʀɔiːɛins/
- \*/tʀ#high[øːi]ns/ #low[Coalescense 1] - \*/tʀ#high[øːi]ns/ #low[Coalescence 1]
- /tʀ#high[yː]ns/ #low[Coalescense 2] - /tʀ#high[yː]ns/ #low[Coalescence 2]
- [d#high[ʁʏ̃ː]s] #low[Allophony] - [d#high[ʁʏ̃ː]s] #low[Allophony]
#sn[] ⟨moséceec⟩ "of islands" #sn[] ⟨mosséceec⟩ "of islands"
- \*/mosikɛɛk/ - \*/mosikɛɛk/
- /mosik#high[i]k/ #low[Coalescense] - /mosik#high[i]k/ #low[Coalescence]
- [mosi#high[c]i#high[ç]/ #low[Allophony] - [mosi#high[c]i#high[ç]/ #low[Allophony]
#sn[] ⟨an·nielvc⟩ "of Nyelaf" #sn[] ⟨an·nielvc⟩ "of Nyelaf"
@ -130,13 +210,14 @@ called the #sn[] 〈sitrapaóha〉.
- /a#high[n]jɛʟvk/ #low[Particle shenanigans] - /a#high[n]jɛʟvk/ #low[Particle shenanigans]
- [#high[ã]njɛ#high[]v#high[ɣ]] #low[Allophony] - [#high[ã]njɛ#high[]v#high[ɣ]] #low[Allophony]
= Morphology <morpho> = Words <morph>
== Nouns <morpho-nouns> == Nouns <morph-nouns>
=== Number <morpho-nouns-number> === Number <morph-nouns-number>
Number is marked by reduplicating the last orthographic vowel of the root without the sitrapaóha #low[(see following Number is marked by reduplicating the last orthographic vowel of the root
table)]. In most cases the pronunciation of the plural isn't directly derivable from the pronunciation of the without the sitrapaóha #low[(see following table)]. In most cases the
singular. pronunciation of the plural isn't directly derivable from the pronunciation of
the singular.
#table( #table(
columns: 2, columns: 2,
@ -151,31 +232,42 @@ singular.
sn[], sn[], sn[], sn[],
) )
=== Cases <morpho-nouns-cases> === Cases <morph-nouns-cases>
Nouns are also marked for case. There are 5 simple cases --- agent, patient, genitive, dative and ablative --- and 2 Nouns are also marked for case. There are 5 simple cases --- agent, patient,
compound cases --- spatial and temporal locative. 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 They are 7 patterns for the simple cases based on the the coda consonant(s) of
pattern, and the 6 substitutive patterns (#sn[], #sn[], #sn[], #sn[], #sn[], #sn[]) the agent form: the concatenative pattern, and the 6 substitutive patterns
(#sn[], #sn[], #sn[], #sn[], #sn[], #sn[])
#table( #table(
columns: 8, columns: 8,
align: center, align: center,
[], [*C*], [*Sub* #sn[]], [*Sub* #sn[]], [*Sub* #sn[]], [*Sub* #sn[]], [*Sub* #sn[]], [*Sub* #sn[]], [],
[*C*],
[*Sub* #sn[]],
[*Sub* #sn[]],
[*Sub* #sn[]],
[*Sub* #sn[]],
[*Sub* #sn[]],
[*Sub* #sn[]],
[*Agent*], [], sn[], sn[], sn[], sn[], sn[], sn[], [*Agent*], [], sn[], sn[], sn[], sn[], sn[], sn[],
[*Patient*], table.cell(colspan: 7, sn[]), [*Patient*], table.cell(colspan: 7, sn[]),
[*Genitive*], 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[], sn[], sn[],
[*Ablative*], table.cell(colspan: 3, sn[]), table.cell(colspan: 2, 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> ==== Agent <case-agent>
The Agent case #low(sc[age]) indicates the agent of a transitive clause, or the subject of an active intransitive The Agent case #low(sc[age]) indicates the agent of a transitive clause, or the
clause. subject of an active intransitive clause.
#ex( #ex(
caption: [Agent case in an transitive clause], caption: [Agent case in an transitive clause],
@ -187,23 +279,29 @@ clause.
lbl: "ex-case-age-trans", lbl: "ex-case-age-trans",
) )
#ex( #ex(
caption: [Agent case in an active intransitve clause], caption: [Agent case in an active intransitive clause],
txt: [#high[] #high[] ], txt: [#high[] #high[] ],
translit: ([#high[loarne]], [i], high[mazealn], [vionreor.]), translit: ([#high[loarne]], [i], high[mazealn], [vionreor.]),
phono: (bl + high[ʟɔɐ̯nɛ], [e], high[mazɛ̃ẅ], [vjõʀøɐ̯] + br), phono: (bl + high[ʟɔɐ̯nɛ], [e], high[mazɛ̃ẅ], [vjõʀøɐ̯] + br),
morphemes: (high[Loarne.#sc[age]], [and], high[Mazealn.#sc[age]], [eat.#sc[fut.3pa]]), morphemes: (
high[Loarne.#sc[age]],
[and],
high[Mazealn.#sc[age]],
[eat.#sc[fut.3pa]],
),
translation: [#high[Loarne] and #high[Mazealn] will eat], translation: [#high[Loarne] and #high[Mazealn] will eat],
lbl: "ex-case-age-intrans", lbl: "ex-case-age-intrans",
) )
==== Patient <case-patient> ==== Patient <case-patient>
The Patient case #low(sc[pat]) indicates the patient of a transitive clause, or the subject of a stative intransitive The Patient case #low(sc[pat]) indicates the patient of a transitive clause, or
clause. the subject of a stative intransitive clause.
#ex( #ex(
caption: [Patient case in a transitive clause#footnote[Note that while the pronoun is dropped thanks to the verb caption: [Patient case in a transitive clause#footnote[Note that while the
conjugation, but the clause is still transitive]<fn-pat-trans>], pronoun is dropped thanks to the verb conjugation, but the clause is still
transitive]<fn-pat-trans>],
txt: [#high[] ], txt: [#high[] ],
translit: (high[nriiht], [vionreef.]), translit: (high[nriiht], [vionreef.]),
phono: (bl + high[nʁiːθ], [vjõʀiɸ] + br), phono: (bl + high[nʁiːθ], [vjõʀiɸ] + br),
@ -224,8 +322,9 @@ clause.
==== Genitive <case-genitive> ==== Genitive <case-genitive>
The genitive case #low(sc[gen]) indicates poessesion or qualification. Note that in the case of qualification, the The genitive case #low(sc[gen]) indicates possession or qualification. Note that
formation of a compound is also possible. Note: Compounding is not subject to coalescence. in the case of qualification, the formation of a compound is also possible.
Note: Compounding is not subject to coalescence.
#ex( #ex(
caption: [Possessive genitive case], caption: [Possessive genitive case],
@ -258,8 +357,9 @@ formation of a compound is also possible. Note: Compounding is not subject to co
==== Dative <case-dative> ==== Dative <case-dative>
The dative case #low(sc[dat]) indicates the beneficiary of a ditransitive verbs, as well as indicating a direction The dative case #low(sc[dat]) indicates the beneficiary of a ditransitive verbs,
faced. Note hover that it isn't used with verbs of movement towards something, for those use the patient case (see 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. @case-patient) instead, the dative instead indicates the means of displacement.
#ex( #ex(
caption: [Dative in ditransitive clauses], caption: [Dative in ditransitive clauses],
@ -275,39 +375,54 @@ faced. Note hover that it isn't used with verbs of movement towards something, f
txt: [ #high[] ], txt: [ #high[] ],
translit: ([an·sialmosécet], high[foítztselasi], [oisailin.]), translit: ([an·sialmosécet], high[foítztselasi], [oisailin.]),
phono: (bl + [ãɕaẅmosicɛθ], high[fydztsɛʟaɕ], [øsɛʎẽ] + br), phono: (bl + [ãɕaẅmosicɛθ], high[fydztsɛʟaɕ], [øsɛʎẽ] + br),
morphemes: ([#sc[ppn-]Chalmosique#sc[.dat]], high[train.#sc[dat]], [go#sc[.pst.2s]]), morphemes: (
translation: [You#ann[sg] went to Chalmosique #high[by train]], [#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", lbl: "ex-case-dat-mot",
) )
#ex( #ex(
caption: [Dative as an allative substitute for other verbs], caption: [Dative as an allative substitute for other verbs],
txt: [#high[]   ], txt: [#high[]   ],
translit: (high[an·cairniasialsi], [an·sialmosécet], [foítztselavia], [vilinef.]), translit: (
high[an·cairniasialsi],
[an·sialmosécet],
[foítztselavia],
[vilinef.],
),
phono: (bl + high[ãkɛɐ̯nɛɕaẅɕ], [ãɕaẅmosicɛθ], [fydztsɛʟavja], [veʎẽnɛf] + br), phono: (bl + high[ãkɛɐ̯nɛɕaẅɕ], [ãɕaẅmosicɛθ], [fydztsɛʟavja], [veʎẽnɛf] + br),
morphemes: ( morphemes: (
high[#sc[ppn-]Quernechal#sc[.dat]], high[#sc[ppn-]Cairniasial#sc[.dat]],
[#sc[ppn-]Chalmosique#sc[.pat]], [#sc[ppn-]Sialmoséce#sc[.pat]],
[train.#sc[abl]], [train.#sc[abl]],
[leave.#sc[prs.1s]], [leave.#sc[prs.1s]],
), ),
translation: [I leave Chalmosique by train #high[to Quernechal].], translation: [I leave Sialmoséce by train #high[to Cairniasial].],
lbl: "ex-case-dat-all", lbl: "ex-case-dat-all",
) )
==== Ablative <case-abl> ==== Ablative <case-abl>
The ablative case #low(sc[abl]) indicates the provenance of the action. It is also used as an instrumental, indicating The ablative case #low(sc[abl]) indicates the provenance of the action. It is
the means by which the action is done. For verbs of movement away from something, it only has it's instrumental meaning, also used as an instrumental, indicating the means by which the action is done.
the source is indicated by the patient case (see @case-patient). For verbs of movement towards something, the ablative For verbs of movement away from something, it only has it's instrumental
doesn't have the instrumental meaning, for that role use the dative instead. 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( #ex(
caption: [Ablative case in an ablative meaning], caption: [Ablative case in an ablative meaning],
txt: [#high[]  ], txt: [#high[]  ],
translit: (high[an·sialmosécevia], [nriiht], [vionreef.]), translit: (high[an·sialmosécevia], [nriiht], [vionreef.]),
phono: (bl + [ãɕaẅmosicɛvja], [nʁiːθ], [vjõʀiɸ] + br), 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]]), morphemes: (
translation: [I eat grains #high[from Chalmosique]], 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", lbl: "ex-case-abl-abl",
) )
#ex( #ex(
@ -322,8 +437,9 @@ doesn't have the instrumental meaning, for that role use the dative instead.
==== Spatial Locative <case-spaloc> ==== 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 The spatial locative cases #low(sc[sploc]) is used to indicate a spacial
in the genitive case, followed by the #sn[] ⟨la⟩ particle. location. it is marked by expressing the noun in the genitive case, followed by
the #sn[] ⟨la⟩ particle.
#ex( #ex(
caption: [Spatial Locative], caption: [Spatial Locative],
@ -339,12 +455,14 @@ in the genitive case, followed by the #sn[] ⟨la⟩ particle.
There are four temporal locatives: past, present, future and gnomic #low( There are four temporal locatives: past, present, future and gnomic #low(
sc[tmploc.pst, tmploc.prs, tmploc.fut] + [ and ] + sc[tmploc.gno], 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 ). The past case (resp. present and future) is used, as its name indicates, to
(resp. present and future). The gnomic case locates events that are either generally happeneing, happening at an unknown locate events that happened in the past (resp. present and future). The gnomic
point in time, or happening repeatedly. The past case (resp. present, future, gnomic) are indicated by expressing the case locates events that are either generally happening, happening at an unknown
noun in the oblique followed by the particle #sn[] ⟨anip⟩ (resp #sn[] ⟨anep⟩, #sn[] ⟨anop⟩ and point in time, or happening repeatedly. The past case (resp. present, future,
#sn[] ⟨anap⟩) However the present case is rarely used outside of set phrases like #sn[ ] “today” or gnomic) are indicated by expressing the noun in the oblique followed by the
#sn[ ] “now” 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( #ex(
caption: [Present temporal locative], caption: [Present temporal locative],
@ -361,7 +479,12 @@ noun in the oblique followed by the particle #sn[] ⟨anip⟩
txt: [ #high[ ] ], txt: [ #high[ ] ],
translit: ([il], high[vionreipt‿anip], [,], [cirtin.]), translit: ([il], high[vionreipt‿anip], [,], [cirtin.]),
phono: (bl + [eẅ], high[vjõʀipθ ãneɸ], [|], [ceɐ̯dẽ] + br), 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]), 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], translation: [#high[When] I #high[ate], you#ann[sg] wrote],
lbl: "ex-case-tmploc-pst", lbl: "ex-case-tmploc-pst",
) )
@ -370,7 +493,12 @@ noun in the oblique followed by the particle #sn[] ⟨anip⟩
txt: [ #high[ ] ], txt: [ #high[ ] ],
translit: ([il], high[vionreapt‿anop], [,], [cirton.]), translit: ([il], high[vionreapt‿anop], [,], [cirton.]),
phono: (bl + [eẅ], high[vjõʀøpθ ãnoɸ], [|], [ceɐ̯dõ] + br), 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]), 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], translation: [#high[When] I#high[ll eat], you#ann[sg]ll write],
lbl: "ex-case-tmploc-fut", lbl: "ex-case-tmploc-fut",
) )
@ -379,62 +507,101 @@ noun in the oblique followed by the particle #sn[] ⟨anip⟩
txt: [ #high[ ] ], txt: [ #high[ ] ],
translit: ([il], high[vionreapt‿anap], [,], [cirtan.]), translit: ([il], high[vionreapt‿anap], [,], [cirtan.]),
phono: (bl + [eẅ], high[vjõʀɛpθ ãnaɸ], [|], [ceɐ̯dã] + br), 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]), 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], translation: [#high[Whenever] I #high[eat], you#ann[sg] write],
lbl: "ex-case-tmploc-gno", lbl: "ex-case-tmploc-gno",
) )
=== Proper noun clitic #sn[] <morpho-ppn> === Proper noun enclitic #sn[] <morph-ppn>
Proper nouns that aren't personal names always take the proper noun clitic #low(sc[ppn]) #sn[] ⟨an·⟩ Proper nouns that aren't personal names always take the proper noun enclitic
#low(sc[ppn]) #sn[] ⟨an·⟩
The affix #sn[] ⟨ni-⟩ --- which on proper nouns forms demonyms --- attaches to the front of the proper noun clitic: The affix #sn[] ⟨ni-⟩ --- which on proper nouns forms demonyms --- attaches
#sn[] gives #sn[] and not \*#sn[] or \*#sn[]. Demonyms formed this way also to the front of the proper noun enclitic: #sn[] gives
mark plural on the proper noun clitic: #sn[] pluralises to #sn[] and not \*#sn[]. #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 <morpho-pronouns> == 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. 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." 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) #mos-pron(none, open: true)
== Verbs <morpho-verbs> == Verbs <morph-verbs>
Verbs are mainly conjugated according to their tense and the grammatical person of the agent, unless marked with the Verbs are mainly conjugated according to their tense and the grammatical person
passive voice prefix #sn[] ⟨na-⟩, in which case, it agrees with the patient instead. of the agent.
Orthographically the pattern is completely regular, however the vowel coalescence (see @sec-coalescence) causes the Orthographically the pattern is completely regular, however the vowel
pronunciation to be quite chaotic. The plural forms of past and present tense are always identical when spoken but 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. distinguished in writing.
Verbs are typically listed in their gnomic infinitive form. to derive the stem, remove the final #sn[]. Here is a Verbs are typically listed in their gnomic infinitive form. to derive the stem,
conjugation table for an hypothetical null-stemmed verb as a way to list the affixes#footnote[You may find those forms 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> verbatim in some older texts as a now defunct copula.] <fn-old-copula>
#mos-v("") #mos-v("", open: true)
=== Aspect, mood ⁊ related nonsense <morpho-verbs-extra-tam> === Aspect, mood ⁊ related nonsense <morph-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 If you need other moods or aspects than an unaspected indicative, there is a
to specify them further, they all are interpreted as nested, coming away from the verb, and can be combined and stacked plethora of affixes you can stack on verbs to specify them further, they all are
for more specific meanings 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)] Here is a (eventually but not yet) exhaustive list of such affixes: #low[(all of
them are prefixes)]
==== Conditionals, irrealis <morpho-verbs-cond> ==== Conditionals, irrealis <morph-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.
==== Imperfective, durative, iterative <morph-verb-npfv>
==== Perfective, terminative <morph-verb-pfv>
==== Desiderative, Optative, Hortative <morpho-verb-opt>
==== Imperative <morph-verb-imp>
==== Causatives <morph-verb-cau>
Mosici has two causatives: the purposeful and the accendental.
The purposeful causative #sn[] ⟨siehí-⟩ indicates that the described
state is caused by the agent intentionally.
The accidental causative #sn[] ⟨sní-⟩ 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-⟩ makes a transitive verb agree with its
patient instead of its agent. ==== Negation <morph-verb-neg>
The negation prefix is #sn[] ⟨ta-⟩. 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
= Syntax

View File

@ -1,66 +1,83 @@
#let tag = tagname => [ #metadata(tagname) <tag> ] #let tag = tagname => [ #metadata(tagname) <tag> ]
#let wl(path, txt, frag) = { #let wl(path, txt, frag) = {
let fragtext = if frag == none {""} else {"#" + frag} let fragtext = if frag == none { "" } else { "#" + frag }
let texttext = if txt == none { let texttext = if txt == none {
path.split("/").at(-1) path.split("/").at(-1)
} else {txt} } else { txt }
link(path + ".html" + fragtext, texttext) link(path + ".html" + fragtext, texttext)
} }
#let conf( #let conf(
page-title: "", page-title: "",
title-override: none, title-override: none,
subtitle: none, subtitle: none,
doc, notoc: false,
nofoot: false,
page-script: none,
doc,
) = { ) = {
let sitename = [Annwan's Wiki] let sitename = [Annwan's Wiki]
// matches [[path|text!fragments]] with opt texts and fragment // matches [[path|text!fragments]] with opt texts and fragment
let link-re = regex( let link-re = regex(
"\\[\\[([^\\]\\|!]+)(?:\\|([^\\]\\|!]+))?(?:!([^\\]\\|!]+))?\\]\\]" "\\[\\[([^\\]\\|!]+)(?:\\|([^\\]\\|!]+))?(?:!([^\\]\\|!]+))?\\]\\]",
) )
show figure.where(kind: "gloss"): set figure(supplement: [Example]) let actual-title = if title-override != none { title-override } else { page-title }
show figure.where(kind: "gloss"): set figure.caption(position: top) show figure.where(kind: "gloss"): set figure(supplement: [Example])
show figure: it => { show figure.where(kind: "gloss"): set figure.caption(position: top)
html.details(open: it.kind == image or it.kind == table, { show figure: it => {
html.summary[*#it.caption.supplement #it.caption.counter.display(it.numbering)*: #it.caption.body] html.details(open: it.kind == image or it.kind == table, {
it.body html.summary[*#it.caption.supplement #it.caption.counter.display(it.numbering)*: #it.caption.body]
}) it.body
} })
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({
html.link(rel: "stylesheet", href: "/assets/style/common.css")
html.meta(charset: "utf-8")
html.meta(name: "viewport", content: "width=device-width, initial-scale=1")
html.meta(name: "search-title", content: if title-override != none {title-override} else {page-title}, id: "search-title")
context html.meta(content: { let t = query(<tag>).map(it => it.value).join(" "); if type(t) != str {""} else {t}}, name: "search-tags", id: "search-tags")
if title-override != none {
html.title(sitename + " " + title-override)
} else {
html.title(sitename + " " + page-title)
} }
html.script(src:"/assets/scripts/fuse.min.js") show regex("%[a-z0-9/-]+"): it => tag(it.text.slice(1))
html.script(src: "/assets/scripts/search.js") show link-re: it => wl(..it.text.match(link-re).captures)
}) set table(stroke: none)
set raw(theme: "/templates/gruvbox.tmTheme")
html.header({ html.head({
html.h1(html.a(href: "/", sitename)) html.link(rel: "stylesheet", href: "/assets/style/common.css")
html.nav(html.input(id: "searchbox", type: "text", placeholder: "Search...")) html.meta(charset: "utf-8")
}) html.meta(name: "viewport", content: "width=device-width, initial-scale=1")
html.div(id: "results")[] html.meta(name: "search-title", content: actual-title, id: "search-title")
html.div(id: "main-body", { context html.meta(
html.main({ content: {
html.h1(page-title) let t = query(<tag>).map(it => it.value).join(" ")
html.hr() if type(t) != str { "" } else { t }
doc },
name: "search-tags",
id: "search-tags",
)
html.title(sitename + " " + actual-title)
html.script(src: "/assets/scripts/fuse.min.js")
html.script(src: "/assets/scripts/search.js")
if page-script != none { html.script(src: "/assets/scripts/pages/" + page-script + ".js") }
}) })
html.aside(outline())
}) html.header({
html.h1(html.a(href: "/", sitename))
html.nav(html.input(id: "searchbox", type: "text", placeholder: "Search..."))
})
html.div(id: "results")[]
html.div(id: "main-body", {
html.main({
html.h1(page-title)
html.hr()
doc
})
if (not notoc) { html.aside(outline()) }
})
if (not nofoot) {
html.footer[
#import sym: *
Source code available on #link("https://git.annwan.me/worldbuilding/wiki")[my gitea instance]\
#actual-title on #sitename #copyright Annwan. This work is licensed under #link(
"https://creativecommons.org/licenses/by-nc-sa/4.0/",
)[CC BY-NC-SA 4.0] #cc #cc.by #cc.nc #cc.sa
]
}
} }
#let sitename = [Annwan's Wiki] #let sitename = [Annwan's Wiki]
#let s(script, body) = { #let s(script, body) = {
html.span(class: "scr-"+script, body) html.span(class: "scr-" + script, body)
} }
#let sc = smallcaps #let sc = smallcaps

766
templates/gruvbox.tmTheme Normal file
View File

@ -0,0 +1,766 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>comment</key>
<string>Based on original gruvbox color scheme.</string>
<key>author</key>
<string>peaceant</string>
<key>name</key>
<string>gruvbox</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#282828</string>
<key>caret</key>
<string>#fcf9e3</string>
<key>foreground</key>
<string>#fdf4c1aa</string>
<key>invisibles</key>
<string>#fabd2f</string>
<key>lineHighlight</key>
<string>#3c3836</string>
<key>selection</key>
<string>#504945</string>
<key>bracketContentsForeground</key>
<string>#928374</string>
<key>bracketsForeground</key>
<string>#d5c4a1</string>
<key>guide</key>
<string>#3c3836</string>
<key>activeGuide</key>
<string>#a89984</string>
<key>stackGuide</key>
<string>#665c54</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation.definition.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#83a598</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation</string>
<key>scope</key>
<string>punctuation.definition.entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#d3869b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant</string>
<key>scope</key>
<string>constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#d3869b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant escape</string>
<key>scope</key>
<string>constant.character.escape</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant other</string>
<key>scope</key>
<string>constant.other</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fdf4c1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Entity</string>
<key>scope</key>
<string>entity</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword.operator.comparison, keyword.operator, keyword.operator.symbolic, keyword.operator.string, keyword.operator.assignment, keyword.operator.arithmetic, keyword.operator.class, keyword.operator.key, keyword.operator.logical</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fe8019</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword, keyword.operator.new, keyword.other, keyword.control</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fa5c4b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fa5c4b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
<key>foreground</key>
<string>#928374</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Regexp</string>
<key>scope</key>
<string>string.regexp constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support</string>
<key>scope</key>
<string>support</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fdf4c1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Lang Variable</string>
<key>scope</key>
<string>variable.language</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fdf4c1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function Call</string>
<key>scope</key>
<string>meta.function-call</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fdf4c1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>background</key>
<string>#932b1e</string>
<key>foreground</key>
<string>#fdf4c1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Embedded Source</string>
<key>scope</key>
<string>text source, string.unquoted.heredoc, source source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fdf4c1</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String embedded-source</string>
<key>scope</key>
<string>string.quoted source</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String constant</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Support.class</string>
<key>scope</key>
<string>support.class</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Meta.tag.A</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inner tag</string>
<key>scope</key>
<string>meta.tag, meta.tag entity</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css colors</string>
<key>scope</key>
<string>constant.other.color.rgb-value</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#83a598</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css tag-name</string>
<key>scope</key>
<string>meta.selector.css entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fa5c4b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css#id</string>
<key>scope</key>
<string>meta.selector.css, entity.other.attribute-name.id</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css.class</string>
<key>scope</key>
<string>meta.selector.css entity.other.attribute-name.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css property-name:</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css @at-rule</string>
<key>scope</key>
<string>meta.preprocessor.at-rule keyword.control.at-rule</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css additional-constants</string>
<key>scope</key>
<string>meta.property-value constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css additional-constants</string>
<key>scope</key>
<string>meta.property-value support.constant.named-color.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fe8019</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>css constructor.argument</string>
<key>scope</key>
<string>meta.constructor.argument.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<!-- diff -->
<dict>
<key>name</key>
<string>diff.header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#83a598</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fa5c4b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>diff.inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<!-- markup -->
<dict>
<key>name</key>
<string>Bold Markup</string>
<key>scope</key>
<string>markup.bold</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Italic Markup</string>
<key>scope</key>
<string>markup.italic</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Heading Markup</string>
<key>scope</key>
<string>markup.heading</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string>bold</string>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<!-- Language Specific -->
<!-- PHP -->
<dict>
<key>name</key>
<string>PHP: class name</string>
<key>scope</key>
<string>entity.name.type.class.php</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>PHP: Comment</string>
<key>scope</key>
<string>keyword.other.phpdoc</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#928374</string>
</dict>
</dict>
<!-- CSS -->
<dict>
<key>name</key>
<string>CSS: numbers</string>
<key>scope</key>
<string>constant.numeric.css, keyword.other.unit.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3869b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS: entity dot, hash, comma, etc.</string>
<key>scope</key>
<string>punctuation.definition.entity.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<!-- JS -->
<dict>
<key>name</key>
<string>JS: variable</string>
<key>scope</key>
<string>variable.language.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>JS: unquoted labe</string>
<key>scope</key>
<string>string.unquoted.label.js</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fdf4c1</string>
</dict>
</dict>
<!-- SQL -->
<dict>
<key>name</key>
<string>Constant other sql</string>
<key>scope</key>
<string>constant.other.table-name.sql</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constant other sql</string>
<key>scope</key>
<string>constant.other.database-name.sql</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<!-- Plugins -->
<!-- dired plugin -->
<dict>
<key>name</key>
<string>dired directory</string>
<key>scope</key>
<string>storage.type.dired.item.directory, dired.item.directory</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<!-- orgmode plugin -->
<dict>
<key>name</key>
<string>orgmode link</string>
<key>scope</key>
<string>orgmode.link</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
<key>fontStyle</key>
<string>underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>orgmode page</string>
<key>scope</key>
<string>orgmode.page</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b8bb26</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>orgmode break</string>
<key>scope</key>
<string>orgmode.break</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#d3869b</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>orgmode headline</string>
<key>scope</key>
<string>orgmode.headline</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#8ec07c</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>orgmode tack</string>
<key>scope</key>
<string>orgmode.tack</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>orgmode follow up</string>
<key>scope</key>
<string>orgmode.follow_up</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>orgmode checkbox</string>
<key>scope</key>
<string>orgmode.checkbox</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>orgmode checkbox summary</string>
<key>scope</key>
<string>orgmode.checkbox.summary</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fabd2f</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>orgmode tags</string>
<key>scope</key>
<string>orgmode.tags</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fa5c4b</string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>06CD1FB2-A00A-4F8C-97B2-60E131980454</string>
</dict>
</plist>

View File

@ -60,13 +60,13 @@
} }
#let mos-n(sg, pl: none) = { #let mos-n(sg, pl: none, open: false) = {
let pr = if pl == false { "" } else if pl != none { pl } else { mos-pluralise(sg) } let pr = if pl == false { "" } else if pl != none { pl } else { mos-pluralise(sg) }
let (ps, pv) = mos-nstem(pr) let (ps, pv) = mos-nstem(pr)
let (ss, sv) = mos-nstem(sg) let (ss, sv) = mos-nstem(sg)
let c(it) = [#base.s("nahan", it) \ #html.span(class: "low", mos-translit(it))] let c(it) = [#base.s("nahan", it) \ #html.span(class: "low", mos-translit(it))]
html.details({ html.details(open: open, {
html.summary[ html.summary[
*Declension for* _#mos-cit(sg)_ #if pl != none and pl != false [*Irr. pl. stem* _#mos-cit(pl)_] else if ( *Declension for* _#mos-cit(sg)_ #if pl != none and pl != false [*Irr. pl. stem* _#mos-cit(pl)_] else if (
pl == false pl == false
@ -82,10 +82,10 @@
) )
}) })
} }
#let mos-v(w) = { #let mos-v(w, open: false) = {
let s = mos-vstem(w) let s = mos-vstem(w)
let c(it) = [#base.s("nahan", it) \ #html.span(class: "low", mos-translit(it))] let c(it) = [#base.s("nahan", it) \ #html.span(class: "low", mos-translit(it))]
html.details({ html.details(open: open, {
html.summary[*Conjugation for* _#mos-cit(w)_] html.summary[*Conjugation for* _#mos-cit(w)_]
table( table(
columns: 5, columns: 5,
@ -106,14 +106,14 @@
}) })
} }
#let mos-pron(this) = { #let mos-pron(this, open: false) = {
let c(k, h: false) = if h and k != 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 [ ] else [
#base.s("nahan", k) \ #html.span(class: "low", mos-translit(k)) #base.s("nahan", k) \ #html.span(class: "low", mos-translit(k))
] ]
html.details({ html.details(open: open, {
html.summary[Mosici Pronouns] html.summary[Mosici Pronouns]
table( table(
columns: 6, columns: 6,