Dart backend update and upgrade, visual overhaul, additionally some Ñyqy updates that were meant for master branch #1

Merged
phundrak merged 38 commits from develop into master 2020-05-05 13:44:27 +02:00
44 changed files with 1341 additions and 2887 deletions
+3
View File
@@ -26,3 +26,6 @@ build/
doc/api/
/web/swadesh
/web/tibetan-lexicon-layout
/web/style/.sass-cache/
/web/style/*.css
/web/eittland-files/GIS/
+8 -5
View File
@@ -2,15 +2,18 @@ FROM google/dart:2.7
WORKDIR /app
RUN mkdir /pub-cache
# Get Dart dependencies
RUN mkdir -p /pub-cache
ENV PUB_CACHE=/pub-cache
ENV PATH="${PATH}:/pub-cache/bin"
RUN pub global activate webdev
# RUN pub global activate stagehand
ADD pubspec.* /app/
RUN pub get
ADD . /app/
RUN pub get --offline
# EXPOSE 8010
RUN apt update && apt install ruby-sass ruby-dev build-essential -y
RUN gem install sass-listen
ADD . /app/
CMD ["./start.sh"]
+30
View File
@@ -0,0 +1,30 @@
* TODO Organization of HTML [4/4]
** DONE Add link to images that don’t have any
CLOSED: [2020-05-05 mar. 13:31]
** DONE Add English links detection
CLOSED: [2020-05-05 mar. 13:31]
** DONE Add button to display TOC
CLOSED: [2020-04-28 mar. 22:30]
** DONE Add share links [5/5]
CLOSED: [2020-04-29 mer. 00:03]
*** DONE Add Twitter share
CLOSED: [2020-04-28 mar. 23:22]
*** DONE Add Reddit share
CLOSED: [2020-04-28 mar. 23:23]
*** DONE Add Facebook share
CLOSED: [2020-04-28 mar. 23:23]
*** DONE Add LinkedIn share
CLOSED: [2020-04-29 mer. 00:03]
*** DONE Add Email share
CLOSED: [2020-04-29 mer. 00:03]
* TODO Styling [5/5]
** DONE Images
CLOSED: [2020-05-05 mar. 13:31]
** DONE Mobile version
CLOSED: [2020-05-05 mar. 13:31]
** DONE Tables
CLOSED: [2020-05-02 Sat 12:09]
** DONE Hint bubbles for phonetics (Ñyqy)
CLOSED: [2020-04-28 mar. 22:31]
** DONE Links
CLOSED: [2020-04-29 mer. 00:03]
+1 -2
View File
@@ -4,8 +4,7 @@ services:
web:
build: .
ports:
- "8010:8010"
command: webdev serve --release web:8010 --hostname 0.0.0.0
- "8010:8080"
restart: always
volumes:
- ./web/:/app/web/
+1 -1
View File
@@ -8,7 +8,7 @@ environment:
sdk: '>=2.5.0 <3.0.0'
dependencies:
js: '^0.6.1+1'
html: '^0.14.0+3'
dev_dependencies:
build_runner: ^1.8.0
Executable
+3
View File
@@ -0,0 +1,3 @@
#!/bin/bash
sass --watch web/style/:web/style -tcompressed &
webdev serve --release --hostname 0.0.0.0
+1 -1
View File
@@ -1,5 +1,5 @@
# -*- mode: org; org-confirm-babel-evaluate: nil -*-
#+TITLE: Une Grammaire du TEMPLATE
#+TITLE: TEMPLATE
#+HTML_HEAD: <meta name="description" content="Grammaire détaillée de la langue construite TEMPLATE" />
#+HTML_HEAD: <meta property="og:title" content="Grammaire du TEMPLATE" />
#+HTML_HEAD: <meta property="og:description" content="Grammaire détaillée de la langue construite TEMPLATE" />
-75
View File
@@ -1,75 +0,0 @@
/*
Copyright (C) 2019-2020 Lucien Cartier-Tilet
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
$bg: #2c3e50;
$darkerbg: #34495e;
$textcolor: #ecf0f1;
$tablecolor: #263646;
html {
background-color: $darkerbg;
}
thead {
tr {
@extend html;
}
}
.tooltiptext {
@extend html;
}
.tooltiptext::after {
border-color: $darkerbg transparent transparent transparent;
}
body {
color: $textcolor;
}
.title {
@extend body;
}
a {
@extend body;
}
th {
border: 1px solid $tablecolor;
}
td {
@extend th;
}
pre {
@extend th;
}
table {
border: 2px solid $tablecolor;
}
#content {
background-color: $bg;
}
#postamble{
background-color: $bg;
}
-765
View File
@@ -1,765 +0,0 @@
.org-bold {
/* bold */
font-weight: bold;
}
.org-bold-italic {
/* bold-italic */
font-weight: bold;
font-style: italic;
}
.org-buffer-menu-buffer {
/* buffer-menu-buffer */
font-weight: bold;
}
.org-builtin {
/* font-lock-builtin-face */
color: #7a378b;
}
.org-button {
/* button */
text-decoration: underline;
}
.org-calendar-today {
/* calendar-today */
text-decoration: underline;
}
.org-change-log-acknowledgement {
/* change-log-acknowledgement */
color: #b22222;
}
.org-change-log-conditionals {
/* change-log-conditionals */
color: #a0522d;
}
.org-change-log-date {
/* change-log-date */
color: #8b2252;
}
.org-change-log-email {
/* change-log-email */
color: #a0522d;
}
.org-change-log-file {
/* change-log-file */
color: #0000ff;
}
.org-change-log-function {
/* change-log-function */
color: #a0522d;
}
.org-change-log-list {
/* change-log-list */
color: #a020f0;
}
.org-change-log-name {
/* change-log-name */
color: #008b8b;
}
.org-comint-highlight-input {
/* comint-highlight-input */
font-weight: bold;
}
.org-comint-highlight-prompt {
/* comint-highlight-prompt */
color: #00008b;
}
.org-comment {
/* font-lock-comment-face */
color: #999988;
font-style: italic;
}
.org-comment-delimiter {
/* font-lock-comment-delimiter-face */
color: #999988;
font-style: italic;
}
.org-completions-annotations {
/* completions-annotations */
font-style: italic;
}
.org-completions-common-part {
/* completions-common-part */
color: #000000;
background-color: #ffffff;
}
.org-completions-first-difference {
/* completions-first-difference */
font-weight: bold;
}
.org-constant {
/* font-lock-constant-face */
color: #008b8b;
}
.org-diary {
/* diary */
color: #ff0000;
}
.org-diff-context {
/* diff-context */
color: #7f7f7f;
}
.org-diff-file-header {
/* diff-file-header */
background-color: #b3b3b3;
font-weight: bold;
}
.org-diff-function {
/* diff-function */
background-color: #cccccc;
}
.org-diff-header {
/* diff-header */
background-color: #cccccc;
}
.org-diff-hunk-header {
/* diff-hunk-header */
background-color: #cccccc;
}
.org-diff-index {
/* diff-index */
background-color: #b3b3b3;
font-weight: bold;
}
.org-diff-nonexistent {
/* diff-nonexistent */
background-color: #b3b3b3;
font-weight: bold;
}
.org-diff-refine-change {
/* diff-refine-change */
background-color: #d9d9d9;
}
.org-dired-directory {
/* dired-directory */
color: #0000ff;
}
.org-dired-flagged {
/* dired-flagged */
color: #ff0000;
font-weight: bold;
}
.org-dired-header {
/* dired-header */
color: #228b22;
}
.org-dired-ignored {
/* dired-ignored */
color: #7f7f7f;
}
.org-dired-mark {
/* dired-mark */
color: #008b8b;
}
.org-dired-marked {
/* dired-marked */
color: #ff0000;
font-weight: bold;
}
.org-dired-perm-write {
/* dired-perm-write */
color: #b22222;
}
.org-dired-symlink {
/* dired-symlink */
color: #a020f0;
}
.org-dired-warning {
/* dired-warning */
color: #ff0000;
font-weight: bold;
}
.org-doc {
/* font-lock-doc-face */
color: #8b2252;
}
.org-escape-glyph {
/* escape-glyph */
color: #a52a2a;
}
.org-file-name-shadow {
/* file-name-shadow */
color: #7f7f7f;
}
.org-flyspell-duplicate {
/* flyspell-duplicate */
color: #cdad00;
font-weight: bold;
text-decoration: underline;
}
.org-flyspell-incorrect {
/* flyspell-incorrect */
color: #ff4500;
font-weight: bold;
text-decoration: underline;
}
.org-fringe {
/* fringe */
background-color: #f2f2f2;
}
.org-function-name {
/* font-lock-function-name-face */
color: teal;
}
.org-header-line {
/* header-line */
color: #333333;
background-color: #e5e5e5;
}
.org-help-argument-name {
/* help-argument-name */
font-style: italic;
}
.org-highlight {
/* highlight */
background-color: #b4eeb4;
}
.org-holiday {
/* holiday */
background-color: #ffc0cb;
}
.org-isearch {
/* isearch */
color: #b0e2ff;
background-color: #cd00cd;
}
.org-isearch-fail {
/* isearch-fail */
background-color: #ffc1c1;
}
.org-italic {
/* italic */
font-style: italic;
}
.org-keyword {
/* font-lock-keyword-face */
color: #0086b3;
}
.org-lazy-highlight {
/* lazy-highlight */
background-color: #afeeee;
}
.org-link {
/* link */
color: #0000ff;
text-decoration: underline;
}
.org-link-visited {
/* link-visited */
color: #8b008b;
text-decoration: underline;
}
.org-log-edit-header {
/* log-edit-header */
color: #a020f0;
}
.org-log-edit-summary {
/* log-edit-summary */
color: #0000ff;
}
.org-log-edit-unknown-header {
/* log-edit-unknown-header */
color: #b22222;
}
.org-match {
/* match */
background-color: #ffff00;
}
.org-next-error {
/* next-error */
background-color: #eedc82;
}
.org-nobreak-space {
/* nobreak-space */
color: #a52a2a;
text-decoration: underline;
}
.org-org-archived {
/* org-archived */
color: #7f7f7f;
}
.org-org-block {
/* org-block */
color: #7f7f7f;
}
.org-org-block-begin-line {
/* org-block-begin-line */
color: #b22222;
}
.org-org-block-end-line {
/* org-block-end-line */
color: #b22222;
}
.org-org-checkbox {
/* org-checkbox */
font-weight: bold;
}
.org-org-checkbox-statistics-done {
/* org-checkbox-statistics-done */
color: #228b22;
font-weight: bold;
}
.org-org-checkbox-statistics-todo {
/* org-checkbox-statistics-todo */
color: #ff0000;
font-weight: bold;
}
.org-org-clock-overlay {
/* org-clock-overlay */
background-color: #ffff00;
}
.org-org-code {
/* org-code */
color: #7f7f7f;
}
.org-org-column {
/* org-column */
background-color: #e5e5e5;
}
.org-org-column-title {
/* org-column-title */
background-color: #e5e5e5;
font-weight: bold;
text-decoration: underline;
}
.org-org-date {
/* org-date */
color: #a020f0;
text-decoration: underline;
}
.org-org-document-info {
/* org-document-info */
color: #191970;
}
.org-org-document-info-keyword {
/* org-document-info-keyword */
color: #7f7f7f;
}
.org-org-document-title {
/* org-document-title */
color: #191970;
font-size: 144%;
font-weight: bold;
}
.org-org-done {
/* org-done */
color: #228b22;
font-weight: bold;
}
.org-org-drawer {
/* org-drawer */
color: #0000ff;
}
.org-org-ellipsis {
/* org-ellipsis */
color: #b8860b;
text-decoration: underline;
}
.org-org-footnote {
/* org-footnote */
color: #a020f0;
text-decoration: underline;
}
.org-org-formula {
/* org-formula */
color: #b22222;
}
.org-org-headline-done {
/* org-headline-done */
color: #bc8f8f;
}
.org-org-hide {
/* org-hide */
color: #ffffff;
}
.org-org-latex-and-export-specials {
/* org-latex-and-export-specials */
color: #8b4513;
}
.org-org-level-1 {
/* org-level-1 */
color: #0000ff;
}
.org-org-level-2 {
/* org-level-2 */
color: #a0522d;
}
.org-org-level-3 {
/* org-level-3 */
color: #a020f0;
}
.org-org-level-4 {
/* org-level-4 */
color: #b22222;
}
.org-org-level-5 {
/* org-level-5 */
color: #228b22;
}
.org-org-level-6 {
/* org-level-6 */
color: #008b8b;
}
.org-org-level-7 {
/* org-level-7 */
color: #7a378b;
}
.org-org-level-8 {
/* org-level-8 */
color: #8b2252;
}
.org-org-link {
/* org-link */
color: #0000ff;
text-decoration: underline;
}
.org-org-meta-line {
/* org-meta-line */
color: #b22222;
}
.org-org-mode-line-clock {
/* org-mode-line-clock */
color: #000000;
background-color: #bfbfbf;
}
.org-org-mode-line-clock-overrun {
/* org-mode-line-clock-overrun */
color: #000000;
background-color: #ff0000;
}
.org-org-quote {
/* org-quote */
color: #7f7f7f;
}
.org-org-scheduled {
/* org-scheduled */
color: #006400;
}
.org-org-scheduled-previously {
/* org-scheduled-previously */
color: #b22222;
}
.org-org-scheduled-today {
/* org-scheduled-today */
color: #006400;
}
.org-org-sexp-date {
/* org-sexp-date */
color: #a020f0;
}
.org-org-special-keyword {
/* org-special-keyword */
color: #a020f0;
}
.org-org-table {
/* org-table */
color: #0000ff;
}
.org-org-tag {
/* org-tag */
font-weight: bold;
}
.org-org-target {
/* org-target */
text-decoration: underline;
}
.org-org-time-grid {
/* org-time-grid */
color: #b8860b;
}
.org-org-todo {
/* org-todo */
color: #ff0000;
font-weight: bold;
}
.org-org-upcoming-deadline {
/* org-upcoming-deadline */
color: #b22222;
}
.org-org-verbatim {
/* org-verbatim */
color: #7f7f7f;
}
.org-org-verse {
/* org-verse */
color: #7f7f7f;
}
.org-org-warning {
/* org-warning */
color: #ff0000;
font-weight: bold;
}
.org-outline-1 {
/* outline-1 */
color: #0000ff;
}
.org-outline-2 {
/* outline-2 */
color: #a0522d;
}
.org-outline-3 {
/* outline-3 */
color: #a020f0;
}
.org-outline-4 {
/* outline-4 */
color: #b22222;
}
.org-outline-5 {
/* outline-5 */
color: #228b22;
}
.org-outline-6 {
/* outline-6 */
color: #008b8b;
}
.org-outline-7 {
/* outline-7 */
color: #7a378b;
}
.org-outline-8 {
/* outline-8 */
color: #8b2252;
}
.org-preprocessor {
/* font-lock-preprocessor-face */
color: #7a378b;
}
.org-query-replace {
/* query-replace */
color: #b0e2ff;
background-color: #cd00cd;
}
.org-regexp-grouping-backslash {
/* font-lock-regexp-grouping-backslash */
font-weight: bold;
}
.org-regexp-grouping-construct {
/* font-lock-regexp-grouping-construct */
font-weight: bold;
}
.org-region {
/* region */
background-color: #eedc82;
}
.org-secondary-selection {
/* secondary-selection */
background-color: #ffff00;
}
.org-shadow {
/* shadow */
color: #7f7f7f;
}
.org-show-paren-match {
/* show-paren-match */
background-color: #40e0d0;
}
.org-show-paren-mismatch {
/* show-paren-mismatch */
color: #ffffff;
background-color: #a020f0;
}
.org-string {
/* font-lock-string-face */
color: #dd1144;
}
.org-tool-bar {
/* tool-bar */
color: #000000;
background-color: #bfbfbf;
}
.org-tooltip {
/* tooltip */
color: #000000;
background-color: #ffffe0;
}
.org-trailing-whitespace {
/* trailing-whitespace */
background-color: #ff0000;
}
.org-type {
/* font-lock-type-face */
color: #228b22;
}
.org-underline {
/* underline */
text-decoration: underline;
}
.org-variable-name {
/* font-lock-variable-name-face */
color: teal;
}
.org-warning {
/* font-lock-warning-face */
color: #ff0000;
font-weight: bold;
}
.org-widget-button {
/* widget-button */
font-weight: bold;
}
.org-widget-button-pressed {
/* widget-button-pressed */
color: #ff0000;
}
.org-widget-documentation {
/* widget-documentation */
color: #006400;
}
.org-widget-field {
/* widget-field */
background-color: #d9d9d9;
}
.org-widget-inactive {
/* widget-inactive */
color: #7f7f7f;
}
.org-widget-single-line-field {
/* widget-single-line-field */
background-color: #d9d9d9;
}
/*# sourceMappingURL=htmlize.css.map */
-620
View File
@@ -1,620 +0,0 @@
.org-bold {
font-weight: 700;
}
.org-bold-italic {
font-weight: 700;
font-style: italic;
}
.org-buffer-menu-buffer {
font-weight: 700;
}
.org-builtin {
color: #7a378b;
}
.org-button {
text-decoration: underline;
}
.org-calendar-today {
text-decoration: underline;
}
.org-change-log-acknowledgement {
color: #b22222;
}
.org-change-log-conditionals {
color: sienna;
}
.org-change-log-date {
color: #8b2252;
}
.org-change-log-email {
color: sienna;
}
.org-change-log-file {
color: #00f;
}
.org-change-log-function {
color: sienna;
}
.org-change-log-list {
color: #a020f0;
}
.org-change-log-name {
color: #008b8b;
}
.org-comint-highlight-input {
font-weight: 700;
}
.org-comint-highlight-prompt {
color: #00008b;
}
.org-comment {
color: #998;
font-style: italic;
}
.org-comment-delimiter {
color: #998;
font-style: italic;
}
.org-completions-annotations {
font-style: italic;
}
.org-completions-common-part {
color: #000;
background-color: #fff;
}
.org-completions-first-difference {
font-weight: 700;
}
.org-constant {
color: #008b8b;
}
.org-diary {
color: red;
}
.org-diff-context {
color: #7f7f7f;
}
.org-diff-file-header {
background-color: #b3b3b3;
font-weight: 700;
}
.org-diff-function {
background-color: #ccc;
}
.org-diff-header {
background-color: #ccc;
}
.org-diff-hunk-header {
background-color: #ccc;
}
.org-diff-index {
background-color: #b3b3b3;
font-weight: 700;
}
.org-diff-nonexistent {
background-color: #b3b3b3;
font-weight: 700;
}
.org-diff-refine-change {
background-color: #d9d9d9;
}
.org-dired-directory {
color: #00f;
}
.org-dired-flagged {
color: red;
font-weight: 700;
}
.org-dired-header {
color: #228b22;
}
.org-dired-ignored {
color: #7f7f7f;
}
.org-dired-mark {
color: #008b8b;
}
.org-dired-marked {
color: red;
font-weight: 700;
}
.org-dired-perm-write {
color: #b22222;
}
.org-dired-symlink {
color: #a020f0;
}
.org-dired-warning {
color: red;
font-weight: 700;
}
.org-doc {
color: #8b2252;
}
.org-escape-glyph {
color: brown;
}
.org-file-name-shadow {
color: #7f7f7f;
}
.org-flyspell-duplicate {
color: #cdad00;
font-weight: 700;
text-decoration: underline;
}
.org-flyspell-incorrect {
color: #ff4500;
font-weight: 700;
text-decoration: underline;
}
.org-fringe {
background-color: #f2f2f2;
}
.org-function-name {
color: teal;
}
.org-header-line {
color: #333;
background-color: #e5e5e5;
}
.org-help-argument-name {
font-style: italic;
}
.org-highlight {
background-color: #b4eeb4;
}
.org-holiday {
background-color: pink;
}
.org-isearch {
color: #b0e2ff;
background-color: #cd00cd;
}
.org-isearch-fail {
background-color: #ffc1c1;
}
.org-italic {
font-style: italic;
}
.org-keyword {
color: #0086b3;
}
.org-lazy-highlight {
background-color: #afeeee;
}
.org-link {
color: #00f;
text-decoration: underline;
}
.org-link-visited {
color: #8b008b;
text-decoration: underline;
}
.org-log-edit-header {
color: #a020f0;
}
.org-log-edit-summary {
color: #00f;
}
.org-log-edit-unknown-header {
color: #b22222;
}
.org-match {
background-color: #ff0;
}
.org-next-error {
background-color: #eedc82;
}
.org-nobreak-space {
color: brown;
text-decoration: underline;
}
.org-org-archived {
color: #7f7f7f;
}
.org-org-block {
color: #7f7f7f;
}
.org-org-block-begin-line {
color: #b22222;
}
.org-org-block-end-line {
color: #b22222;
}
.org-org-checkbox {
font-weight: 700;
}
.org-org-checkbox-statistics-done {
color: #228b22;
font-weight: 700;
}
.org-org-checkbox-statistics-todo {
color: red;
font-weight: 700;
}
.org-org-clock-overlay {
background-color: #ff0;
}
.org-org-code {
color: #7f7f7f;
}
.org-org-column {
background-color: #e5e5e5;
}
.org-org-column-title {
background-color: #e5e5e5;
font-weight: 700;
text-decoration: underline;
}
.org-org-date {
color: #a020f0;
text-decoration: underline;
}
.org-org-document-info {
color: #191970;
}
.org-org-document-info-keyword {
color: #7f7f7f;
}
.org-org-document-title {
color: #191970;
font-size: 144%;
font-weight: 700;
}
.org-org-done {
color: #228b22;
font-weight: 700;
}
.org-org-drawer {
color: #00f;
}
.org-org-ellipsis {
color: #b8860b;
text-decoration: underline;
}
.org-org-footnote {
color: #a020f0;
text-decoration: underline;
}
.org-org-formula {
color: #b22222;
}
.org-org-headline-done {
color: #bc8f8f;
}
.org-org-hide {
color: #fff;
}
.org-org-latex-and-export-specials {
color: #8b4513;
}
.org-org-level-1 {
color: #00f;
}
.org-org-level-2 {
color: sienna;
}
.org-org-level-3 {
color: #a020f0;
}
.org-org-level-4 {
color: #b22222;
}
.org-org-level-5 {
color: #228b22;
}
.org-org-level-6 {
color: #008b8b;
}
.org-org-level-7 {
color: #7a378b;
}
.org-org-level-8 {
color: #8b2252;
}
.org-org-link {
color: #00f;
text-decoration: underline;
}
.org-org-meta-line {
color: #b22222;
}
.org-org-mode-line-clock {
color: #000;
background-color: #bfbfbf;
}
.org-org-mode-line-clock-overrun {
color: #000;
background-color: red;
}
.org-org-quote {
color: #7f7f7f;
}
.org-org-scheduled {
color: #006400;
}
.org-org-scheduled-previously {
color: #b22222;
}
.org-org-scheduled-today {
color: #006400;
}
.org-org-sexp-date {
color: #a020f0;
}
.org-org-special-keyword {
color: #a020f0;
}
.org-org-table {
color: #00f;
}
.org-org-tag {
font-weight: 700;
}
.org-org-target {
text-decoration: underline;
}
.org-org-time-grid {
color: #b8860b;
}
.org-org-todo {
color: red;
font-weight: 700;
}
.org-org-upcoming-deadline {
color: #b22222;
}
.org-org-verbatim {
color: #7f7f7f;
}
.org-org-verse {
color: #7f7f7f;
}
.org-org-warning {
color: red;
font-weight: 700;
}
.org-outline-1 {
color: #00f;
}
.org-outline-2 {
color: sienna;
}
.org-outline-3 {
color: #a020f0;
}
.org-outline-4 {
color: #b22222;
}
.org-outline-5 {
color: #228b22;
}
.org-outline-6 {
color: #008b8b;
}
.org-outline-7 {
color: #7a378b;
}
.org-outline-8 {
color: #8b2252;
}
.org-preprocessor {
color: #7a378b;
}
.org-query-replace {
color: #b0e2ff;
background-color: #cd00cd;
}
.org-regexp-grouping-backslash {
font-weight: 700;
}
.org-regexp-grouping-construct {
font-weight: 700;
}
.org-region {
background-color: #eedc82;
}
.org-secondary-selection {
background-color: #ff0;
}
.org-shadow {
color: #7f7f7f;
}
.org-show-paren-match {
background-color: #40e0d0;
}
.org-show-paren-mismatch {
color: #fff;
background-color: #a020f0;
}
.org-string {
color: #d14;
}
.org-tool-bar {
color: #000;
background-color: #bfbfbf;
}
.org-tooltip {
color: #000;
background-color: #ffffe0;
}
.org-trailing-whitespace {
background-color: red;
}
.org-type {
color: #228b22;
}
.org-underline {
text-decoration: underline;
}
.org-variable-name {
color: teal;
}
.org-warning {
color: red;
font-weight: 700;
}
.org-widget-button {
font-weight: 700;
}
.org-widget-button-pressed {
color: red;
}
.org-widget-documentation {
color: #006400;
}
.org-widget-field {
background-color: #d9d9d9;
}
.org-widget-inactive {
color: #7f7f7f;
}
.org-widget-single-line-field {
background-color: #d9d9d9;
}
/*# sourceMappingURL=htmlize.min.css.map */
-74
View File
@@ -1,74 +0,0 @@
/*
Copyright (C) 2019-2020 Lucien Cartier-Tilet
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
$bg: #eee;
$darkerbg: #ddd;
$textcolor: #444;
html {
background-color: $bg;
}
thead {
tr {
@extend html;
}
}
.tooltiptext {
@extend html;
}
.tooltiptext::after {
border-color: $darkerbg transparent transparent transparent;
}
body {
color: $textcolor;
}
.title {
@extend body;
}
a {
@extend body;
}
th {
border: 1px solid $textcolor;
}
td {
@extend th;
}
pre {
@extend th;
}
table {
border: 2px solid $textcolor;
}
#content {
background-color: $darkerbg;
}
#postamble{
@extend #content;
}
-240
View File
@@ -1,240 +0,0 @@
/*
Copyright (C) 2019-2020 Lucien Cartier-Tilet
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic|Roboto+Slab:400,700|Inconsolata:400,700);
@font-face {
font-family: "DoulosSIL";
font-display: swap;
src: url("https://langue.phundrak.com/fonts/DoulosSIL-R.woff");
}
@font-face {
font-family: "Noto Sans Runes";
font-display: swap;
src: url("../fonts/NotoSansRunic-Regular.ttf");
}
@font-face {
font-family: "Helvetica Neue";
font-display: swap;
src: url("../fonts/HelveticaNeue.ttf");
}
body {
font-family: "Noto Sans Runes", "DoulosSIL", "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
font-weight: normal;
overflow-x: hidden;
font-size: 105%;
height: 100%;
margin: 10px;
}
#postamble {
text-align: center;
margin-bottom: 20px;
}
#content {
max-width: 1100px;
margin: 20px auto;
padding: 20px;
box-shadow: 5px 5px 7px rgba(1, 1, 1, .6);
}
hr {
display: block;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: auto;
margin-right: auto;
border-style: inset;
border-width: 1px;
}
.outline-2 {
margin: 0 2px;
padding: 0 10px;
}
.outline-text-2 {
@extend .outline-2;
margin-bottom: 20px;
}
.outline-4 {
@extend .outline-2;
}
.outline-text-4 {
@extend .outline-text-2;
}
.outline-5 {
@extend .outline-2;
}
.outline-text-5 {
@extend .outline-text-2;
}
.outline-6 {
@extend .outline-2;
}
.outline-text-6 {
@extend .outline-text-2;
}
h1 {
@extend legend;
font-size: 4em;
box-shadow: inset 0 -50px 0 #1abc9c;
}
h2 {
@extend legend;
font-size: 150%;
box-shadow: inset 0 -20px 0 #16a085;
}
h3 {
@extend legend;
font-size: 125%;
box-shadow: inset 0 -16px 0 #27ae60;
}
h4 {
@extend legend;
font-size: 115%;
box-shadow: inset 0 -15px 0 #e67e22;
}
h5 {
@extend legend;
font-size: 110%;
box-shadow: inset 0 -14px 0 #9b59b6;
}
h4,
h5 {
font-weight: 300;
}
p {
text-align: justify;
}
$linkColor: #9b59b6;
a {
text-decoration: none;
box-shadow: inset 0 -3px 0 $linkColor;
transition: all .3s ease-out;
}
a:hover {
box-shadow: inset 0 -21px 0 $linkColor;
transition: all .3s ease-in;
}
a[href^="img/"],
a[href^="img/"]:hover {
box-shadow: 0 0;
}
.figure {
display: block;
overflow-x: auto;
p {
margin: 0 0;
}
}
.largetable {
display: block;
overflow-x: auto;
}
img {
margin: auto;
}
legend {
font-family: "Roboto Slab", "ff-tisa-web-pro", "Georgia", Arial, sans-serif;
font-weight: 700;
display: inline-block;
}
table {
margin: auto;
border-collapse: collapse;
}
th,
td {
padding: 10px;
}
.vertical {
writing-mode: vertical-rl;
text-align: right;
}
pre {
box-shadow: 3px 3px 3px rgba(1, 1, 1, .6);
}
/* scrollbar *****************************************************************/
/* width */
::-webkit-scrollbar {
width: 5px;
height: 5px;
}
/* Track */
::-webkit-scrollbar-track {
border-radius: 10px;
}
/* Handle */
::-webkit-scrollbar-thumb {
background: #7f8c8d;
border-radius: 10px;
}
/* Theme switcher ************************************************************/
.themeBtn {
position: fixed;
bottom: 25px;
right: 25px;
padding-top:10px;
height: 40px;
width: 50px;
border-radius: 25px;
background-color: #1e5b50;
text-align: center;
box-shadow: 3px 3px 6px rgba(1, 1, 1, .6);
cursor: pointer;
.fas {
font-size: 30px;
}
}
-68
View File
@@ -1,68 +0,0 @@
/*
Copyright (C) 2019-2020 Lucien Cartier-Tilet
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
.tooltip {
position: relative;
display: inline-block;
border-bottom: 1px dotted #1e5b50;
.tooltiptext {
visibility: hidden;
width: 120px;
text-align: center;
padding: 5px 0;
border-radius: 6px;
/* position the tooltip text */
position: absolute;
z-index: 1;
bottom: 125;
left: 50%;
margin-left: -60%;
/* Fade in tooltip */
opacity: 0;
transition: opacity 0.3s;
}
.tooltiptext::after {
content: "";
top: 100%;
margin-left: -5%;
border-width: 5px;
border-style: solid;
transition: opacity 0.2s;
}
}
.tooltip:hover {
.tooltiptext {
visibility: visible;
opacity: 1;
}
}
.tooltiptext {
padding: 7px !important;
}
.largetable {
$tablepadding: 40px;
padding-top: $tablepadding !important;
padding-bottom: $tablepadding !important;
}
-11
View File
@@ -1,11 +0,0 @@
@JS()
library cookie;
import 'package:js/js.dart';
@JS()
class Cookies {
// external factory Cookie();
external static String get(String name);
external static void set(String name, String value);
}
+7 -64
View File
@@ -1,66 +1,9 @@
@JS()
library main;
import './reorganize_html.dart' show reorganizeHtml;
import './theme.dart' show enableThemeChanger, setTheme;
import 'dart:html';
import 'package:js/js.dart';
import './cookie.dart';
void main() {
reorganizeHtml();
createThemeSwitcher();
themeSwitch(isThemeDark());
querySelector('.themeBtn').onClick.listen(themeSwitchMouse);
}
String cookieThemeName = 'theme';
void createThemeSwitcher() {
// set the correct CSS depending on the cookie, dark is enabled by default
var isDark = isThemeDark();
// Set the correct symbol in the theme switcher button
querySelector('body').append(DivElement()..className = 'themeBtn');
querySelector('.themeBtn')
.children
.add(Element.tag('i')..className = 'fas fa-' + (isDark ? 'sun' : 'moon'));
}
bool isThemeDark() {
if (Cookies.get(cookieThemeName) == 'light') {
return false;
}
Cookies.set(cookieThemeName, 'dark');
return true;
}
void reorganizeHtml() {
// Add a <hr> element after the content div
querySelector('#content').appendHtml('<hr>');
// Move the postamble in the content div
querySelector('#content').append(querySelector('#postamble'));
for (var table in querySelectorAll('table')) {
var largetable = DivElement();
largetable.className = 'largetable';
table.before(largetable);
largetable.children.add(table);
}
}
bool setTheme(bool dark) {
Cookies.set(cookieThemeName, (dark ? 'dark' : 'light'));
return !dark;
}
void themeSwitch(bool isDark) {
querySelector('.fas').className = 'fas fa-' + (isDark ? 'sun' : 'moon');
querySelector('#theme').attributes['href'] =
'https://langue.phundrak.com/css/' + (isDark ? 'dark' : 'light') + '.css';
}
void themeSwitchMouse(MouseEvent event) {
bool isDark = setTheme(!isThemeDark());
themeSwitch(isDark);
Future<void> main() async {
await setTheme();
await reorganizeHtml().then((_) {
enableThemeChanger();
});
}
+149
View File
@@ -0,0 +1,149 @@
import 'dart:html';
import './parse_sitemap.dart' show parseSitemap;
// Returns the title of the current webpage
String getPageTitle() {
return querySelector('title').text;
}
Element makeIcon(List<String> classes, [String id]) {
final icon = Element.tag('i')..classes.addAll(classes);
if (id != null) {
icon.attributes['id'] = id;
}
return icon;
}
Future<Element> makeToc() async {
return Element.li()
..attributes['id'] = 'toc-drop'
..classes.addAll(['nav-item', 'has-dropdown'])
..append(Element.a()
..attributes['href'] = 'javascript:void(0)'
..append(makeIcon(['fas', 'fa-list-ol'], 'tocBtn')));
}
Future<Element> makePages() async {
var pages = Element.ul()
..attributes['id'] = 'drop-page'
..classes.add('dropdown');
await parseSitemap().then((final sitemap) => {
sitemap.forEach((url, name) {
final link = Element.li()
..classes.add('dropdown-item')
..insertAdjacentElement(
'afterBegin',
Element.a()
..attributes['href'] = url
..innerText = name);
pages.insertAdjacentElement('beforeEnd', link);
})
});
return Element.li()
..append(Element.a()
..attributes['href'] = 'javascript:void(0)'
..append(makeIcon(['fas', 'fa-flag'])))
..classes.addAll(['nav-item', 'has-dropdown'])
..insertAdjacentElement('beforeEnd', pages);
}
Element makeShareLink(Element icon, String url) {
return Element.li()
..classes.add('dropdown-item')
..append(Element.a()
..attributes['href'] = url
..attributes['target'] = '_blank'
..append(icon));
}
Future<Element> makeShare() async {
return Element.li()
..classes.addAll(['nav-item', 'has-dropdown'])
..append(Element.a()
..attributes['href'] = 'javascript:void(0)'
..append(makeIcon(['fas', 'fa-share-alt'])))
..append(Element.ul()
..classes.add('dropdown')
..attributes['id'] = 'drop-share'
..append(makeShareLink(
makeIcon(['fab', 'fa-twitter-square']),
'https://twitter.com/share?text=${getPageTitle()}'
'&url=${window.location.href}'))
..append(makeShareLink(makeIcon(['fab', 'fa-reddit-square']),
'https://www.reddit.com/submit?title=${getPageTitle()}s&url=${window.location.href}'))
..append(makeShareLink(makeIcon(['fas', 'fa-envelope-square']),
'mailto:?subject=${getPageTitle}&body=${window.location.href}'))
..append(makeShareLink(
makeIcon(['fab', 'fa-linkedin']),
'https://www.linkedin.com/shareArticle?mini=true&url=${window.location.href}'
'&title=${getPageTitle()}'))
..append(makeShareLink(makeIcon(['fab', 'fa-facebook-square']),
'https://www.facebook.com/sharer/sharer.php?u=${window.location.href}')));
}
Future<Element> makeThemeChanger() async {
Element makeThemeItem(String t_btnId, Element t_icon, String t_text) {
return Element.li()
..classes.add('dropdown-item')
..append(Element.span()
..attributes['id'] = t_btnId
..append(t_icon)
..appendText(' $t_text'));
}
return Element.li()
..classes.addAll(['nav-item', 'has-dropdown'])
..append(Element.a()
..attributes['href'] = 'javascript:void(0)'
..append(Element.span()
..classes.add('fa-stack')
..style.verticalAlign = 'top'
..append(makeIcon(['fas', 'fa-sun', 'fa-stack-1x'])
..style.fontSize = '0.9em')
..append(makeIcon(['fas', 'fa-moon', 'fa-stack-1x']))))
..append(Element.ul()
..classes.add('dropdown')
..attributes['id'] = 'theme-dropdown'
..append(makeThemeItem('lightBtn', makeIcon(['fas', 'fa-sun']), 'Clair'))
..append(
makeThemeItem('darkBtn', makeIcon(['fas', 'fa-lightbulb']), 'Sombre'))
..append(
makeThemeItem('blackBtn', makeIcon(['fas', 'fa-moon']), 'Noir')));
}
Future<Element> makeHome() async {
return Element.li()
..classes.add('nav-item')
..insertAdjacentElement(
'afterBegin',
Element.a()
..attributes['href'] = '/'
..append(makeIcon(['fas', 'fa-home'])));
}
// Add a navbar atop of the HTML body, containing two buttons:
// - One back to home
// - A dropdown to each page detected in the sitemap
Future<Element> makeNavbar() async {
final navbar_content = Element.ul()..classes.add('navbar-nav');
final home = await makeHome();
final pages = await makePages();
final toc = await makeToc();
final share = await makeShare();
final theme = await makeThemeChanger();
navbar_content
..append(home)
..append(pages)
..append(toc)
..append(share)
..append(theme);
// Navbar content added to navbar
final navbar = Element.nav()
..classes.add('navbar')
..append(navbar_content);
return navbar;
}
+43
View File
@@ -0,0 +1,43 @@
import 'dart:html' show HttpRequest;
import 'package:html/parser.dart' show parse;
import 'package:html/dom.dart' show Element;
// Get the sitemap content
Future<String> getSitemap() async {
const path = 'sitemap.html';
try {
return await HttpRequest.getString(path);
} catch (e) {
print('Couldn’t open $path');
}
return 'Error';
}
// Parse the list of elements and detect pages from this list
Map<String, String> detectPages(List<Element> sitemap, [String prefix]) {
final links = <String, String>{};
for (var elem in sitemap) {
if (elem.outerHtml.contains('index')) {
continue;
} else if (elem.innerHtml.startsWith('<a')) {
elem = elem.firstChild;
final url = elem.attributes['href'];
final text = elem.firstChild.text;
links[url] = (prefix == null) ? text : '$text ($prefix)';
} else {
final prefix = elem.firstChild.text;
final ul = elem.children[0].children;
links.addAll(detectPages(ul, prefix));
}
}
return links;
}
// This function returns a Map which contains all links to languages detected
// from the sitemap.
Future<Map<String, String>> parseSitemap() async {
final content = await getSitemap();
final sitemap = parse(content).getElementsByClassName('org-ul')[0].children;
return detectPages(sitemap);
}
+71
View File
@@ -0,0 +1,71 @@
import 'dart:html';
import './navbar.dart' show makeNavbar;
Future<Element> makeHeader() async {
var header = Element.tag('header');
header
..append(Element.img()
..attributes['src'] =
'https://cdn.phundrak.com/img/mahakala-monochrome.png'
..attributes['alt'] = 'Logo de Phundrak'
..attributes['heigh'] = '150px'
..attributes['width'] = '150px')
..append(querySelector('h1'));
var subt = querySelector('.subtitle');
if (subt != null) {
header.append(subt);
}
return header;
}
Future<void> wrapTables() async {
for (var table in querySelectorAll('table')) {
var largetable = DivElement()..className = 'largetable';
table.before(largetable);
largetable.children.add(table);
}
}
// All images that are not nested inside a link will be linkified to themselves.
void linkifyImg() {
querySelectorAll('img').forEach((img) {
print(img.attributes['src']);
print(img.parent.tagName);
if (img.parent.tagName == 'P') {
final link = Element.a()..attributes['href'] = img.attributes['src'];
img.insertAdjacentElement('beforeBegin', link);
link.append(img);
}
});
}
Future<void> reorganizeHtml() async {
final content = querySelector('#content');
// Make navbar
await makeNavbar().then((navbar) {
querySelector('body').insertAdjacentElement('afterBegin', navbar);
});
// Make header
await makeHeader().then((header) {
content.insertAdjacentElement('beforeBegin', header);
final subtitle = querySelector('.subtitle');
if (subtitle != null) {
header.append(subtitle);
}
});
// wrap tables in container for better SCSS display
await wrapTables();
linkifyImg();
// Add correct class to TOC
querySelector('#toc-drop')
.append(querySelector('#table-of-contents')..classes.add('dropdown'));
// Remove all <br> tags from HTML
querySelectorAll('br').forEach((br) => br.remove());
}
+53
View File
@@ -0,0 +1,53 @@
import 'dart:html';
class Theme {
String _name;
String _icon;
Theme(String t_name, String t_icon) {
_name = t_name;
_icon = t_icon;
}
String getIcon() => _icon;
String getName() => _name;
}
final themes = {
'light': Theme('light', 'fa-sun'),
'dark': Theme('dark', 'fa-lightbulb'),
'black': Theme('black', 'fa-moon')
};
final localStorage = window.localStorage;
var currentTheme = themes[localStorage['theme']];
void enableThemeChanger() {
final darkBtn = querySelector('#darkBtn');
final lightBtn = querySelector('#lightBtn');
final blackBtn = querySelector('#blackBtn');
lightBtn.onClick.listen((_) => switchTheme(themes['light']));
darkBtn.onClick.listen((_) => switchTheme(themes['dark']));
blackBtn.onClick.listen((_) => switchTheme(themes['black']));
}
Future<void> setTheme() async {
if (currentTheme == null) {
currentTheme = themes['light'];
localStorage['theme'] = currentTheme.getName();
}
querySelector('body')
..classes.clear()
..classes.add(currentTheme.getName());
}
void switchTheme(Theme currentTheme) {
// Set HTML theme
querySelector('body')
..classes.clear()
..classes.add(currentTheme.getName());
// Set storage theme
localStorage['theme'] = currentTheme.getName();
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 MiB

Binary file not shown.
Binary file not shown.
+5 -12
View File
@@ -1,5 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Une Grammaire de l’Eittlandais
#+TITLE: Eittlandais
#+LANGUAGE: fr
#+HTML_HEAD: <meta name="description" content="Grammaire détaillée de l’Eittlandais" />
#+HTML_HEAD: <meta property="og:title" content="Grammaire de l’Eittlandais" />
@@ -195,7 +195,6 @@
similaire à celui du sud de l’Angleterre, grâce au Gulf Stream malgré sa
latitude élevée, similaire à celle de l’Écosse.
#+ATTR_HTML: :width 100%
#+ATTR_LATEX: :float sideways
#+CAPTION: Biomes eittlandais
#+NAME: img:map-biomes
@@ -343,13 +342,11 @@
Kalmar reconnu Eittlainde comme pays indépendant, mais intégra tout de même
les colonies groënlandaises de l’Eittlande à l’Union.
#+ATTR_HTML: :width 100%
#+ATTR_LATEX: :float sideways
#+CAPTION: États eittlandais
#+NAME: img:eittland-states
[[file:img/eittland/map-political.png][file:img/eittland/map-political.png]]
#+ATTR_HTML: :width 100%
#+ATTR_LATEX: :float sideways
#+CAPTION: Provinces eittlandaises
#+NAME: img:eittland-provinces
@@ -459,7 +456,6 @@
l’Écosse et le nord de l’Angleterre.
#+NAME: img:map-world
#+ATTR_HTML: :width 100%
#+CAPTION: Emplacement d’Eittlande dans l’Océan Atlantique.
[[file:img/eittland/map-world.jpg][file:img/eittland/map-world.jpg]]
@@ -467,7 +463,6 @@
principaux lieux et principales villes du pays avec la carte [[img:map-simple]]
#+NAME: img:map-simple
#+ATTR_HTML: :width 100%
#+CAPTION: Carte simplifiée d’Eittlande
[[file:img/eittland/map-simple.jpg][file:img/eittland/map-simple.jpg]]
@@ -476,7 +471,6 @@
#+NAME: img:map-typo
#+ATTR_LATEX: :float sideways
#+ATTR_HTML: :width 100%
#+CAPTION: Topologie d’Eittlande
[[file:img/eittland/map-hq.jpg][file:img/eittland/map-hq.jpg]]
@@ -651,7 +645,6 @@
#+ATTR_LATEX: :float sideways
#+CAPTION: Liste des rois Eittlandais de 915 à 1392
| <4> | <4> | <4> | <4> | <4> | <4> | <4> | <4> | <4> | <4> |
| | | | | | | | | | |
| roi | naissance | mort | âge | règne | co-roi | naissance | mort | âge | règne |
|-------------------------------+-----------+------+-----+-----------+---------------------------------+-----------+------+-----+-----------|
| Ásmundor I, Ingólfrson | 876 | 932 | 56 | 915-935 | - | | | | |
@@ -977,14 +970,14 @@
(conlanging/tree-to-dot eittlandic-vowels)
#+END_SRC
#+BEGIN_SRC dot :file img/eittland/vowel-feature-tree.png :var input=vow-dot :exports results
#+BEGIN_SRC dot :file img/eittland/vowel-feature-tree.png :var input=vow-dot :exports results :cache yes
$input
#+END_SRC
#+NAME: arbre:vowels
#+ATTR_HTML: :alt Arbre des voyelles de l’Eittlandais :width 100%
#+ATTR_HTML: :alt Arbre des voyelles de l’Eittlandais :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques distinctives des voyelles de l’Eittlandais
#+RESULTS:
#+RESULTS[401d3c4bfc06b5ba8a491d6cad9f4d624edc4d9f]:
[[file:img/eittland/vowel-feature-tree.png]]
*** Diphtongues
@@ -1213,7 +1206,7 @@
$input
#+END_SRC
#+NAME: arbre:cons
#+ATTR_HTML: :alt Arbre des consonnes de l’Eittlandais :width 100%
#+ATTR_HTML: :alt Arbre des consonnes de l’Eittlandais :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques distinctives des consonnes de l’Eittlandais
#+RESULTS[c8ade388ef8459b89ca4c74696b0bd21fba46d34]:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 56 KiB

+3 -3
View File
@@ -1,5 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Grammar of Ñyqy
#+TITLE: Ñyqy
#+include: ../headers
#+language: en
#+HTML_HEAD_EXTRA: <meta name="description" content="Detailed grammar of the Ñyqy constructed language" />
@@ -440,7 +440,7 @@
$input
#+END_SRC
#+NAME: arbre:vowels
#+ATTR_HTML: :alt Arbre des voyelles du Ñyqy :align center
#+ATTR_HTML: :alt Arbre des voyelles du Ñyqy :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques des voyelles du Ñyqy
#+RESULTS[e1f2ca12b3da614823629b888c369ed0ddf3e4a5]:
@@ -483,7 +483,7 @@
$input
#+END_SRC
#+NAME: arbre:cons
#+ATTR_HTML: :alt Arbre des consonnes du Ñyqy :align center
#+ATTR_HTML: :alt Arbre des consonnes du Ñyqy :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques des consonnes du Ñyqy
#+RESULTS[ea6462370981c1a011d17d703545ec6e6f38f4de]:
+3 -7
View File
@@ -30,15 +30,11 @@
#+HTML_HEAD_EXTRA: <meta name="twitter:card" content="summary" />
#+HTML_HEAD_EXTRA: <meta name="twitter:site" content="@phundrak" />
#+HTML_HEAD_EXTRA: <meta name="twitter:creator" content="@phundrak" />
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="./css/main.css"/>
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="./css/htmlize.min.css"/>
#+HTML_HEAD_EXTRA: <link rel="stylesheet" id="theme" href="./css/dark.css"/>
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="/style/style.css"/>
#+HTML_HEAD_EXTRA: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/mahakala-128x128.png" type="img/png" media="screen" />
#+HTML_HEAD_EXTRA: <link rel="shortcut icon" href="https://cdn.phundrak.com/img/favicon.ico" type="image/x-icon" media="screen" />
#+HTML_HEAD_EXTRA: <script defer src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
#+HTML_HEAD_EXTRA: <script defer src="dart/main.dart.js"></script>
#+HTML_HEAD_EXTRA: <script defer src="https://kit.fontawesome.com/4d42d0c8c5.js"></script>
#+INFOJS_OPT: view:info home:https://langue.phundrak.com toc:t
#+HTML_HEAD_EXTRA: <script defer src="/dart/main.dart.js"></script>
#+HTML_HEAD_EXTRA: <script src="https://kit.fontawesome.com/4d42d0c8c5.js" crossorigin="anonymous"></script>
# ### MACROS ###################################################################
#+MACRO: newline @@latex:\hspace{0pt}\\@@ @@html:<br>@@
+1 -1
View File
@@ -1,5 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Une Grammaire du Hjelp
#+TITLE: Hjelp
#+HTML_HEAD: <meta name="description" content="Grammaire détaillée de la langue construite du Hjelp" />
#+HTML_HEAD: <meta property="og:title" content="Grammaire du Hjelp" />
#+HTML_HEAD: <meta property="og:description" content="Grammaire détaillée de la langue construite du Hjelp" />
Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 203 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 598 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 119 KiB

-1
View File
@@ -1,6 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Langues construites de P’undrak
#+INFOJS_OPT: view:showall toc:1
#+HTML_HEAD: <meta name="description" content="Collection de documents et pages webs de linguistique et de langues construites de P’undrak" />
#+HTML_HEAD: <meta property="og:title" content="Langues construites de P’undrak" />
#+HTML_HEAD: <meta property="og:description" content="Collection de documents et pages webs de linguistique et de langues construites de P’undrak" />
+1 -1
View File
@@ -1,5 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Une Grammaire du Mattér
#+TITLE: Mattér
#+HTML_HEAD: <meta name="description" content="Grammaire détaillée de la langue construite Mattér" />
#+HTML_HEAD: <meta property="og:title" content="Grammaire du Mattér" />
#+HTML_HEAD: <meta property="og:description" content="Grammaire détaillée de la langue construite Mattér" />
+358 -79
View File
@@ -1,13 +1,12 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Une Grammaire du Ñyqy
#+TITLE: Ñyqy
#+SUBTITLE: Un détail de la langue construite prototype du Ñyqy, et une rapide description de son peuple et sa culture
#+HTML_HEAD_EXTRA: <meta name="description" content="Grammaire détaillée de la langue construite Ñyqy" />
#+HTML_HEAD_EXTRA: <meta property="og:title" content="Grammaire du Ñyqy" />
#+HTML_HEAD_EXTRA: <meta property="og:description" content="Grammaire détaillée de la langue construite Ñyqy" />
#+HTML_HEAD_EXTRA: <link rel="stylesheet" href="/css/nyqy.css"/>
#+INCLUDE: headers
#+OPTIONS: auto-id:t
#+MACRO: nyqy (eval (conlanging/nyqy-to-phonetics $1))
#+MACRO: nyqy (eval (conlanging/nyqy-to-org $1))
#+LATEX_HEADER_EXTRA: \usepackage{enumitem}
#+STARTUP: content
@@ -152,6 +151,8 @@
- 2 :: deuxième personne
- 3 :: troisième personne
- ABS :: absolutif
- art.indef :: article indéfini
- art.def :: article défini
- DAT :: datif
- ERG :: ergatif
- F :: féminin
@@ -406,13 +407,13 @@
# "dependent-marking", or mixed?
# - Give some examples of each type of marking the language exhibits.
Le Ñyqy est une langue qui apparaît comme étant fortement analytique et
isolationniste, reposant principalement sur sa syntaxe afin d’exprimer sa
grammaire et très peu sur des règles morphologiques. La large majorité des
isolationniste, reposant quasi exclusivement sur sa syntaxe afin d’exprimer
sa grammaire et très peu sur des règles morphologiques. La large majorité des
mots sont monosyllabiques ou bisyllabiques, et les phrases s’articulent
souvent autour de morphèmes liés monosyllabiques que l’on peut interpréter
comme étant des particules grammaticales. Voici un exemple de phrase en Ñyqy
avec sa traduction et son détail grammatical :
1. {{{nyqy(ñe pom ñy)}}}
1. {{{nyqy(ñe pom qy)}}}
maison GEN 1sg
@@ -427,6 +428,11 @@
1sg OPT boire
Je souhaite boire
4. {{{nyqy(bó mygú cé pim i coq op zé qy zúmu op)}}}
art.def singe POSS.1sg pomme art.indef manger-PST 3sg 1sg voir-PST
J’ai vu le singe qui a mangé une pomme à moi
Dans l’exemple n°1, nous pouvons remarquer l’absence d’un verbe « être », ce
qui est un exemple des prédicats existentiels qui ne requièrent pas de verbe
@@ -436,11 +442,11 @@
montrant que le Ñyqy est une langue dont la tête de ses diverses
constructions grammaticales est finale et non initiale.
L’exemple n°2 nous montre la méthode utilisée en Ñyqy afin d’employer le
duel : il s’agit d’affixer le nombre « deux » à l’élément que nous souhaitons
infléchir. Ainsi, {{{nyqy(bú qi)}}} peut être considéré comme le pronom personnel
de la seconde personne du singulier infléchis afin de devenir le pronom
personnel de la seconde personne du duel.
Le deuxième exemple nous montre la méthode utilisée en Ñyqy afin d’employer
le duel : il s’agit d’affixer le nombre « deux » à l’élément que nous
souhaitons infléchir. Ainsi, {{{nyqy(bú qi)}}} peut être considéré comme le pronom
personnel de la seconde personne du singulier infléchis afin de devenir le
pronom personnel de la seconde personne du duel.
Le troisième exemple présente un exemple d’ordre basique des constituants
d’une clause simple, où l’on peut voir une suite SV dans cette clause
@@ -450,6 +456,14 @@
[[#h-26aa65ba-2694-4c63-bf91-258dad3b0430]], il s’agit de la méthode principale
d’inflexion des verbes du Ñyqy.
Enfin, le quatrième exemple nous donne un aperçu de la syntaxe, avec un
positionnement différent des articles définis et indéfinis par rapport au
nom, ainsi qu’un exemple de référence dans une clause subordonnée à un
élément extérieur qu’elle définit, ici le pronom de la troisième personne
{{{nyqy(zé)}}} se référant à {{{nyqy(mygú)}}}. On voit également que la clause principale
a un ordre de ses constituants en OSV tandis que la subordonnée a un ordre de
ses relatives en OVS.
** Inventaire phonologique et translittération
:PROPERTIES:
:CUSTOM_ID: h-f9f0a2a0-98a6-49d5-b943-98daa6078d3a
@@ -529,11 +543,14 @@
(conlanging/tree-to-dot nyqy-vowels)
#+END_SRC
#+RESULTS[7197a00f9fd897443b1727910097ffe6aceb2ada]: vow-tree
: graph{graph[dpi=300];node[shape=plaintext];graph[bgcolor="transparent"];0[label="[vowel]"];1[label="[back]"];0 -- 1;11[label="[tense]"];1 -- 11;111[label="[high]"];11 -- 111;1111[label="/u/"];111 -- 1111;112[label="{high}"];11 -- 112;1121[label="/ɤ/"];112 -- 1121;12[label="{tense}"];1 -- 12;121[label="[high]"];12 -- 121;1211[label="/ʊ/"];121 -- 1211;122[label="{high}"];12 -- 122;1221[label="/ɔ/"];122 -- 1221;2[label="{back}"];0 -- 2;21[label="[tense]"];2 -- 21;211[label="[high]"];21 -- 211;2111[label="/y/"];211 -- 2111;212[label="{high}"];21 -- 212;2121[label="/ø/"];212 -- 2121;22[label="{tense}"];2 -- 22;221[label="[high]"];22 -- 221;2211[label="/ɪ/"];221 -- 2211;222[label="{high}"];22 -- 222;2221[label="/ɛ/"];222 -- 2221;}
#+BEGIN_SRC dot :file img/nyqy/vowel-feature-tree.png :var input=vow-tree :exports results :eval yes
$input
#+END_SRC
#+NAME: arbre:vowels
#+ATTR_HTML: :alt Arbre des voyelles du Ñyqy :align center :width 100%
#+ATTR_HTML: :alt Arbre des voyelles du Ñyqy :class gentree
#+CAPTION: Arbre des caractéristiques des voyelles du Ñyqy
#+RESULTS:
[[file:img/nyqy/vowel-feature-tree.png]]
@@ -634,7 +651,7 @@
$input
#+END_SRC
#+NAME: arbre:cons
#+ATTR_HTML: :alt Arbre des consonnes du Ñyqy :align center :width 100%
#+ATTR_HTML: :alt Arbre des consonnes du Ñyqy :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques des consonnes du Ñyqy
#+RESULTS:
@@ -954,51 +971,51 @@
:PROPERTIES:
:CUSTOM_ID: h-add29401-0e7d-45bb-93de-e53286dc4a2d
:END:
Le Ñyqy est une langue dont sa tête de groupes grammaticaux est généralement
en fin du-dit groupe. On peut voir avec l’arbre [[arbre:syntaxe:basique]] que la
structure générale d’une phrase standard démarre avec des éléments divers
liés à la clause principale s’il y en a, auxquels on se référera généralement
en tant qu’éléments /obliques/. Ces éléments ne sont liés au verbe ni par une
relation grammaticale ergative, ni dative, ni absolutive. Ensuite vient la
phrase nominale ergative, précédant la phrase dative, elle-même précédant la
phrase verbale, contenant une phrase nominale absolutive et le verbe de la
phrase, le dernier élément d’une phrase {{{nyqy(ñyqy)}}}. Les sous chapitres
suivants détailleront la composition de chacun de ces éléments.
# Le Ñyqy est une langue dont sa tête de groupes grammaticaux est généralement
# en fin du-dit groupe. On peut voir avec l’arbre [[arbre:syntaxe:basique]] que la
# structure générale d’une phrase standard démarre avec des éléments divers
# liés à la clause principale s’il y en a, auxquels on se référera généralement
# en tant qu’éléments /obliques/. Ces éléments ne sont liés au verbe ni par une
# relation grammaticale ergative, ni dative, ni absolutive. Ensuite vient la
# phrase nominale ergative, précédant la phrase dative, elle-même précédant la
# phrase verbale, contenant une phrase nominale absolutive et le verbe de la
# phrase, le dernier élément d’une phrase {{{nyqy(ñyqy)}}}. Les sous chapitres
# suivants détailleront la composition de chacun de ces éléments.
#+NAME: basic-syntax-tree
#+BEGIN_SRC emacs-lisp :noweb yes :exports none :eval yes :cache yes
(setq-local nyqy-syntax-tree
'("S"
("Obl")
("S'"
("NPerg"
("NP"))
("VP"
("NPdat"
("NP"))
("VP'"
("NPabs"
("NP"
("S")
("NP'"
("Adj")
("N"))))
("V'"
("Mood")
("Tense")
("V")
("Neg")))))))
(conlanging/tree-to-dot nyqy-syntax-tree)
#+END_SRC
# #+NAME: basic-syntax-tree
# #+BEGIN_SRC emacs-lisp :noweb yes :exports none :eval yes :cache yes
# (setq-local nyqy-syntax-tree
# '("S"
# ("Obl")
# ("S'"
# ("NPerg"
# ("NP"))
# ("VP"
# ("NPdat"
# ("NP"))
# ("VP'"
# ("NPabs"
# ("NP"
# ("S")
# ("NP'"
# ("Adj")
# ("N"))))
# ("V'"
# ("Mood")
# ("Tense")
# ("V")
# ("Neg")))))))
# (conlanging/tree-to-dot nyqy-syntax-tree)
# #+END_SRC
#+BEGIN_SRC dot :file img/nyqy/basic-syntax.png :var input=basic-syntax-tree :exports results :eval yes
$input
#+END_SRC
#+NAME: arbre:syntaxe:basique
#+attr_html: :alt Arbre de syntaxe basique du Ñyqy :width 800px
#+CAPTION: Arbre de syntaxe basique du Ñyqy
#+RESULTS:
[[file:img/nyqy/basic-syntax.png]]
# #+BEGIN_SRC dot :file img/nyqy/basic-syntax.png :var input=basic-syntax-tree :exports results :eval yes
# $input
# #+END_SRC
# #+NAME: arbre:syntaxe:basique
# #+attr_html: :alt Arbre de syntaxe basique du Ñyqy :class gentree
# #+CAPTION: Arbre de syntaxe basique du Ñyqy
# #+RESULTS:
# [[file:img/nyqy/basic-syntax.png]]
*** Ordre des constituants dans les clauses principales
:PROPERTIES:
@@ -1010,15 +1027,29 @@
# - Specific to the main clause constituent order: What is the pragmatically
# neutral order of constituents (A/S, P, and V) in basic clauses of the
# language?
En Ñyqy, l’ordre des éléments principaux de la phrase typique suit un ordre
SV pour les phrases transitives et APV pour les phrases intransitives. Il
est toutefois à noter que l’agent est nécessairement précédé par un élément
datif. Il est cependant possible lorsqu’aucun élément datif n’est à
mentionner d’utiliser le terme {{{nyqy(bóq)}}} signifiant « rien, aucun ».
# En Ñyqy, l’ordre des éléments principaux de la phrase typique suit un ordre
# SV pour les phrases transitives et APV pour les phrases intransitives. Il
# est toutefois à noter que l’agent est nécessairement précédé par un élément
# datif. Il est cependant possible lorsqu’aucun élément datif n’est à
# mentionner d’utiliser le terme {{{nyqy(bóq)}}} signifiant « rien, aucun ».
Il est également à noter que selon les recherches actuelles, rien ne nous
laisse à penser qu’un autre ordre de ces constituants était possible en Ñyqy
mis à par l’ajout d’autres éléments obliques en début de phrase.
# Il est également à noter que selon les recherches actuelles, rien ne nous
# laisse à penser qu’un autre ordre de ces constituants était possible en Ñyqy
# mis à par l’ajout d’autres éléments obliques en début de phrase.
Le Ñyqy est une langue particulière quant il s’agit de l’ordre de ses
éléments principaux dans ses phrases et clauses principales. Tout d’abord,
il est bon de noter que le Ñyqy est une langue qui est à 100% ergative.
Ainsi, cette langue considère les expérienceurs de verbes intransitifs et
les patients de verbes transitifs comme objets, tandis que les agents de
verbes transitifs sont considérés comme sujets. En connaissant cela, on peut
donc dire que l’ordre typique d’une clause principale Ñyqy est donc OSV.
Il s’agit d’un ordre de constituants qui est très rare dans les langues
naturelles, ce qui explique pourquoi chacune des langues descendant du Ñyqy
ne suivent pas cet ordre. La majorité a évolué en SOV, et une minorité des
autres langues a quant à elle évolué en OVS. Il est également intéressant de
marquer qu’au même moment, chacune a évolué de manière à ce que sa syntaxe
soit définie par des règles suivant le couple Nominatif-Accusatif.
*** Ordre des constituants dans les clauses verbales
:PROPERTIES:
@@ -1033,6 +1064,160 @@
:CUSTOM_ID: h-130f774a-bc58-46ca-a172-c413c8236366
:END:
# - Describe the order(s) of elements in the noun phrase.
Dans un groupe nominal, on retrouve en son centre le nom défini par
plusieurs éléments pouvant le caractériser, tels que des adjectifs, des
phrases relatives, des démonstratifs, des numéraux, des possessifs ou des
éléments génitifs. En résumé, l’ordre des éléments est le suivant :
#+begin_center
Gen-Adj-Dem-Num_{12}-Poss-N-Num_{6}-Adj-Rel
#+end_center
Afin de mieux visualiser l’arbre syntaxique des groupes nominaux en Ñyqy, on
peut se référer à la figure [[nom-clause-syntax-tree]]. On peut constater que le
Ñyqy est une langue qui est donc fortement ascendante (/head-final/), la
majorité des constituants d’une clause nominale venant après le nom.
#+NAME: nom-syntax-tree
#+BEGIN_SRC emacs-lisp :exports none :eval yes :cache yes
(setq-local nominal-group-syntax-tree
'("N'"
("N'"
("GEN")
("N'"
("Adj")
("N'"
("Dem")
("N'"
("Num₁₂")
("N'"
("Poss")
("N"))
("Num₆")))
("Adj")))
("Rel")))
(conlanging/tree-to-dot nominal-group-syntax-tree)
#+END_SRC
#+RESULTS[b65d47c0e3188121f8bcbde11627477b0a6b2904]: nom-syntax-tree
: graph{graph[dpi=300];node[shape=plaintext];graph[bgcolor="transparent"];0[label="N'"];1[label="N'"];0 -- 1;11[label="GEN"];1 -- 11;12[label="N'"];1 -- 12;121[label="Adj"];12 -- 121;122[label="N'"];12 -- 122;1221[label="Dem"];122 -- 1221;1222[label="N'"];122 -- 1222;12221[label="Num₁₂"];1222 -- 12221;12222[label="N'"];1222 -- 12222;122221[label="Poss"];12222 -- 122221;122222[label="N"];12222 -- 122222;12223[label="Num₆"];1222 -- 12223;123[label="Adj"];12 -- 123;2[label="Rel"];0 -- 2;}
#+BEGIN_SRC dot :file img/nyqy/syntax-nominal-clauses.png :var input=nom-syntax-tree :exports results :eval yes :cache yes :class gentree
$input
#+END_SRC
#+NAME: nom-clause-syntax-tree
#+ATTR_HTML: :alt Arbre syntaxique des clauses nominales du Ñyqy :class gentree
#+ATTR_LATEX: :height 12cm
#+CAPTION: Arbre syntaxique des clauses nominales du Ñyqy
#+RESULTS[901e0acb85c38044b47c5a3bacee9aaf7df72251]:
[[file:img/nyqy/syntax-nominal-clauses.png]]
**** Possessifs
:PROPERTIES:
:CUSTOM_ID: h-506f68a1-a9de-4d1c-a674-075f130af6a8
:END:
Concernant les possessifs, ceux-ci se situent directement avant le nom afin
de marquer la possession de l’élément par une personne ou une autre entité.
Cela dépend du possessif employé. Par exemple « mon chat » se traduit par
{{{nyqy(cé oz)}}}.
| <c> | <c> |
| cé | oz |
| POSS.1sg | chat |
**** Numéraux
:PROPERTIES:
:CUSTOM_ID: h-26b82cb5-1316-46cb-b9c5-279bbded3cc5
:END:
Pour ce qui est des numéraux, la règle générale est que les unités suivent
le nom, tandis que les sixaines le précèdent. Par exemple, « mes vingt
chats » se traduit par {{{nyqy(né ñy cé oz qi)}}}.
| <c> | <c> | <c> | <c> |
| né ñy | cé | oz | qi |
| 3×6 | POSS.1sg | chat | 2 |
# TODO autres types de numéraux
La position des unités impliquent donc que l’article indéfini {{{nyqy(i),}}}
dérivé du chiffre « un » {{{nyqy(mi)}}}, suit immédiatement le nom. Par exemple,
« un chat » se traduit par {{{nyqy(oz i)}}}.
| <c> | <c> |
| oz | i |
| chat | art.indef |
**** Démonstratifs
:PROPERTIES:
:CUSTOM_ID: h-7e9ab73d-0396-440a-aa14-7a5ba680da6f
:END:
Concernant le démonstratif, ceux-ci se situe précédant les sixaines en Ñyqy,
et donc précédant le nom. Ainsi, si l’on souhaite traduire « ces vingt chats
à moi » (le génitif relative est ici pour contrecarrer l’impossibilité en
français d’utiliser un démostratif et un possessif en même temps), on a donc
{{{nyqy(bóc né ñy cé oz qi)}}}.
| <c> | <c> | <c> | <c> | <c> |
| bóc | né ñy | cé | oz | qi |
| DEM.prox | 3×6 | POSS.1sg | chat | 2 |
La position du démonstratif dans la clause nominale implique également une
position identique pour un article défini en Ñyqy. Ainsi, si l’on souhaite
traduire « les vingt chats à moi » (à nouveau, le génitif est utilisé ici dû
aux limitations du Français), on obtient {{{nyqy(bó né ñy cé oz qi)}}}.
| <c> | <c> | <c> | <c> | <c> |
| bó | né ñy | cé | oz | qi |
| art.def | 3×6 | POSS.1sg | chat | 2 |
**** Adjectifs
:PROPERTIES:
:CUSTOM_ID: h-f0c023d2-ead0-412b-8ed3-d02507af0256
:END:
Concernant les adjectifs, ceux-ci se divisent en plusieurs classes :
- Adjectifs d’opinion
- Adjectifs de taille
- Adjectifs de quantité
- Adjectifs d’âge
- Adjectifs d’origine
- Adjectifs d’objectif
- Adjectifs de matériaux
- Adjectifs de forme
- Adjectifs de couleur
En Ñyqy, ils apparaissent dans l’ordre ci-dessus et sont classés par
objectivité, et tous viennent après le nom à l’exception des adjectifs
d’opinion. Ainsi, les adjectifs les plus subjectifs arrivent en premier, et
les adjectifs les plus objectifs arrivent en dernier.
Il est à noter que :
- les adjectifs de forme et de matériaux ne peuvent se faire que via
l’utilisation d’un génitif de type « NOM GEN » (par exemple « carré GEN
table » pour dire « table carrée »)
- que les adjectifs d’origine ne se forment qu’avec une particule locative
- que les adjectifs d’objectif ne se forment qu’avec une particule
instrumentative.
Ainsi, si l’on souhaite traduire « un gros vieux chat noir et beau », on
obtient {{{nyqy(syg oz goñ noc zuj)}}}.
| syg | oz | i | goñ | noc | zuj |
| beau | chat | art.indef | gros | vieux | noir |
**** Génitif
:PROPERTIES:
:CUSTOM_ID: h-f5a28bb8-103e-4f96-979c-89df0286ae36
:END:
Ensuite vient le génitif qui se situe avant les adjectifs d’opinion. On y
trouvera donc exclusivement la particule grammaticale {{{nyqy(pom)}}} qui sert à
marquer le génitif, précédée par une clause nominale qui définira la clause
nominale actuelle. Par exemple, « le chat de mon voisin » peut se traduire
par {{{nyqy(cé wóseq pom bó oz)}}}.
| cé | wóseq | pom | bó | oz |
| POSS.1sg | voisin | GEN | art.def | chat |
**** Clauses relatives
:PROPERTIES:
:CUSTOM_ID: h-00f9960f-b515-4fb0-be59-b53573607b8e
:END:
Enfin, les clauses relatives arrivent à la fin des clauses nominales. Ainsi,
si l’on souhaite dire « mon chat qui mange est beau », on obtient la traduction
{{{nyqy(cé oz coq syg)}}}.
| cé | oz | coq | syg |
| POSS.1sg | chat | manger | beau |
*** Phrases adpositionelles
:PROPERTIES:
@@ -1995,11 +2180,6 @@
Ce qui donne donc 1052.
** Références
:PROPERTIES:
:CUSTOM_ID: h-39866d3e-b4f9-4885-8581-53f7342ddf0c
:END:
* Dictionnaire
:PROPERTIES:
:CUSTOM_ID: h-33a20978-20d6-4a26-8286-016d6c64b654
@@ -2012,10 +2192,10 @@
- {{{nyqy(beñ)}}} ::
1. (n) dents
2. (v) mordre, croquer
- {{{nyqy(bóbó)}}} ::
1. (n) cœur
2. (adj) ému (le cœur qui bat à cause d’une émotion)
3. (adj) essouflé
- {{{nyqy(bó)}}} ::
1. (art def) le, la, les, article défini. Voir /bóc/
- {{{nyqy(bóc)}}} ::
1. (n) ceci, ça, démonstratif de proximité
- {{{nyqy(bú)}}} ::
1. (pron) deuxième personne
@@ -2023,6 +2203,8 @@
:PROPERTIES:
:CUSTOM_ID: h-fb76cf3b-d664-4ab6-9531-320d0b8f0807
:END:
- {{{nyqy(cé)}}} ::
1. (poss) mon, ma, mes, possesseur de la première personne
- {{{nyqy(co)}}} ::
1. (gp.SUBJ.PST) marqueur pour verbes du subjonctif accomplis
2. (nbr) cinq
@@ -2103,6 +2285,8 @@
:PROPERTIES:
:CUSTOM_ID: h-3f1fd2e3-6863-4eef-89a8-7aab21873f87
:END:
- {{{nyqy(i)}}} ::
1. (art indef) un, une, des, article defini. Voir /mi/
- {{{nyqy(icm)}}} ::
1. (n) bras
2. (n) branche (arbre)
@@ -2130,6 +2314,8 @@
:PROPERTIES:
:CUSTOM_ID: h-eb766e30-8f82-4df0-b912-978542459362
:END:
- {{{nyqy(még)}}} ::
1. (adv) beaucoup, très
- {{{nyqy(meém)}}} ::
1. (n) grand-mère (affectueux)
- {{{nyqy(meq)}}} ::
@@ -2154,6 +2340,8 @@
1. (n) maison (bâtiment), habitation
- {{{nyqy(muz)}}} ::
1. (n) rouge, pourpre, fruit
- {{{nyqy(mygú)}}} ::
1. (n) singe
** N
:PROPERTIES:
@@ -2161,6 +2349,9 @@
:END:
- {{{nyqy(né)}}} ::
1. (nbr) trois
- {{{nyqy(noc)}}} ::
1. (n) vieillesse, grand âge
2. (adj) vieux, âgé
- {{{nyqy(nó)}}} ::
1. (n) poitrine, seins (attribut féminin)
2. (adj) maternité
@@ -2174,6 +2365,8 @@
:END:
- {{{nyqy(ñe)}}} ::
1. (n) maison
- {{{nyqy(ñocm)}}} ::
1. (n) personne, humain, quelqu’un
- {{{nyqy(ñójb)}}} ::
1. (n) oiseau
- {{{nyqy(ñuné)}}} ::
@@ -2302,6 +2495,9 @@
1. (n) souffle, voir /sujéq/ et /só/
2. (n) vent
3. (adj) fraîcheur, froid
- {{{nyqy(syg)}}} ::
1. (n) beauté
2. (adj) beau
** U
:PROPERTIES:
@@ -2332,6 +2528,10 @@
- {{{nyqy(wésyqun)}}} ::
1. (n) Shaman. Aspirant aux esprits, aux âmes, aux dieux. Voir aussi
/wésy/, /qun/
- {{{nyqy(wóseq)}}} ::
1. (n) voisin
2. (adj) proche
3. (adj) voisin
- {{{nyqy(wó)}}} ::
1. (n) humain
2. (adj) d’apparence humaine
@@ -2389,6 +2589,85 @@
1. (n) chose, objet abstrait
- {{{nyqy(zuj)}}} ::
1. (n) nuit, noir, ombre
2. (adj) noir, sombre
- {{{nyqy(zúmu)}}} ::
1. (vt) voir
* Notes :noexport:
:PROPERTIES:
:CUSTOM_ID: h-1905bd91-a4c5-4b60-acea-5ed10bc655af
:END:
À corriger :
- ñy = 6
- qy = 1sg
** Ñyqy syntax
:PROPERTIES:
:CUSTOM_ID: h-cd39b6f7-85e0-4168-a89d-829fa1dec5c3
:END:
Prep ⊃ ((NDem ∨ NNum ∨ NPoss ⊃ NAdj) & (NAdj ⊃ NGen) & (NGen ⊃ NRel))
Posp ⊃ ((AdjN ∨ RelN ⊃ DemN & NumN & PossN) & (DemN ∨ NumN ∨ PossN ⊃ GenN))
Lang D of [[https://docs.google.com/spreadsheets/d/1ZJV1C8g-u8PbZIEHp8t7JT8SSyY7ZetEZ5oBJJn0g2U/edit#gid=0][this chart]], evolving to F.
Le Ñyqy est une langue ascendante (/head-final/ en anglais). Ordre des
éléments :
- NAdj
Opinion-N-Size-Quantity-Age-Origin-Purpose-Material-Shape-Color
Shape et Material => GEN, Origin => LOC, Purpose => INST
| ycoj | pim | még | goñ | ñy | cojmuj |
| bonne | pomme | très | grosse | nombreuse | rouge |
- NRel
pomme que je mange
- DemN
| bóc | oz |
| ce | chat |
- def.art N
/bó/ from /bóc/
la pomme :
| bó | pim |
| def.art | pomme |
- NumNNum
- Num_{12} N Num_{6}
Les unités suivent le groupe nominal tandis que les sixaines le précèdent.
Penser à 6x éléments + y.
20 pommes (litt 3×6 pommes 2)
| né | ñy | pim | qi |
| 3 | 6 | pomme | 2 |
- N art.indef
/i/ from /mi/
une pomme :
| pim | i |
| pomme | indef.art |
- ordNum N
Les nombres ordinaux viennent intégralement avant le nom
- Declarative numbers: declNum Gen N
Pomme première :
| mi | pom | pim |
| 1 | GEN | pomme |
- PossN
Comme en français, /ma pomme/
- GenN
Comme le /’s/ en anglais, maison de moi :
| ñy | pom | ñe |
| 1sg | GEN | maison |
Gen-Adj-Dem-Num-Poss-N-Num-Adj-Rel
* Choses à faire [2/4] :noexport:
:PROPERTIES:
@@ -2471,6 +2750,12 @@
et sa phonétique soient sur une ligne différente de la définition, avec la
définition qui est indentée.
** TODO Compléter la liste Swadesh [1/3]
:PROPERTIES:
:CUSTOM_ID: h-32a2f3e6-0d2d-4693-99d8-d912446ddedf
:END:
Compléter la liste du fichier [[file:swadesh.org::#h-a5b4a65c-68ab-4630-b054-da816d679cfd][Swadesh#Ñyqy]].
** TODO Simplifier les fonctions du layer ~conlanging~
:PROPERTIES:
:CUSTOM_ID: h-b6fca087-e439-4bdf-bd26-43803d424a40
@@ -2479,12 +2764,6 @@
serait temps de simplifier les fonctions et réduire le nombre d’entre elles
dans le layer ~conlanging~.
** TODO Compléter la liste Swadesh [1/3]
:PROPERTIES:
:CUSTOM_ID: h-32a2f3e6-0d2d-4693-99d8-d912446ddedf
:END:
Compléter la liste du fichier [[file:swadesh.org::#h-a5b4a65c-68ab-4630-b054-da816d679cfd][Swadesh#Ñyqy]].
*** DONE dot tree
CLOSED: [2020-01-29 mer. 21:50]
:PROPERTIES:
+6 -6
View File
@@ -1,10 +1,10 @@
#+TITLE: Sitemap for project langue-phundrak-com-org
- [[file:index.org][Langues construites de P’undrak]]
- [[file:eittland.org][Une Grammaire de l’Eittlandais]]
- [[file:hjelp.org][Une Grammaire du Hjelp]]
- [[file:matter.org][Une Grammaire du Mattér]]
- [[file:taso.org][Une Grammaire du Tãso]]
- [[file:nyqy.org][Une Grammaire du Ñyqy]]
- [[file:eittland.org][Eittlandais]]
- [[file:hjelp.org][Hjelp]]
- [[file:matter.org][Mattér]]
- [[file:taso.org][Tãso]]
- [[file:nyqy.org][Ñyqy]]
- en
- [[file:en/nyqy.org][Grammar of Ñyqy]]
- [[file:en/nyqy.org][Ñyqy]]
+591
View File
@@ -0,0 +1,591 @@
@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic|Roboto+Slab:400,700|Inconsolata:400,700);
@font-face {
font-family: "DoulosSIL";
font-display: swap;
src: url("/fonts/DoulosSIL-R.woff");
}
@font-face {
font-family: "Noto Sans Runes";
font-display: swap;
src: url("../fonts/NotoSansRunic-Regular.ttf");
}
@font-face {
font-family: "Helvetica Neue";
font-display: swap;
src: url("../fonts/HelveticaNeue.ttf");
}
/* Variables *****************************************************************/
$switch-small-screen: "only screen and (max-width: 600px)";
$switch-smaller-screen: "only screen and (max-width: 400px)";
$navbar-height: 70px;
$postamble-height: 55px;
// Themes /////////////////////////////////////////////////////////////////////
$dark: rgba( 52, 73, 94, 1);
$black: rgba( 0, 0, 0, 1);
$accent1: rgba( 93, 115, 126, 1);
$accent2: rgba( 92, 172, 126, 1);
$accent3: rgba(197, 193, 155, 1);
$light: #eee;
$grey1: #f8f8f8;
$grey2: #dbe1e8;
$grey3: #b2becd;
$grey4: #6c7983;
$grey5: #454e56;
$grey6: #12181b;
// Accent 1
// Black
$gradient-accent1-black-left: linear-gradient(to left, $black, $accent1, $accent1);
$gradient-accent1-black-right: linear-gradient(to right, $black, $accent1, $accent1);
// Dark
$gradient-accent1-dark-left: linear-gradient(to left, $dark, $accent1);
$gradient-accent1-dark-right: linear-gradient(to right, $dark, $accent1);
// Light
$gradient-accent1-light-left: linear-gradient(to left, $light, $accent1);
$gradient-accent1-light-right: linear-gradient(to right, $light, $accent1);
// Accent 2
// Black
$gradient-accent2-black-left: linear-gradient(to left, $black, $accent2, $accent2);
$gradient-accent2-black-right: linear-gradient(to right, $black, $accent2, $accent2);
// Dark
$gradient-accent2-dark-left: linear-gradient(to left, $dark, $accent2);
$gradient-accent2-dark-right: linear-gradient(to right, $dark, $accent2);
// Light
$gradient-accent2-light-left: linear-gradient(to left, $light, $accent2);
$gradient-accent2-light-right: linear-gradient(to right, $light, $accent2);
// Accent 3
// Black
$gradient-accent3-black-left: linear-gradient(to left, $black, $accent3, $accent3);
$gradient-accent3-black-right: linear-gradient(to right, $black, $accent3, $accent3);
// Dark
$gradient-accent3-dark-left: linear-gradient(to left, $dark, $accent3);
$gradient-accent3-dark-right: linear-gradient(to right, $dark, $accent3);
// Light
$gradient-accent3-light-left: linear-gradient(to left, $light, $accent3);
$gradient-accent3-light-right: linear-gradient(to right, $light, $accent3);
.light {
$bg-nav: $gradient-accent3-light-right;
$border-color: $accent1;
color: $dark;
background: $light;
transition: background 500ms ease-in-out, color 1s ease-in-out;
pre {
box-shadow: 3px 3px $dark;
border-color: $light;
}
pre.src {
&::before {
background-color: $light;
color: $dark;
}
}
.navbar, header {
background: $bg-nav;
}
.status {
background: $gradient-accent3-light-left;
color: $dark;
}
.tooltip {
border-bottom: 1px dotted $accent3;
.tooltiptext {
background-color: $accent3;
color: $dark;
&::after {
border-color: $accent3 transparent transparent transparent;
}
}
}
.dropdown {
background: $accent3;
color: $dark;
}
#content {
a {
box-shadow: inset 0 -3px 0 $accent3;
transition: box-shadow 300ms ease-in-out;
&:hover {
box-shadow: inset 0 -23px 0 $accent3;
transition: box-shadow 300ms ease-in-out;
}
}
}
table, th, td {
border: 1px solid $dark;
}
th {
background: darken($light, 5%);
}
.gentree {
filter: invert(0%);
transition: filter 1s ease-in-out;
}
}
.dark, .black {
$bg-nav: $gradient-accent2-dark-right;
$border-color: $dark;
color: $light;
background: $dark;
transition: background 500ms ease-in-out, color 1s ease-in-out;
pre {
box-shadow: 3px 3px $dark;
border: none;
}
pre.src {
&::before {
background-color: $dark;
color: $light;
}
}
.navbar, header {
background: $bg-nav;
}
.status {
background: $gradient-accent2-dark-left;
color: $light;
}
.tooltip {
border-bottom: 1px dotted $accent1;
.tooltiptext {
background-color: $accent1;
color: $light;
&::after {
border-color: $accent1 transparent transparent transparent;
}
}
}
.dropdown {
background: $accent3;
color: $dark;
}
#content {
a {
box-shadow: inset 0 -3px 0 $accent2;
transition: box-shadow 300ms ease-in-out;
&:hover {
box-shadow: inset 0 -23px 0 $accent2;
transition: box-shadow 300ms ease-in-out;
}
}
}
table, th, td {
border: 1px solid $accent1;
}
th {
background: darken($dark, 2.5%);
}
.gentree {
filter: invert(100%);
transition: filter 1s ease-in-out;
}
}
.black {
$bg-nav: $gradient-accent1-black-right;
background: $black;
pre {
box-shadow: 3px 3px $light;
border: none;
}
pre.src {
&::before {
background-color: $black;
color: $light;
}
}
.navbar, header {
background: $bg-nav;
}
.status {
background: $gradient-accent1-black-left;
}
.dropdown {
background: $dark;
color: $light;
}
#content {
a {
box-shadow: inset 0 -3px 0 $accent1;
transition: box-shadow 300ms ease-in-out;
&:hover {
box-shadow: inset 0 -23px 0 $accent1;
transition: box-shadow 300ms ease-in-out;
}
}
}
table, th, td {
border: 1px solid $light;
}
th {
background: lighten($black, 15%);
}
}
/* Style *********************************************************************/
* {
outline: none;
}
body {
margin: 0;
padding: 0;
font-family: "Noto Sans Runes", "DoulosSIL", "Lato", "proxima-nova", "Helvetica Neue", Arial, sans-serif;
font-size: 1.2em;
transition: background 500ms ease-in-out, color 1s ease-in-out;
header, .navbar {
transition: background 500ms ease-in-out, color 1s ease-in-out;
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
}
}
a {
color: currentColor;
text-decoration: none;
}
.navbar {
position: fixed;
top: 0;
z-index: 4;
height: $navbar-height;
width: 100%;
}
.navbar-nav {
display: flex;
align-items: center;
justify-content: space-evenly;
height: 100%;
}
header {
padding: 1em;
margin-top: $navbar-height;
margin-bottom: 1em;
padding-bottom: 6em;
text-align: center;
clip-path: polygon(50% 0%, 100% 0, 100% 80%, 50% 100%, 0 80%, 0 0);
transition: background 500ms ease-in-out;
.title {
font-size: 5em;
margin: 0;
@media #{$switch-small-screen} {
font-size: 3em;
}
}
.subtitle {
font-size: 1.2em;
}
}
.dropdown {
position: absolute;
opacity: 0;
z-index: -1;
border-bottom-right-radius: 8px;
border-bottom-left-radius: 8px;
display: flex;
align-items: center;
justify-content: space-around;
min-height: 3rem;
margin-top: 1rem;
padding: 0.5rem;
top: 0;
box-shadow: rgba(2, 8, 20, 0.1) 0px 0.175em 0.5em;
transform: translateX(-40%);
transition: opacity 500ms ease-in-out, top 500ms ease-in-out;
}
.has-dropdown {
&:focus-within {
.dropdown {
opacity: 1;
top: $navbar-height;
z-index: 5;
pointer-events: auto;
}
#table-of-contents {
top: $navbar-height / 1.3;
opacity: 1;
z-index: 5;
height: 500%;
pointer-events: auto;
}
}
}
#theme-dropdown {
width: 250px;
flex-direction: row;
transform: translateX(-75%);
}
#drop-page {
flex-direction: column;
transform: translateX(-40%);
li {
padding: 5px;
}
}
#drop-share {
li {
padding: 10px;
}
}
.dropdown-item {
cursor: pointer;
a {
width: 100%;
height: 100%;
size: 0.7rem;
padding-left: 10px;
padding-right: 10px;
font-weight: bold;
}
}
#table-of-contents {
flex-direction: column;
padding: 20px;
float: right;
overflow-y: auto;
height: 0%;
width: 75%;
min-width: 350px;
transform: translateX(-45%);
font-size: 0.9em;
top: -40px;
transition: height 500ms ease-in-out, opacity 500ms ease-in-out, top 500ms ease-in-out;
li {
padding: 5px 0;
}
h2 {
font-size: 1.2em;
}
#text-table-of-contents {
height: 100%;
}
}
#content {
padding: 50px;
padding-top: 0;
max-width: 1000px;
margin: 0 auto;
text-align: justify;
a {
font-style: italic;
}
}
#postamble {
display: grid;
grid-template-areas: 'author email date';
@media #{$switch-small-screen} {
grid-template-areas: 'author date' 'email email';
}
@media #{$switch-smaller-screen} {
grid-template-areas: 'author' 'date' 'email';
}
font-size: 0.8em;
align-content: space-evenly;
text-align: center;
p {
margin: 10px 0;
}
.author {
grid-area: author;
}
.email {
grid-area: email;
}
.date {
grid-area: date;
}
}
h1, h2, h3, h4, h5, h6 {
text-align: center;
}
h2 {
font-size: 2.5em;
@media #{$switch-small-screen} {
font-size: 1.75em;
}
}
h3 {
font-size: 2em;
@media #{$switch-small-screen} {
font-size: 1.5em;
}
}
h4 {
font-size: 1.5em;
@media #{$switch-small-screen} {
font-size: 1.3em;
}
}
h5 {
font-size: 1.25em;
@media #{$switch-small-screen} {
font-size: 1.2em;
}
}
.tooltip {
position: relative;
display: inline-block;
.tooltiptext {
visibility: hidden;
margin-left: -60px; /* Half the width */
bottom: 100%;
left: 10%;
padding: 5px 10px;
text-align: center;
border-radius: 6px;
position: absolute;
z-index: 5;
&::after {
content: " ";
position: absolute;
top: 100%; /* At the bottom of the tooltip */
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
}
}
&:hover {
.tooltiptext {
visibility: visible;
}
}
}
blockquote {
padding: 0;
margin: 20px;
font-style: italic;
}
.largetable {
overflow-y: auto;
margin-top:20px;
margin-bottom: 20px;
}
table {
margin: 0 auto;
}
th, td {
white-space: nowrap;
padding: 10px;
}
img {
max-height: 600px;
max-width: 100%;
}
.figure {
padding: 0;
}
ul {
padding-inline-start: 20px;
}
pre.src {
overflow-y: auto;
}
+3 -3
View File
@@ -1,5 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Une Grammaire du Tãso
#+TITLE: Tãso
#+HTML_HEAD: <meta name="description" content="Grammaire détaillée de la langue construite Tãso" />
#+HTML_HEAD: <meta property="og:title" content="Grammaire du Tãso" />
#+HTML_HEAD: <meta property="og:description" content="Grammaire détaillée de la langue construite Tãso" />
@@ -251,7 +251,7 @@
$input
#+END_SRC
#+NAME: arbre:vow
#+ATTR_HTML: :alt Arbre des voyelles du Tãso :align center :width 100%
#+ATTR_HTML: :alt Arbre des voyelles du Tãso :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques des voyelles du Tãso
#+RESULTS[eff961e714f2313ac2e974637800b18d5c11c928]:
@@ -357,7 +357,7 @@
$input
#+END_SRC
#+NAME: arbre:cons
#+ATTR_HTML: :alt Arbre des consonnes du Tãso :align center :width 100%
#+ATTR_HTML: :alt Arbre des consonnes du Tãso :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques des consonnes du Tãso
#+RESULTS[9bf7d97ca85780e74e9fbb5fc69cbc9800439890]: