diff --git a/assets/favicon.ico b/assets/favicon.ico
new file mode 100644
index 0000000..62de34c
Binary files /dev/null and b/assets/favicon.ico differ
diff --git a/assets/scripts/pages/index.js b/assets/scripts/pages/index.js
new file mode 100644
index 0000000..152f54d
--- /dev/null
+++ b/assets/scripts/pages/index.js
@@ -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`
+ })
+ }
+}
\ No newline at end of file
diff --git a/assets/scripts/pages/pagelist.js b/assets/scripts/pages/pagelist.js
new file mode 100644
index 0000000..99c235e
--- /dev/null
+++ b/assets/scripts/pages/pagelist.js
@@ -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 += `
${page.id}: ${page.title}`
+ }
+ }
+}
\ No newline at end of file
diff --git a/assets/style/common.css b/assets/style/common.css
index 989ad8e..1f94591 100644
--- a/assets/style/common.css
+++ b/assets/style/common.css
@@ -2,8 +2,8 @@
/* Andika with the nahan script */
@font-face {
- font-family: AndikaAmbNaran;
- src: url("../fonts/AndikaAmbNaran.ttf") format("truetype");
+ font-family: AndikaAmbNaran;
+ src: url("../fonts/AndikaAmbNaran.ttf") format("truetype");
}
/* 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');
}
+/****** 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 {
- --bg: #282828;
- --bg-accent: #504945;
- --fg: #ebdbb2;
- --fg-disabled: #bdae93;
- --accent: #fe8019;
- --note: #b8bb26;
- --info: #83a598;
- --warn: #fabd2f;
- --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);
+ --bg: #282828;
+ --bg-accent: #504945;
+ --fg: #ebdbb2;
+ --fg-disabled: #bdae93;
+ --accent: #fe8019;
+ --note: #b8bb26;
+ --info: #83a598;
+ --warn: #fabd2f;
+ --error: #fb4934;
+ --font-main: Iosevka Aile Web, sans-serif;
+ --font-mono: Iosevka, monospace;
+ font-family: var(--font-main);
+ font-weight: 300;
}
-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 {
- font-weight: 600;
+ font-weight: 600;
}
/****** header ****/
header {
- width: 100%;
- background-color: var(--bg-accent);
- text-align: center;
+ width: 100%;
+ background-color: var(--bg-accent);
+ text-align: center;
}
header h1 a {
- text-decoration: none;
+ text-decoration: none;
}
a {
- display: inline;
- color: var(--accent)
+ display: inline;
+ color: var(--accent)
}
header nav {
- width: 100%;
- padding: 0pt, 10pt;
- background-color: var(--bg-accent);
- justify-items: stretch;
- justify-content: space-evenly;
- align-items: stretch;
- display: flex;
+ width: 100%;
+ padding: 0pt, 10pt;
+ background-color: var(--bg-accent);
+ justify-items: stretch;
+ justify-content: space-evenly;
+ align-items: stretch;
+ display: flex;
}
nav input {
- width: 25vw;
- background-color: var(--bg);
- margin: 10pt;
- color: var(--fg);
+ width: 25vw;
+ background-color: var(--bg);
+ margin: 10pt;
+ color: var(--fg);
}
-aside, aside * {
- background-color: var(--bg-accent);
+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 {
- width: 50vw;
- height: 20vw;
- overflow: scroll;
- justify-content: center;
- position: absolute;
- top: 25%;
- left: 50%;
- transform: translate(-50%, 0%);
- background-color: var(--bg-accent);
- padding: 10pt;
- border: .1em solid var(--fg-disabled);
+ width: 50vw;
+ height: 20vw;
+ overflow: scroll;
+ justify-content: center;
+ position: absolute;
+ top: 25%;
+ left: 50%;
+ transform: translate(-50%, 0%);
+ background-color: var(--bg-accent);
+ padding: 10pt;
+ border: .1em solid var(--fg-disabled);
}
+
li.sresult {
- list-style: none;
- font-size: 1.5em;
+ list-style: none;
+ font-size: 1.5em;
}
/****** Table of contents ******/
aside {
- padding: 10pt;
- height: min-content;
+ padding: 10pt;
+ height: min-content;
}
@media (min-width: 1000px) {
- #main-body {display: flex;}
- main {
- width: calc(100% - 20em);
- }
- aside {
- margin: 10pt 10pt 10pt 0pt;
- width: 20em;
- }
+ #main-body {
+ display: flex;
+ }
+
+ main {
+ width: calc(100% - 20em);
+ }
+
+ aside {
+ margin: 10pt 10pt 10pt 0pt;
+ width: 20em;
+ }
}
@media (max-width: 1000px) {
- main {
- width: 100% - 20pt
- }
- aside { width: 100% - 20pt }
+ main {
+ width: 100% - 20pt
+ }
+
+ aside {
+ width: 100% - 20pt
+ }
}
/****** Main body styling ******/
main {
- padding: 25pt 10pt;
+ padding: 25pt 10pt;
}
main h1 {
- font-size: 2em;
- font-weight: bold;
+ font-size: 2em;
+ font-weight: bold;
}
main li {
- list-style-position: inside;
- padding: 0 0 0 10pt;
+ list-style-position: inside;
+ padding: 0 0 0 10pt;
}
main table {
- margin: 1em;
+ margin: 1em;
}
main td {
- padding: 0em 1em;
- margin: 0;
+ padding: 0em 1em;
+ margin: 0;
}
main .low {
- color: var(--fg-disabled);
- font-style: italic;
+ color: var(--fg-disabled);
+ font-style: italic;
+ font-size: .8em;
}
main .high {
- color: var(--accent);
- font-family: inherit;
+ color: var(--accent);
+ font-family: inherit;
}
main em {
- color: var(--accent);
+ color: var(--accent);
}
-main table, main td, main tr {
- border-collapse: collapse;
- margin: 10px;
- border-collapse: collapse;
- border: 1px solid var(--fg-disabled);
- text-align: center;
+main table,
+main td,
+main tr {
+ border-collapse: collapse;
+ margin: 10px;
+ border-collapse: collapse;
+ border: 1px solid var(--fg-disabled);
+ text-align: center;
}
-main h2, main h3, main h4, main h5, main h6{
- padding-top: 1em;
+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 {
- border: none;
- text-align: left;
- padding: 0 .25em;
+.gloss,
+.gloss tr,
+.gloss td {
+ border: none;
+ text-align: left;
+ padding: 0 .25em;
}
/****** SCRIPTS ******/
.scr-nahan {
- font-family: AndikaAmbNaran;
+ font-family: AndikaAmbNaran;
}
\ No newline at end of file
diff --git a/assets/webring-button.png b/assets/webring-button.png
new file mode 100644
index 0000000..b7f7ebd
Binary files /dev/null and b/assets/webring-button.png differ
diff --git a/build.ts b/build.ts
index 81a6f35..2c9b6a2 100755
--- a/build.ts
+++ b/build.ts
@@ -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;}
diff --git a/src/index.typ b/src/index.typ
index e3ed0da..3aabd69 100644
--- a/src/index.typ
+++ b/src/index.typ
@@ -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
-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
+
+
+
+```
+*/
diff --git a/src/pagelist.typ b/src/pagelist.typ
new file mode 100644
index 0000000..1eb5f5c
--- /dev/null
+++ b/src/pagelist.typ
@@ -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")
\ No newline at end of file
diff --git a/src/worlds/Asteron/Mosici.typ b/src/worlds/Asteron/Mosici.typ
index eb54ebb..0a91a3b 100644
--- a/src/worlds/Asteron/Mosici.typ
+++ b/src/worlds/Asteron/Mosici.typ
@@ -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: "I’A’1’a’")
+%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
-== Phonolgy
+== 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]
-- 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] ,
-- 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]
+- 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] ,
+- 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
-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 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 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().first().location())[step 1] until all hiatus has been
- resolved.
+4. Repeat from #context link(
+ query().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
-Mosici is written in the [[/worlds/Asteron/Nahan Script]] (also named the Polia(h)r alphabet), which is am alphabet
-which in Mosici is considered to have the following letters, digraphs and diacritic’d letters. The sole diacritic is
+Mosici is written in the [[/worlds/Asteron/Nahan Script]] (also named the
+Polia(h)r alphabet), which is am alphabet which in Mosici is considered to have
+the following letters, digraphs and diacritic’d letters. The sole diacritic is
called the #sn[] 〈sitrapaóha〉.
-#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] ], sn[], [[apfɛ]],
+ sn[],
+ [h],
+ [/∅/#footnote[Lengthens a preceding vowel] ],
+ sn[],
+ [[apfɛ]],
+
sn[],
[r],
[/ʀ/],
- sn[ #footnote[Literally "sounded 〈base letter〉"] ],
+ sn[ #footnote[Literally "sounded hapfe"] ],
[[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
+))
+#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
+
+#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
-== Nouns
-=== Number
+= Words
+== 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
+=== 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
-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
-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]],
+ 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]],
txt: [#high[] ],
translit: (high[nriiht], [vionreef.]),
phono: (bl + high[nʁiːθ], [vjõʀiɸ] + br),
@@ -224,8 +322,9 @@ clause.
==== 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
-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
-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
-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[]
+=== Proper noun enclitic #sn[]
-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
+== 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
+== 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.]
-#mos-v("")
+#mos-v("", open: true)
-=== Aspect, mood ⁊ related nonsense
+=== Aspect, mood ⁊ related nonsense
-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
-==== Imperfective, durative, iterative
-==== Perfective, terminative
-==== Desirative, Optative, Hortative
-==== Imperative
-==== Causatives
-==== Passive
-==== Negation
-The negation prefix is #sn[] ⟨ta-⟩. It negates whatever component of the verb is immediately following it.
+==== Conditionals, irrealis
-==== Also on other parts of speach
-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
+==== Perfective, terminative
+==== Desiderative, Optative, Hortative
+==== Imperative
+==== Causatives
+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
+The passive affix #sn[] ⟨na-⟩ makes a transitive verb agree with its
+patient instead of its agent. ==== Negation
+The negation prefix is #sn[] ⟨ta-⟩. It negates whatever component of the
+verb is immediately following it.
+
+==== Also on other parts of speech
+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
diff --git a/templates/base.typ b/templates/base.typ
index 154d28d..737b445 100644
--- a/templates/base.typ
+++ b/templates/base.typ
@@ -1,66 +1,83 @@
#let tag = tagname => [ #metadata(tagname) ]
#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}
+ path.split("/").at(-1)
+ } else { txt }
link(path + ".html" + fragtext, texttext)
}
#let conf(
- page-title: "",
- title-override: none,
- subtitle: none,
- doc,
+ 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(
- "\\[\\[([^\\]\\|!]+)(?:\\|([^\\]\\|!]+))?(?:!([^\\]\\|!]+))?\\]\\]"
- )
- show figure.where(kind: "gloss"): set figure(supplement: [Example])
- show figure.where(kind: "gloss"): set figure.caption(position: top)
- show figure: it => {
- html.details(open: it.kind == image or it.kind == table, {
- 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().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)
+ 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 => {
+ html.details(open: it.kind == image or it.kind == table, {
+ html.summary[*#it.caption.supplement #it.caption.counter.display(it.numbering)*: #it.caption.body]
+ it.body
+ })
}
- html.script(src:"/assets/scripts/fuse.min.js")
- html.script(src: "/assets/scripts/search.js")
- })
-
- 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
-
+ 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: actual-title, id: "search-title")
+ context html.meta(
+ content: {
+ let t = query().map(it => it.value).join(" ")
+ if type(t) != str { "" } else { t }
+ },
+ 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 s(script, body) = {
- html.span(class: "scr-"+script, body)
+ html.span(class: "scr-" + script, body)
}
#let sc = smallcaps
diff --git a/templates/gruvbox.tmTheme b/templates/gruvbox.tmTheme
new file mode 100644
index 0000000..b068fc9
--- /dev/null
+++ b/templates/gruvbox.tmTheme
@@ -0,0 +1,766 @@
+
+
+
+
+ comment
+ Based on original gruvbox color scheme.
+ author
+ peaceant
+ name
+ gruvbox
+ settings
+
+
+ settings
+
+ background
+ #282828
+
+ caret
+ #fcf9e3
+
+ foreground
+ #fdf4c1aa
+
+ invisibles
+ #fabd2f
+
+ lineHighlight
+ #3c3836
+
+ selection
+ #504945
+
+ bracketContentsForeground
+ #928374
+
+ bracketsForeground
+ #d5c4a1
+
+ guide
+ #3c3836
+
+ activeGuide
+ #a89984
+
+ stackGuide
+ #665c54
+
+
+
+ name
+ Punctuation
+ scope
+ punctuation.definition.tag
+ settings
+
+ fontStyle
+
+ foreground
+ #83a598
+
+
+
+ name
+ Punctuation
+ scope
+ punctuation.definition.entity
+ settings
+
+ fontStyle
+
+ foreground
+ #d3869b
+
+
+
+ name
+ Constant
+ scope
+ constant
+ settings
+
+ fontStyle
+
+ foreground
+ #d3869b
+
+
+
+ name
+ Constant escape
+ scope
+ constant.character.escape
+ settings
+
+ fontStyle
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Constant other
+ scope
+ constant.other
+ settings
+
+ fontStyle
+
+ foreground
+ #fdf4c1
+
+
+
+ name
+ Entity
+ scope
+ entity
+ settings
+
+ fontStyle
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Keyword
+ scope
+ 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
+ settings
+
+ fontStyle
+
+ foreground
+ #fe8019
+
+
+
+ name
+ Keyword
+ scope
+ keyword, keyword.operator.new, keyword.other, keyword.control
+ settings
+
+ fontStyle
+
+ foreground
+ #fa5c4b
+
+
+
+ name
+ Storage
+ scope
+ storage
+ settings
+
+ fontStyle
+
+ foreground
+ #fa5c4b
+
+
+
+ name
+ String
+ scope
+ string -string.unquoted.old-plist -string.unquoted.heredoc, string.unquoted.heredoc string
+ settings
+
+ fontStyle
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Comment
+ scope
+ comment
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #928374
+
+
+
+ name
+ Regexp
+ scope
+ string.regexp constant.character.escape
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Support
+ scope
+ support
+ settings
+
+ fontStyle
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Variable
+ scope
+ variable
+ settings
+
+ fontStyle
+
+ foreground
+ #fdf4c1
+
+
+
+ name
+ Lang Variable
+ scope
+ variable.language
+ settings
+
+ fontStyle
+
+ foreground
+ #fdf4c1
+
+
+
+ name
+ Function Call
+ scope
+ meta.function-call
+ settings
+
+ foreground
+ #fdf4c1
+
+
+
+ name
+ Invalid
+ scope
+ invalid
+ settings
+
+ background
+ #932b1e
+ foreground
+ #fdf4c1
+
+
+
+ name
+ Embedded Source
+ scope
+ text source, string.unquoted.heredoc, source source
+ settings
+
+ fontStyle
+
+ foreground
+ #fdf4c1
+
+
+
+ name
+ String embedded-source
+ scope
+ string.quoted source
+ settings
+
+ fontStyle
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ String constant
+ scope
+ string
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+
+ name
+ Support.constant
+ scope
+ support.constant
+ settings
+
+ fontStyle
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Support.class
+ scope
+ support.class
+ settings
+
+ fontStyle
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Meta.tag.A
+ scope
+ entity.name.tag
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #8ec07c
+
+
+
+ name
+ Inner tag
+ scope
+ meta.tag, meta.tag entity
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ css colors
+ scope
+ constant.other.color.rgb-value
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ css tag-name
+ scope
+ meta.selector.css entity.name.tag
+ settings
+
+ foreground
+ #fa5c4b
+
+
+
+ name
+ css#id
+ scope
+ meta.selector.css, entity.other.attribute-name.id
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ css.class
+ scope
+ meta.selector.css entity.other.attribute-name.class
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ css property-name:
+ scope
+ support.type.property-name.css
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ css @at-rule
+ scope
+ meta.preprocessor.at-rule keyword.control.at-rule
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ css additional-constants
+ scope
+ meta.property-value constant
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ css additional-constants
+ scope
+ meta.property-value support.constant.named-color.css
+ settings
+
+ foreground
+ #fe8019
+
+
+
+ name
+ css constructor.argument
+ scope
+ meta.constructor.argument.css
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+
+
+
+ name
+ diff.header
+ scope
+ meta.diff, meta.diff.header
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ diff.deleted
+ scope
+ markup.deleted
+ settings
+
+ foreground
+ #fa5c4b
+
+
+
+ name
+ diff.changed
+ scope
+ markup.changed
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ diff.inserted
+ scope
+ markup.inserted
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+
+
+
+ name
+ Bold Markup
+ scope
+ markup.bold
+ settings
+
+ fontStyle
+ bold
+
+
+
+ name
+ Italic Markup
+ scope
+ markup.italic
+ settings
+
+ fontStyle
+ italic
+
+
+
+ name
+ Heading Markup
+ scope
+ markup.heading
+ settings
+
+ fontStyle
+ bold
+ foreground
+ #8ec07c
+
+
+
+
+
+
+
+
+ name
+ PHP: class name
+ scope
+ entity.name.type.class.php
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ PHP: Comment
+ scope
+ keyword.other.phpdoc
+ settings
+
+ fontStyle
+
+ foreground
+ #928374
+
+
+
+
+
+ name
+ CSS: numbers
+ scope
+ constant.numeric.css, keyword.other.unit.css
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ CSS: entity dot, hash, comma, etc.
+ scope
+ punctuation.definition.entity.css
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+
+ name
+ JS: variable
+ scope
+ variable.language.js
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ JS: unquoted labe
+ scope
+ string.unquoted.label.js
+ settings
+
+ foreground
+ #fdf4c1
+
+
+
+
+ name
+ Constant other sql
+ scope
+ constant.other.table-name.sql
+ settings
+
+ fontStyle
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Constant other sql
+ scope
+ constant.other.database-name.sql
+ settings
+
+ fontStyle
+
+ foreground
+ #b8bb26
+
+
+
+
+
+
+
+ name
+ dired directory
+ scope
+ storage.type.dired.item.directory, dired.item.directory
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+
+
+ name
+ orgmode link
+ scope
+ orgmode.link
+ settings
+
+ foreground
+ #fabd2f
+ fontStyle
+ underline
+
+
+
+ name
+ orgmode page
+ scope
+ orgmode.page
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ orgmode break
+ scope
+ orgmode.break
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ orgmode headline
+ scope
+ orgmode.headline
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ orgmode tack
+ scope
+ orgmode.tack
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ orgmode follow up
+ scope
+ orgmode.follow_up
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ orgmode checkbox
+ scope
+ orgmode.checkbox
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ orgmode checkbox summary
+ scope
+ orgmode.checkbox.summary
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ orgmode tags
+ scope
+ orgmode.tags
+ settings
+
+ foreground
+ #fa5c4b
+
+
+
+
+ uuid
+ 06CD1FB2-A00A-4F8C-97B2-60E131980454
+
+
+
diff --git a/templates/utils/lang-mos.typ b/templates/utils/lang-mos.typ
index a66f437..ecd01e4 100644
--- a/templates/utils/lang-mos.typ
+++ b/templates/utils/lang-mos.typ
@@ -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,