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

@ -322,6 +322,640 @@
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 ******/
:root {
@ -336,21 +970,29 @@
--error: #fb4934;
--font-main: Iosevka Aile Web, sans-serif;
--font-mono: Iosevka, monospace;
}
* {
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 {
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: 800;
}
strong {
font-weight: 600;
}
@ -389,10 +1031,22 @@ nav input {
color: var(--fg);
}
aside, aside * {
aside,
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 ******/
ul.sresult {
@ -408,6 +1062,7 @@ ul.sresult {
padding: 10pt;
border: .1em solid var(--fg-disabled);
}
li.sresult {
list-style: none;
font-size: 1.5em;
@ -420,10 +1075,14 @@ aside {
}
@media (min-width: 1000px) {
#main-body {display: flex;}
#main-body {
display: flex;
}
main {
width: calc(100% - 20em);
}
aside {
margin: 10pt 10pt 10pt 0pt;
width: 20em;
@ -434,7 +1093,10 @@ aside {
main {
width: 100% - 20pt
}
aside { width: 100% - 20pt }
aside {
width: 100% - 20pt
}
}
/****** Main body styling ******/
@ -465,6 +1127,7 @@ main td {
main .low {
color: var(--fg-disabled);
font-style: italic;
font-size: .8em;
}
main .high {
@ -476,7 +1139,9 @@ main em {
color: var(--accent);
}
main table, main td, main tr {
main table,
main td,
main tr {
border-collapse: collapse;
margin: 10px;
border-collapse: collapse;
@ -484,12 +1149,30 @@ main table, main td, main tr {
text-align: center;
}
main h2, main h3, main h4, main h5, main h6{
main h2,
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 ******/
.gloss, .gloss tr, .gloss td {
.gloss,
.gloss tr,
.gloss td {
border: none;
text-align: left;
padding: 0 .25em;

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";
function out_path(path: string) {
}
enum LogLevel {
DEBUG = 0,
INFO = 1,
@ -67,6 +64,7 @@ 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;}

View File

@ -1,7 +1,21 @@
#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>
foo bar baz
== H2
=== H3
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]
#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": *
#let high = html.span.with(class: "high")
#show: conf.with(page-title: "Mosici")
%lang %mos %langauge-documentation
#set heading(numbering: "IA1a")
%lang %mos %language-documentation
#set heading(numbering: "I.A.1.a.")
#let low = html.span.with(class: "low")
#let gloss-opts = (
txt-style: sn,
@ -15,8 +15,12 @@
#let bl = "["
#let br = "]"
#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>
== Phonolgy <sec-phonology>
== Phonology <sec-phonology>
Mosici has the following phonemes
#table(
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 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/ 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 ther /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.
- /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.
- 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.
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)
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.
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*],
@ -83,46 +98,111 @@ The process goes thusly (before applying the allophony):
)
== 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 diacriticd letters. The sole diacritic is
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 diacriticd letters. The sole diacritic is
called the #sn[] 〈sitrapaóha〉.
#table(
#figure(caption: [Poliahr for Mosici], table(
columns: 5,
[Letter], [Transliteration], [Value (IPA)], [Name], [Name (IPA)],
[*Letter*], [*Transliteration*], [*Value (IPA)*], [*Name*], [*Name (IPA)*],
sn[], [p], [/p/], sn[], [[pe]],
sn[], [o], [/o/], sn[], [[us]],
sn[], [o], [/o/], sn[], [[us]],
sn[], [l], [/ʟ/], sn[], [[ʟɔ̃]],
sn[], [i], [/e/], sn[], [[iɐ̯nɛ]],
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[],
[r],
[/ʀ/],
sn[ #footnote[Literally "sounded 〈base letter〉"] <fn-script-sounded>],
sn[ #footnote[Literally "sounded hapfe"] <fn-script-sounded>],
[[fasteɕɛx apfɛ]],
sn[], [c], [/k/], sn[], [[kaẅ]],
sn[], [n], [/n/], sn[], [[nɔẅ]],
sn[], [e], [/e/], sn[], [[istaẅ]],
sn[], [s], [/s/], sn[], [[ɕpaẅ]],
sn[], [z], [/z/], sn[  @fn-script-sounded], [[fasteɕɛx ɕpaẅ]],
sn[], [f], [/f/], sn[], [[fasoː]],
sn[], [v], [/v/], sn[  @fn-script-sounded], [[fasteɕex fasoː]],
sn[], [e], [/e/], sn[], [[istaẅ]],
sn[], [s], [/z/], sn[], [[ɕpaẅ]],
sn[], [f], [/v/], sn[], [[fasoː]],
sn[], [m], [/m/], sn[], [[miʎɔ]],
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ʀ#high[øːi]ns/ #low[Coalescense 1]
- /tʀ#high[yː]ns/ #low[Coalescense 2]
- \*/tʀ#high[øːi]ns/ #low[Coalescence 1]
- /tʀ#high[yː]ns/ #low[Coalescence 2]
- [d#high[ʁʏ̃ː]s] #low[Allophony]
#sn[] ⟨moséceec⟩ "of islands"
#sn[] ⟨mosséceec⟩ "of islands"
- \*/mosikɛɛk/
- /mosik#high[i]k/ #low[Coalescense]
- /mosik#high[i]k/ #low[Coalescence]
- [mosi#high[c]i#high[ç]/ #low[Allophony]
#sn[] ⟨an·nielvc⟩ "of Nyelaf"
@ -130,13 +210,14 @@ called the #sn[] 〈sitrapaóha〉.
- /a#high[n]jɛʟvk/ #low[Particle shenanigans]
- [#high[ã]njɛ#high[]v#high[ɣ]] #low[Allophony]
= Morphology <morpho>
== Nouns <morpho-nouns>
=== Number <morpho-nouns-number>
= 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.
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,
@ -151,31 +232,42 @@ singular.
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
compound cases --- spatial and temporal locative.
Nouns are also marked for case. There are 5 simple cases --- agent, patient,
genitive, dative and ablative --- and 2 compound cases --- spatial and temporal
locative.
They are 7 patterns for the simple cases based on the the coda consonant(s) of the agent form: the concatenative
pattern, and the 6 substitutive patterns (#sn[], #sn[], #sn[], #sn[], #sn[], #sn[])
They are 7 patterns for the simple cases based on the the coda consonant(s) of
the agent form: the concatenative pattern, and the 6 substitutive patterns
(#sn[], #sn[], #sn[], #sn[], #sn[], #sn[])
#table(
columns: 8,
align: center,
[], [*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[],
[*Patient*], table.cell(colspan: 7, sn[]),
[*Genitive*], table.cell(colspan: 7, sn[]),
[*Dative*], table.cell(colspan: 2, 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[]),
)
==== Agent <case-agent>
The Agent case #low(sc[age]) indicates the agent of a transitive clause, or the subject of an active intransitive
clause.
The Agent case #low(sc[age]) indicates the agent of a transitive clause, or the
subject of an active intransitive clause.
#ex(
caption: [Agent case in an transitive clause],
@ -187,23 +279,29 @@ clause.
lbl: "ex-case-age-trans",
)
#ex(
caption: [Agent case in an active intransitve clause],
caption: [Agent case in an active intransitive clause],
txt: [#high[] #high[] ],
translit: ([#high[loarne]], [i], high[mazealn], [vionreor.]),
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],
lbl: "ex-case-age-intrans",
)
==== Patient <case-patient>
The Patient case #low(sc[pat]) indicates the patient of a transitive clause, or the subject of a stative intransitive
clause.
The Patient case #low(sc[pat]) indicates the patient of a transitive clause, or
the subject of a stative intransitive clause.
#ex(
caption: [Patient case in a transitive clause#footnote[Note that while the pronoun is dropped thanks to the verb
conjugation, but the clause is still transitive]<fn-pat-trans>],
caption: [Patient case in a transitive clause#footnote[Note that while the
pronoun is dropped thanks to the verb conjugation, but the clause is still
transitive]<fn-pat-trans>],
txt: [#high[] ],
translit: (high[nriiht], [vionreef.]),
phono: (bl + high[nʁiːθ], [vjõʀiɸ] + br),
@ -224,8 +322,9 @@ clause.
==== Genitive <case-genitive>
The genitive case #low(sc[gen]) indicates poessesion or qualification. Note that in the case of qualification, the
formation of a compound is also possible. Note: Compounding is not subject to coalescence.
The genitive case #low(sc[gen]) indicates 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],
@ -258,8 +357,9 @@ formation of a compound is also possible. Note: Compounding is not subject to co
==== Dative <case-dative>
The dative case #low(sc[dat]) indicates the beneficiary of a ditransitive verbs, as well as indicating a direction
faced. Note hover that it isn't used with verbs of movement towards something, for those use the patient case (see
The dative case #low(sc[dat]) indicates the beneficiary of a ditransitive verbs,
as well as indicating a direction faced. Note hover that it isn't used with
verbs of movement towards something, for those use the patient case (see
@case-patient) instead, the dative instead indicates the means of displacement.
#ex(
caption: [Dative in ditransitive clauses],
@ -275,39 +375,54 @@ faced. Note hover that it isn't used with verbs of movement towards something, f
txt: [ #high[] ],
translit: ([an·sialmosécet], high[foítztselasi], [oisailin.]),
phono: (bl + [ãɕaẅmosicɛθ], high[fydztsɛʟaɕ], [øsɛʎẽ] + br),
morphemes: ([#sc[ppn-]Chalmosique#sc[.dat]], high[train.#sc[dat]], [go#sc[.pst.2s]]),
translation: [You#ann[sg] went to Chalmosique #high[by train]],
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·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),
morphemes: (
high[#sc[ppn-]Quernechal#sc[.dat]],
[#sc[ppn-]Chalmosique#sc[.pat]],
high[#sc[ppn-]Cairniasial#sc[.dat]],
[#sc[ppn-]Sialmoséce#sc[.pat]],
[train.#sc[abl]],
[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",
)
==== Ablative <case-abl>
The ablative case #low(sc[abl]) indicates the provenance of the action. It is also used as an instrumental, indicating
the means by which the action is done. For verbs of movement away from something, it only has it's instrumental meaning,
the source is indicated by the patient case (see @case-patient). For verbs of movement towards something, the ablative
doesn't have the instrumental meaning, for that role use the dative instead.
The ablative case #low(sc[abl]) indicates the provenance of the action. It is
also used as an instrumental, indicating the means by which the action is done.
For verbs of movement away from something, it only has it's instrumental
meaning, the source is indicated by the patient case (see @case-patient). For
verbs of movement towards something, the ablative doesn't have the instrumental
meaning, for that role use the dative instead.
#ex(
caption: [Ablative case in an ablative meaning],
txt: [#high[]  ],
translit: (high[an·sialmosécevia], [nriiht], [vionreef.]),
phono: (bl + [ãɕaẅmosicɛvja], [nʁiːθ], [vjõʀiɸ] + br),
morphemes: (high[#sc[ppn]-Chalmosique.#sc[abl]], [grain#sc[.pl.pat]], [eat#sc[.prs.1s]]),
translation: [I eat grains #high[from Chalmosique]],
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(
@ -322,8 +437,9 @@ doesn't have the instrumental meaning, for that role use the dative instead.
==== Spatial Locative <case-spaloc>
The spatial locative cases #low(sc[sploc]) is used to indicate a spacial location. it is marked by expressing the noun
in the genitive case, followed by the #sn[] ⟨la⟩ particle.
The spatial locative cases #low(sc[sploc]) is used to indicate a spacial
location. it is marked by expressing the noun in the genitive case, followed by
the #sn[] ⟨la⟩ particle.
#ex(
caption: [Spatial Locative],
@ -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(
sc[tmploc.pst, tmploc.prs, tmploc.fut] + [ and ] + sc[tmploc.gno],
). The past case (resp. present and future) is used, as its name indicates, to locate events that happened in the past
(resp. present and future). The gnomic case locates events that are either generally happeneing, happening at an unknown
point in time, or happening repeatedly. The past case (resp. present, future, gnomic) are indicated by expressing the
noun in the oblique followed by the particle #sn[] ⟨anip⟩ (resp #sn[] ⟨anep⟩, #sn[] ⟨anop⟩ and
#sn[] ⟨anap⟩) However the present case is rarely used outside of set phrases like #sn[ ] “today” or
#sn[ ] “now”
). 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”
#ex(
caption: [Present temporal locative],
@ -361,7 +479,12 @@ noun in the oblique followed by the particle #sn[] ⟨anip⟩
txt: [ #high[ ] ],
translit: ([il], high[vionreipt‿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]),
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",
)
@ -370,7 +493,12 @@ noun in the oblique followed by the particle #sn[] ⟨anip⟩
txt: [ #high[ ] ],
translit: ([il], high[vionreapt‿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]),
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",
)
@ -379,62 +507,101 @@ noun in the oblique followed by the particle #sn[] ⟨anip⟩
txt: [ #high[ ] ],
translit: ([il], high[vionreapt‿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]),
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 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:
#sn[] gives #sn[] and not \*#sn[] or \*#sn[]. Demonyms formed this way also
mark plural on the proper noun clitic: #sn[] pluralises to #sn[] and not \*#sn[].
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 <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
passive voice prefix #sn[] ⟨na-⟩, in which case, it agrees with the patient instead.
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
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
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("")
#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
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
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
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>
==== 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.
==== Conditionals, irrealis <morph-verbs-cond>
==== 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,22 +1,26 @@
#let tag = tagname => [ #metadata(tagname) <tag> ]
#let wl(path, txt, frag) = {
let fragtext = if frag == none {""} else {"#" + frag}
let fragtext = if frag == none { "" } else { "#" + frag }
let texttext = if txt == none {
path.split("/").at(-1)
} else {txt}
} else { txt }
link(path + ".html" + fragtext, texttext)
}
#let conf(
page-title: "",
title-override: none,
subtitle: none,
notoc: false,
nofoot: false,
page-script: none,
doc,
) = {
let sitename = [Annwan's Wiki]
// matches [[path|text!fragments]] with opt texts and fragment
let link-re = regex(
"\\[\\[([^\\]\\|!]+)(?:\\|([^\\]\\|!]+))?(?:!([^\\]\\|!]+))?\\]\\]"
"\\[\\[([^\\]\\|!]+)(?:\\|([^\\]\\|!]+))?(?:!([^\\]\\|!]+))?\\]\\]",
)
let actual-title = if title-override != none { title-override } else { page-title }
show figure.where(kind: "gloss"): set figure(supplement: [Example])
show figure.where(kind: "gloss"): set figure.caption(position: top)
show figure: it => {
@ -28,20 +32,25 @@
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)
set raw(theme: "/templates/gruvbox.tmTheme")
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")
html.meta(name: "search-title", content: actual-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")
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.header({
@ -54,13 +63,21 @@
html.h1(page-title)
html.hr()
doc
})
html.aside(outline())
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 s(script, body) = {
html.span(class: "scr-"+script, body)
html.span(class: "scr-" + script, body)
}
#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 (ps, pv) = mos-nstem(pr)
let (ss, sv) = mos-nstem(sg)
let c(it) = [#base.s("nahan", it) \ #html.span(class: "low", mos-translit(it))]
html.details({
html.details(open: open, {
html.summary[
*Declension for* _#mos-cit(sg)_ #if pl != none and pl != false [*Irr. pl. stem* _#mos-cit(pl)_] else if (
pl == false
@ -82,10 +82,10 @@
)
})
}
#let mos-v(w) = {
#let mos-v(w, open: false) = {
let s = mos-vstem(w)
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)_]
table(
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 [
#base.wl("/dict/" + mos-translit(k), base.s("nahan", k), "mos") \ #html.span(class: "low", mos-translit(k))
] else [
#base.s("nahan", k) \ #html.span(class: "low", mos-translit(k))
]
html.details({
html.details(open: open, {
html.summary[Mosici Pronouns]
table(
columns: 6,