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 11:44:27 +00:00
44 changed files with 1341 additions and 2887 deletions

3
.gitignore vendored
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/

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
TODOs.org Normal file
View File

@ -0,0 +1,30 @@
* TODO Organization of HTML [4/4]
** DONE Add link to images that dont 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]

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/

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

3
start.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
sass --watch web/style/:web/style -tcompressed &
webdev serve --release --hostname 0.0.0.0

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" />

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;
}

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 */

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 */

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;
}

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;
}
}

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;
}

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);
}

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
web/dart/navbar.dart Normal file
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;
}

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('Couldnt 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);
}

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
web/dart/theme.dart Normal file
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

View File

@ -1,5 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Une Grammaire de lEittlandais
#+TITLE: Eittlandais
#+LANGUAGE: fr
#+HTML_HEAD: <meta name="description" content="Grammaire détaillée de lEittlandais" />
#+HTML_HEAD: <meta property="og:title" content="Grammaire de lEittlandais" />
@ -195,7 +195,6 @@
similaire à celui du sud de lAngleterre, 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 lEittlande à lUnion.
#+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 lAngleterre.
#+NAME: img:map-world
#+ATTR_HTML: :width 100%
#+CAPTION: Emplacement dEittlande dans lOcé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 dEittlande
[[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 dEittlande
[[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 lEittlandais :width 100%
#+ATTR_HTML: :alt Arbre des voyelles de lEittlandais :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques distinctives des voyelles de lEittlandais
#+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 lEittlandais :width 100%
#+ATTR_HTML: :alt Arbre des consonnes de lEittlandais :class gentree
#+ATTR_LATEX: :float sideways
#+CAPTION: Arbre des caractéristiques distinctives des consonnes de lEittlandais
#+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

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]:

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>@@

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

View File

@ -1,6 +1,5 @@
# -*- org-confirm-babel-evaluate: nil -*-
#+TITLE: Langues construites de Pundrak
#+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 Pundrak" />
#+HTML_HEAD: <meta property="og:title" content="Langues construites de Pundrak" />
#+HTML_HEAD: <meta property="og:description" content="Collection de documents et pages webs de linguistique et de langues construites de Pundrak" />

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" />

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 dexprimer sa
grammaire et très peu sur des règles morphologiques. La large majorité des
isolationniste, reposant quasi exclusivement sur sa syntaxe afin dexprimer
sa grammaire et très peu sur des règles morphologiques. La large majorité des
mots sont monosyllabiques ou bisyllabiques, et les phrases sarticulent
souvent autour de morphèmes liés monosyllabiques que lon 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
Jai vu le singe qui a mangé une pomme à moi
Dans lexemple n°1, nous pouvons remarquer labsence dun 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.
Lexemple n°2 nous montre la méthode utilisée en Ñyqy afin demployer le
duel : il sagit daffixer 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 demployer
le duel : il sagit daffixer 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 dordre basique des constituants
dune clause simple, où lon peut voir une suite SV dans cette clause
@ -450,6 +456,14 @@
[[#h-26aa65ba-2694-4c63-bf91-258dad3b0430]], il sagit de la méthode principale
dinflexion 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 quun exemple de référence dans une clause subordonnée à un
élément extérieur quelle 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 larbre [[arbre:syntaxe:basique]] que la
structure générale dune phrase standard démarre avec des éléments divers
liés à la clause principale sil 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 dune 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 larbre [[arbre:syntaxe:basique]] que la
# structure générale dune phrase standard démarre avec des éléments divers
# liés à la clause principale sil 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 dune 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, lordre 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 lagent est nécessairement précédé par un élément
datif. Il est cependant possible lorsquaucun élément datif nest à
mentionner dutiliser le terme {{{nyqy(bóq)}}} signifiant « rien, aucun ».
# En Ñyqy, lordre 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 lagent est nécessairement précédé par un élément
# datif. Il est cependant possible lorsquaucun élément datif nest à
# mentionner dutiliser le terme {{{nyqy(bóq)}}} signifiant « rien, aucun ».
Il est également à noter que selon les recherches actuelles, rien ne nous
laisse à penser quun autre ordre de ces constituants était possible en Ñyqy
mis à par lajout dautres éléments obliques en début de phrase.
# Il est également à noter que selon les recherches actuelles, rien ne nous
# laisse à penser quun autre ordre de ces constituants était possible en Ñyqy
# mis à par lajout dautres éléments obliques en début de phrase.
Le Ñyqy est une langue particulière quant il sagit de lordre de ses
éléments principaux dans ses phrases et clauses principales. Tout dabord,
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 lordre typique dune clause principale Ñyqy est donc OSV.
Il sagit dun 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 quau 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é, lordre 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 larbre 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 dune 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 larticle 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 lon souhaite traduire « ces vingt chats
à moi » (le génitif relative est ici pour contrecarrer limpossibilité en
français dutiliser 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 lon 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 dopinion
- Adjectifs de taille
- Adjectifs de quantité
- Adjectifs dâge
- Adjectifs dorigine
- Adjectifs dobjectif
- Adjectifs de matériaux
- Adjectifs de forme
- Adjectifs de couleur
En Ñyqy, ils apparaissent dans lordre ci-dessus et sont classés par
objectivité, et tous viennent après le nom à lexception des adjectifs
dopinion. 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
lutilisation dun génitif de type « NOM GEN » (par exemple « carré GEN
table » pour dire « table carrée »)
- que les adjectifs dorigine ne se forment quavec une particule locative
- que les adjectifs dobjectif ne se forment quavec une particule
instrumentative.
Ainsi, si lon 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 dopinion. 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 lon 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ó)}}} ::
1. (n) cœur
2. (adj) ému (le cœur qui bat à cause dune é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, quelquun
- {{{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) dapparence 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 dentre 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:

View File

@ -1,10 +1,10 @@
#+TITLE: Sitemap for project langue-phundrak-com-org
- [[file:index.org][Langues construites de Pundrak]]
- [[file:eittland.org][Une Grammaire de lEittlandais]]
- [[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
web/style/style.scss Normal file
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;
}

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]: