feat: add verb declension for Eittlandic
This commit is contained in:
parent
75a0d5887e
commit
00d0b2f1ae
@ -30,6 +30,57 @@
|
|||||||
|
|
||||||
(require 'dash)
|
(require 'dash)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Constants ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
; Verbs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
(defconst conlanging-eittlandic--generic-verb-inflexion-indicative-present
|
||||||
|
'(("" . "r") ("" . "r") ("" . "r") (nil . "um") (nil . "ið") (nil . "ið"))
|
||||||
|
"Generic indicative present declension for Eittlandic verbs.
|
||||||
|
|
||||||
|
This table shows the declension of verbs for the indicative
|
||||||
|
present. The order of the declensions is first, second, and
|
||||||
|
third person, first singular, then plural.
|
||||||
|
|
||||||
|
Each declension is a cons cell containing first the default
|
||||||
|
underlying vowel, and second the generic suffix.")
|
||||||
|
|
||||||
|
(defconst conlanging-eittlandic--generic-verb-inflexion-subjunctive-present
|
||||||
|
'((nil . "ir") (nil . "ir") (nil . "ir")
|
||||||
|
(nil . "im") (nil . "ið") (nil . "ið"))
|
||||||
|
"Generic subjunctive present declension for Eittlandic verbs.
|
||||||
|
|
||||||
|
See
|
||||||
|
`conlanging-eittlandic--generic-verb-inflexion-indicative-present'.")
|
||||||
|
|
||||||
|
(defconst conlanging-eittlandic--generic-verb-inflexion-past
|
||||||
|
'((nil . "t") (nil . "t") (nil . "t")
|
||||||
|
(nil . "um") (nil . "uð") (nil . "uð"))
|
||||||
|
"Generic past declension for Eittlandic verbs.
|
||||||
|
|
||||||
|
See
|
||||||
|
`conlanging-eittlandic--generic-verb-inflexion-indicative-present'.")
|
||||||
|
|
||||||
|
(defconst conlanging-eittlandic--strong-verb-inflexion-passive
|
||||||
|
'((nil . "umk") (nil . "sk") ("" . "sk")
|
||||||
|
(nil . "umk") ("" . "sk") ("" . "sk"))
|
||||||
|
"Strong passive inflexion for Eittlandic verbs.
|
||||||
|
|
||||||
|
See
|
||||||
|
`conlanging-eittlandic--generic-verb-inflexion-indicative-present'.")
|
||||||
|
|
||||||
|
(defconst conlanging-eittlandic--weak-verb-inflexion-passive
|
||||||
|
'((nil . "umk") ("" . "isk") ("" . "isk")
|
||||||
|
(nil . "umk") ("" . "isk") ("" . "isk"))
|
||||||
|
"Weak passive inflexion for Eittlandic verbs.
|
||||||
|
|
||||||
|
See
|
||||||
|
`conlanging-eittlandic--generic-verb-inflexion-indicative-present'.")
|
||||||
|
|
||||||
|
; Nouns ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defconst conlanging-eittlandic--strong-common-noun-declension
|
(defconst conlanging-eittlandic--strong-common-noun-declension
|
||||||
'((nil . "r") (nil . nil) (nil . nil) ("a" . "r")
|
'((nil . "r") (nil . nil) (nil . nil) ("a" . "r")
|
||||||
(nil . "r") (nil . nil) (nil . "um") ("a" . "r"))
|
(nil . "r") (nil . nil) (nil . "um") ("a" . "r"))
|
||||||
@ -76,6 +127,12 @@ See `conlanging-eittlandic--strong-common-noun-declension' for more info.")
|
|||||||
|
|
||||||
See `conlanging-eittlandic--strong-common-noun-declension' for more info.")
|
See `conlanging-eittlandic--strong-common-noun-declension' for more info.")
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Functions ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
; Generic ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defun conlanging-eittlandic--maybe-underlying-vowel (underlying-vowel default-vowel)
|
(defun conlanging-eittlandic--maybe-underlying-vowel (underlying-vowel default-vowel)
|
||||||
"Return which underlying vowel should be used.
|
"Return which underlying vowel should be used.
|
||||||
|
|
||||||
@ -93,8 +150,8 @@ UNDERLYING-VOWEL is non-nil."
|
|||||||
(second-half (seq-subseq list half)))
|
(second-half (seq-subseq list half)))
|
||||||
(cons first-half second-half)))
|
(cons first-half second-half)))
|
||||||
|
|
||||||
(defun conlanging-eittlandic--make-noun-declension-from-table (root underlying-vowel table)
|
(defun conlanging-eittlandic--generate-declension-from-table (root underlying-vowel table)
|
||||||
"Decline a noun ROOT (with maybe an UNDERLYING-VOWEL) with TABLE."
|
"Decline a ROOT (with maybe an UNDERLYING-VOWEL) with TABLE."
|
||||||
(seq-reverse
|
(seq-reverse
|
||||||
(let (result)
|
(let (result)
|
||||||
(dolist (declension table result)
|
(dolist (declension table result)
|
||||||
@ -103,6 +160,79 @@ UNDERLYING-VOWEL is non-nil."
|
|||||||
(cdr declension))
|
(cdr declension))
|
||||||
result)))))
|
result)))))
|
||||||
|
|
||||||
|
; Verbs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
(defmacro conlanging-eittlandic--build-verb-declension-org ()
|
||||||
|
"Just to avoid typing all of this out.
|
||||||
|
|
||||||
|
ROOT, IMPERATIVE-PASSIVE, PRESENT-PARTICIPLE, PAST-PARTICIPLE,
|
||||||
|
IND-PRES, SUBJ-PRES, PAST, and PASSIVE are all different forms of
|
||||||
|
the verb that will be inserted in the org text."
|
||||||
|
`(format "Declensions:
|
||||||
|
- infinitive :: %s
|
||||||
|
- imperative :: %s
|
||||||
|
- imperative passive voice :: %s
|
||||||
|
- present participle :: %s
|
||||||
|
- past participle :: %s
|
||||||
|
|
||||||
|
| <c> | | | | | |
|
||||||
|
| person | | Ind. Pres. | Subj. Pres. | Past | Passive |
|
||||||
|
|--------+-+------------+-------------+------+---------|
|
||||||
|
| 1s | | %s | %s | %s | %s |
|
||||||
|
| 2s | | %s | %s | %s | %s |
|
||||||
|
| 3s | | %s | %s | %s | %s |
|
||||||
|
| 1p | | %s | %s | %s | %s |
|
||||||
|
| 2p | | %s | %s | %s | %s |
|
||||||
|
| 3p | | %s | %s | %s | %s |"
|
||||||
|
root root (concat root "ask") (concat root "and") (concat root "it")
|
||||||
|
,@(let (accessor i)
|
||||||
|
(reverse (dolist (declension
|
||||||
|
'(indicative-present subjunctive-present past passive)
|
||||||
|
accessor)
|
||||||
|
(setq i 0)
|
||||||
|
(while (< i 6)
|
||||||
|
(push `(nth ,i ,declension) accessor)
|
||||||
|
(setq i (1+ i))))))))
|
||||||
|
|
||||||
|
(defun conlanging-eittlandic--make-passive-verb-declension (root strength underlying-vowel passive-consonant passive-vowel)
|
||||||
|
"Create a verb declension for the passive mood.
|
||||||
|
|
||||||
|
Generates a passive declension for a verb with its ROOT based on
|
||||||
|
its STRENGTH and UNDERLYING-VOWEL. If there is no underlying
|
||||||
|
vowel for weak verbs, then the PASSIVE-VOWEL may be used instead.
|
||||||
|
|
||||||
|
If the verb is a verb is a strong verb, the PASSIVE-CONSONANT
|
||||||
|
will be used in some declensions."
|
||||||
|
(if (eq 'strong strength)
|
||||||
|
(conlanging-eittlandic--generate-declension-from-table root (or passive-vowel underlying-vowel)
|
||||||
|
conlanging-eittlandic--strong-verb-inflexion-passive)
|
||||||
|
(conlanging-eittlandic--generate-declension-from-table root passive-consonant
|
||||||
|
conlanging-eittlandic--weak-verb-inflexion-passive)))
|
||||||
|
|
||||||
|
(defun conlanging-eittlandic--make-verb-declension (root strength underlying-vowel passive-consonant passive-vowel mood tense)
|
||||||
|
"Create a verb declension based on its MOOD and TENSE.
|
||||||
|
|
||||||
|
Based on a verb’s ROOT, STRENGTH, UNDERLYING-VOWEL, and potential
|
||||||
|
PASSIVE-CONSONANT or PASSIVE-VOWEL, create a verb’s declension as
|
||||||
|
a list, in the following order:
|
||||||
|
- first person singular
|
||||||
|
- second person singular
|
||||||
|
- third person singular
|
||||||
|
- first person plural
|
||||||
|
- second person plural
|
||||||
|
- third person plural"
|
||||||
|
(if (eq 'passive mood)
|
||||||
|
(conlanging-eittlandic--make-passive-verb-declension root strength underlying-vowel passive-consonant passive-vowel)
|
||||||
|
(if (eq 'past tense)
|
||||||
|
(conlanging-eittlandic--generate-declension-from-table root underlying-vowel
|
||||||
|
conlanging-eittlandic--generic-verb-inflexion-past)
|
||||||
|
(conlanging-eittlandic--generate-declension-from-table
|
||||||
|
root underlying-vowel
|
||||||
|
(if (eq 'indicative mood)
|
||||||
|
conlanging-eittlandic--generic-verb-inflexion-indicative-present
|
||||||
|
conlanging-eittlandic--generic-verb-inflexion-subjunctive-present)))))
|
||||||
|
|
||||||
|
; Nouns ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defun conlanging-eittlandic--make-noun-declension (root gender strength underlying-vowel &optional definite)
|
(defun conlanging-eittlandic--make-noun-declension (root gender strength underlying-vowel &optional definite)
|
||||||
"Create declensions of a word in Eittlandic.
|
"Create declensions of a word in Eittlandic.
|
||||||
|
|
||||||
@ -117,7 +247,7 @@ list, going in the following order:
|
|||||||
- plural accusative
|
- plural accusative
|
||||||
- plural dative
|
- plural dative
|
||||||
- plural genitive"
|
- plural genitive"
|
||||||
(conlanging-eittlandic--make-noun-declension-from-table
|
(conlanging-eittlandic--generate-declension-from-table
|
||||||
root underlying-vowel
|
root underlying-vowel
|
||||||
(if definite
|
(if definite
|
||||||
(if (and (eq 'strong strength) (eq 'common gender))
|
(if (and (eq 'strong strength) (eq 'common gender))
|
||||||
@ -144,6 +274,42 @@ list, going in the following order:
|
|||||||
(push `(nth ,i ,case) accessors)
|
(push `(nth ,i ,case) accessors)
|
||||||
(setq i (1+ i))))))))
|
(setq i (1+ i))))))))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Public functions ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun conlanging-eittlandic-insert-verb-declension (root strength underlying-vowel)
|
||||||
|
"Insert declensions of ROOT in org format at point.
|
||||||
|
|
||||||
|
Determines how to make declensions of the verb depending on its
|
||||||
|
STRENGTH and UNDERLYING-VOWEL."
|
||||||
|
(interactive
|
||||||
|
(list
|
||||||
|
(read-string "Verb root: ")
|
||||||
|
(pcase (completing-read "Strength: " '("strong" "weak") nil t)
|
||||||
|
("strong" 'strong)
|
||||||
|
("weak" 'weak)
|
||||||
|
(other (error (format "Unknown strength: %S" other))))
|
||||||
|
(let ((vowel (read-string "Underlying vowel (leave blank if none): ")))
|
||||||
|
(if (string= "" vowel) nil vowel))))
|
||||||
|
(let* ((passive-consonant (when (eq 'weak strength)
|
||||||
|
(completing-read "Consonant for passive declension: " '("d" "t" "ð") nil t)))
|
||||||
|
(passive-vowel (when (eq 'strong strength)
|
||||||
|
(completing-read "Vowel for passive declension: " '("a" "i") nil t)))
|
||||||
|
(indicative-present (conlanging-eittlandic--make-verb-declension root strength underlying-vowel
|
||||||
|
passive-consonant passive-vowel
|
||||||
|
'indicative 'present))
|
||||||
|
(subjunctive-present (conlanging-eittlandic--make-verb-declension root strength underlying-vowel
|
||||||
|
passive-consonant passive-vowel
|
||||||
|
'subjunctive 'present))
|
||||||
|
(past (conlanging-eittlandic--make-verb-declension root strength underlying-vowel passive-consonant
|
||||||
|
passive-vowel nil 'past))
|
||||||
|
(passive (conlanging-eittlandic--make-verb-declension root strength underlying-vowel
|
||||||
|
passive-consonant passive-vowel
|
||||||
|
'passive nil)))
|
||||||
|
(insert (conlanging-eittlandic--build-verb-declension-org))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun conlanging-eittlandic-insert-noun-declensions (root gender strength underlying-vowel)
|
(defun conlanging-eittlandic-insert-noun-declensions (root gender strength underlying-vowel)
|
||||||
"Insert declensions of ROOT in org format at point.
|
"Insert declensions of ROOT in org format at point.
|
||||||
|
Loading…
Reference in New Issue
Block a user