commit e8b8a1121a8d1826f0ff8874e38594bfaedddfac (HEAD, refs/remotes/origin/master) Author: Eli Zaretskii Date: Fri Nov 8 09:17:50 2024 +0200 ; Fix quoting style in comments in itree.[ch] files * src/itree.c: * src/itree.h: Fix quoting style in comments. diff --git a/src/itree.c b/src/itree.c index 749e65c2eed..f35226ad226 100644 --- a/src/itree.c +++ b/src/itree.c @@ -378,9 +378,9 @@ itree_inherit_offset (uintmax_t otick, struct itree_node *node) node->right->offset += node->offset; node->offset = 0; } - /* The only thing that matters about `otick` is whether it's equal to + /* The only thing that matters about 'otick' is whether it's equal to that of the tree. We could also "blindly" inherit from parent->otick, - but we need to tree's `otick` anyway for when there's no parent. */ + but we need to tree's 'otick' anyway for when there's no parent. */ if (node->parent == NULL || node->parent->otick == otick) node->otick = otick; } @@ -683,7 +683,7 @@ itree_insert_node (struct itree_tree *tree, struct itree_node *node) struct itree_node *parent = NULL; struct itree_node *child = tree->root; uintmax_t otick = tree->otick; - /* It's the responsibility of the caller to set `otick` on the node, + /* It's the responsibility of the caller to set 'otick' on the node, to "confirm" that the begin/end fields are up to date. */ eassert (node->otick == otick); @@ -913,8 +913,8 @@ itree_total_offset (struct itree_node *node) link the tree root. Warning: DEST is left unmodified. SOURCE's child links are - unchanged. Caller is responsible for recalculation of `limit`. - Requires both nodes to be using the same effective `offset`. */ + unchanged. Caller is responsible for recalculation of 'limit'. + Requires both nodes to be using the same effective 'offset'. */ static void itree_replace_child (struct itree_tree *tree, struct itree_node *source, @@ -939,8 +939,8 @@ itree_replace_child (struct itree_tree *tree, parent, left and right in surrounding nodes to point to SOURCE. Warning: DEST is left unmodified. Caller is responsible for - recalculation of `limit`. Requires both nodes to be using the same - effective `offset`. */ + recalculation of 'limit'. Requires both nodes to be using the same + effective 'offset'. */ static void itree_transplant (struct itree_tree *tree, struct itree_node *source, @@ -964,38 +964,38 @@ itree_remove (struct itree_tree *tree, struct itree_node *node) eassert (itree_contains (tree, node)); eassert (check_tree (tree, true)); /* FIXME: Too expensive. */ - /* Find `splice`, the leaf node to splice out of the tree. When - `node` has at most one child this is `node` itself. Otherwise, - it is the in order successor of `node`. */ + /* Find 'splice', the leaf node to splice out of the tree. When + 'node' has at most one child this is 'node' itself. Otherwise, + it is the in order successor of 'node'. */ itree_inherit_offset (tree->otick, node); struct itree_node *splice = (node->left == NULL || node->right == NULL) ? node : itree_subtree_min (tree->otick, node->right); - /* Find `subtree`, the only child of `splice` (may be NULL). Note: - `subtree` will not be modified other than changing its parent to - `splice`. */ + /* Find 'subtree', the only child of 'splice' (may be NULL). Note: + 'subtree' will not be modified other than changing its parent to + 'splice'. */ eassert (splice->left == NULL || splice->right == NULL); struct itree_node *subtree = (splice->left != NULL) ? splice->left : splice->right; - /* Save a pointer to the parent of where `subtree` will eventually - be in `subtree_parent`. */ + /* Save a pointer to the parent of where 'subtree' will eventually + be in 'subtree_parent'. */ struct itree_node *subtree_parent = (splice->parent != node) ? splice->parent : splice; - /* If `splice` is black removing it may violate Red-Black + /* If 'splice' is black removing it may violate Red-Black invariants, so note this for later. */ - /* Replace `splice` with `subtree` under subtree's parent. If - `splice` is black, this creates a red-red violation, so remember + /* Replace 'splice' with 'subtree' under subtree's parent. If + 'splice' is black, this creates a red-red violation, so remember this now as the field can be overwritten when splice is transplanted below. */ itree_replace_child (tree, subtree, splice); bool removed_black = !splice->red; - /* Replace `node` with `splice` in the tree and propagate limit + /* Replace 'node' with 'splice' in the tree and propagate limit upwards, if necessary. Note: Limit propagation can stabilize at any point, so we must call from bottom to top for every node that has a new child. */ @@ -1054,8 +1054,8 @@ itree_insert_gap (struct itree_tree *tree, /* Nodes with front_advance starting at pos may mess up the tree order, so we need to remove them first. This doesn't apply for - `before_markers` since in that case, all positions move identically - regardless of `front_advance` or `rear_advance`. */ + 'before_markers' since in that case, all positions move identically + regardless of 'front_advance' or 'rear_advance'. */ struct itree_stack *saved = itree_stack_create (0); struct itree_node *node = NULL; if (!before_markers) @@ -1208,7 +1208,7 @@ itree_node_intersects (const struct itree_node *node, Note that this should return all the nodes that we need to traverse in order to traverse the nodes selected by the current narrowing (i.e. - `ITER->begin..ITER->end`) so it will also return some nodes which aren't in + 'ITER->begin..ITER->end') so it will also return some nodes which aren't in that narrowing simply because they may have children which are. The code itself is very unsatisfactory because the code of each one @@ -1221,8 +1221,8 @@ itree_iter_next_in_subtree (struct itree_node *node, struct itree_iterator *iter) { /* FIXME: Like in the previous version of the iterator, we - prune based on `limit` only when moving to a left child, - but `limit` can also get smaller when moving to a right child + prune based on 'limit' only when moving to a left child, + but 'limit' can also get smaller when moving to a right child It's actually fairly common, so maybe it would be worthwhile to prune a bit more aggressively here. */ struct itree_node *next; @@ -1387,10 +1387,10 @@ itree_iterator_start (struct itree_iterator *iter, iter->end = end; iter->otick = tree->otick; iter->order = order; - /* Beware: the `node` field always holds "the next" node to consider. + /* Beware: the 'node' field always holds "the next" node to consider. so it's always "one node ahead" of what the iterator loop sees. In most respects this makes no difference, but we depend on this - detail in `delete_all_overlays` where this allows us to modify + detail in 'delete_all_overlays' where this allows us to modify the current node knowing that the iterator will not need it to find the next. */ iter->node = itree_iterator_first_node (tree, iter); diff --git a/src/itree.h b/src/itree.h index f54dbd7f07e..23e1105a05d 100644 --- a/src/itree.h +++ b/src/itree.h @@ -41,7 +41,7 @@ INLINE_HEADER_BEGIN struct itree_node { /* The normal parent, left and right links found in binary trees. - See also `red`, below, which completes the Red-Black tree + See also 'red', below, which completes the Red-Black tree representation. */ struct itree_node *parent; struct itree_node *left; @@ -147,13 +147,13 @@ struct itree_iterator struct itree_node *node; ptrdiff_t begin; ptrdiff_t end; - uintmax_t otick; /* A copy of the tree's `otick`. */ + uintmax_t otick; /* A copy of the tree's 'otick'. */ enum itree_order order; }; /* Iterate over the intervals between BEG and END in the tree T. - N will hold successive nodes. ORDER can be one of : `ASCENDING`, - `DESCENDING`, `POST_ORDER`, or `PRE_ORDER`. + N will hold successive nodes. ORDER can be one of : 'ASCENDING', + 'DESCENDING', 'POST_ORDER', or 'PRE_ORDER'. It should be used as: ITREE_FOREACH (n, t, beg, end, order) @@ -167,12 +167,12 @@ struct itree_iterator - Don't modify the tree during the iteration. */ #define ITREE_FOREACH(n, t, beg, end, order) \ - /* FIXME: We'd want to declare `n` right here, but I can't figure out - how to make that work here: the `for` syntax only allows a single + /* FIXME: We'd want to declare 'n' right here, but I can't figure out + how to make that work here: the 'for' syntax only allows a single clause for the var declarations where we need 2 different types. - We could use the `struct {foo x; bar y; } p;` trick to declare two - vars `p.x` and `p.y` of unrelated types, but then none of the names - of the vars matches the `n` we receive :-(. */ \ + We could use the 'struct {foo x; bar y; } p;' trick to declare two + vars 'p.x' and 'p.y' of unrelated types, but then none of the names + of the vars matches the 'n' we receive :-(. */ \ if (!t) \ { } \ else \ commit ef440f59a170c3c69948fca863f368e397d503b4 Author: Jim Porter Date: Thu Nov 7 13:57:35 2024 -0800 Always print the expanded directory name for Eshell's "pwd" command * lisp/eshell/em-dirs.el (eshell-pwd-convert-function): Default to 'expand-file-name' on all systems. * etc/NEWS: Announce this change. diff --git a/etc/NEWS b/etc/NEWS index 8685c36a47e..19b8b7bb70b 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -704,6 +704,13 @@ Use 'if-let*', 'when-let*' and 'and-let*' instead. This effectively obsoletes the old '(if-let (SYMBOL SOMETHING) ...)' single binding syntax, which we'd kept only for backwards compatibility. +--- +** The Eshell 'pwd' command now expands the directory name on all systems. +This ensures that user directories are properly expanded to their full +name. Previously, Eshell only did this for MS-Windows systems. To +restore the old behavior, you can set 'eshell-pwd-convert-function' to +'identity'. + * Lisp Changes in Emacs 31.1 diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el index ad0a5beac1e..e005bc98873 100644 --- a/lisp/eshell/em-dirs.el +++ b/lisp/eshell/em-dirs.el @@ -65,9 +65,7 @@ they lack somewhat in feel from the typical shell equivalents." :version "24.1" ; removed eshell-dirs-initialize :type 'hook) -(defcustom eshell-pwd-convert-function (if (eshell-under-windows-p) - #'expand-file-name - #'identity) +(defcustom eshell-pwd-convert-function #'expand-file-name "The function used to normalize the value of Eshell's `pwd'. The value returned by `pwd' is also used when recording the last-visited directory in the last-dir-ring, so it will affect the @@ -75,7 +73,8 @@ form of the list used by `cd ='." :type '(radio (function-item file-truename) (function-item expand-file-name) (function-item identity) - (function :tag "Other"))) + (function :tag "Other")) + :version "31.1") (defcustom eshell-ask-to-save-last-dir 'always "Determine if the last-dir-ring should be automatically saved. commit 3e36267b25ea9730e4acd8b0f47c5e967cea9e94 Author: Robert Pluim Date: Thu Nov 7 21:03:20 2024 +0100 Ensure `move-frame-functions' trigger on macOS frame resize * src/nsterm.m ([EmacsView windowWillResize:toSize:]): Call windowDidMove to ensure that MOVE_FRAME_EVENT events are generated when a frame is resized. (Bug#74074) diff --git a/src/nsterm.m b/src/nsterm.m index 8862a74f129..47ce20455c5 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -7899,6 +7899,9 @@ - (NSSize)windowWillResize: (NSWindow *)sender toSize: (NSSize)frameSize NSTRACE_RETURN_SIZE (frameSize); + /* Trigger `move-frame-functions' (Bug#74074). */ + [self windowDidMove:(NSNotification *)sender]; + return frameSize; } commit 4b4ca233675b7a820feca5893e5279327ab76795 Author: Eli Zaretskii Date: Thu Nov 7 21:51:56 2024 +0200 ; * lisp/net/eww.el (eww-submit): Fix last change (bug#65973). diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 32e88909956..4d4d4d6beac 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -2078,8 +2078,9 @@ Interactively, EVENT is the value of `last-nonmenu-event'." (cons "name" name) ;; RFC 2183 declares that recipients should ;; only respect the basename of the filename - ;; parameter, so we only send that portion in - ;; our request. + ;; parameter, and the leading directories + ;; might divulge private information, so we + ;; only send the basename in our request. (cons "filename" (file-name-nondirectory file))) values))) ((equal (plist-get input :type) "submit") commit f6b55678d76a7b549993d629672a4f33d269dbd8 Author: Daniel Watson Date: Tue Sep 12 00:06:14 2023 -0700 When submitting files in EWW, only send the file's basename * lisp/net/eww.el (eww-submit): Send the basename, not the full filename (bug#65973). Copyright-paperwork-exempt: yes diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 2d351dff88f..32e88909956 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -2076,7 +2076,11 @@ Interactively, EVENT is the value of `last-nonmenu-event'." (insert-file-contents file) (buffer-string))) (cons "name" name) - (cons "filename" file)) + ;; RFC 2183 declares that recipients should + ;; only respect the basename of the filename + ;; parameter, so we only send that portion in + ;; our request. + (cons "filename" (file-name-nondirectory file))) values))) ((equal (plist-get input :type) "submit") ;; We want the values from buttons if we hit a button if commit acce03eb549ec102dc2bda2e509551f03dc60175 Author: Ulf Jasper Date: Thu Nov 7 16:45:13 2024 +0100 * lisp/net/newst-plainview.el: Fix Bug#74198 * lisp/net/newst-plainview.el (newsticker--do-mark-item-at-point-as-read): Save feed cache immediately when item state is changed. (Bug#74198) diff --git a/lisp/net/newst-plainview.el b/lisp/net/newst-plainview.el index 1bc4bc84440..4122777ac8c 100644 --- a/lisp/net/newst-plainview.el +++ b/lisp/net/newst-plainview.el @@ -805,6 +805,7 @@ not get changed." (widen) (put-text-property (point) pos 'nt-age 'old) (newsticker--buffer-set-faces (point) pos))) + (newsticker--cache-save-feed (newsticker--cache-get-feed feed)) (set-buffer-modified-p nil))))))) (defun newsticker-mark-item-at-point-as-immortal () commit 63d4c4b9ce469c596de9b38977ad7bf6e28349eb Author: Kierin Bell Date: Thu Nov 7 07:55:01 2024 -0500 Enable guidance for Northern Iroquoian input methods * lisp/leim/quail/iroquoian.el: Set GUIDANCE argument of 'quail-define-package' forms to non-nil. (Bug#74170) diff --git a/lisp/leim/quail/iroquoian.el b/lisp/leim/quail/iroquoian.el index ca06e61bfa3..3b4fdad62c2 100644 --- a/lisp/leim/quail/iroquoian.el +++ b/lisp/leim/quail/iroquoian.el @@ -122,7 +122,7 @@ Entries are as with rules in `quail-define-rules'.") Entries are as with rules in `quail-define-rules'.") (quail-define-package - "mohawk-postfix" "Mohawk" "MOH<" nil + "mohawk-postfix" "Mohawk" "MOH<" t "Mohawk (Kanien’kéha) input method with postfix modifiers Stress diacritics: @@ -228,7 +228,7 @@ Entries are as with rules in `quail-define-rules'.") Entries are as with rules in `quail-define-rules'.") (quail-define-package - "oneida-postfix" "Oneida" "ONE<" nil + "oneida-postfix" "Oneida" "ONE<" t "Oneida (Onʌyota:ká:) input method with postfix modifiers Modifiers: @@ -401,7 +401,7 @@ Entries are as with rules in `quail-define-rules'.") Entries are as with rules in `quail-define-rules'.") (quail-define-package - "onondaga-postfix" "Onondaga" "ONO<" nil + "onondaga-postfix" "Onondaga" "ONO<" t "Onondaga (Onųdaʔgegáʔ) input method with postfix modifiers Modifiers: @@ -571,7 +571,7 @@ Entries are as with rules in `quail-define-rules'.") Entries are as with rules in `quail-define-rules'.") (quail-define-package - "cayuga-postfix" "Cayuga" "CAY<" nil + "cayuga-postfix" "Cayuga" "CAY<" t "Cayuga (Gayogo̱ho:nǫhnéha:ˀ) input method with postfix modifiers Stress diacritics: @@ -744,7 +744,7 @@ Entries are as with rules in `quail-define-rules'.") Entries are as with rules in `quail-define-rules'.") (quail-define-package - "seneca-postfix" "Seneca" "SEE<" nil + "seneca-postfix" "Seneca" "SEE<" t "Seneca (Onödowá’ga:’) input method with postfix modifiers Stress diacritics: @@ -890,7 +890,7 @@ Entries are as with rules in `quail-define-rules'.") Entries are as with rules in `quail-define-rules'.") (quail-define-package - "haudenosaunee-postfix" "Haudenosaunee" "HOD<" nil + "haudenosaunee-postfix" "Haudenosaunee" "HOD<" t "Composite input method for Haudenosaunee (Northern Iroquoian) languages This input method can be used to enter the following languages: commit 04b055797a4b51392658548e4847cb7513354c67 Author: Kierin Bell Date: Sun Nov 3 15:19:09 2024 -0500 New input methods for Northern Iroquoian languages * lisp/leim/quail/iroquoian.el: New file. (Bug#74170) * etc/NEWS: Announce the new input methods. diff --git a/etc/NEWS b/etc/NEWS index af6259a68c8..8685c36a47e 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -177,6 +177,17 @@ characters. *** New language-environment and input method for Tifinagh. The Tifinagh script is used to write the Berber languages. +--- +*** New input methods for Northern Iroquoian languages. +Input methods are now implemented for Haudenosaunee languages in the +Northern Iroquoian language family: 'mohawk-postfix' (Mohawk +[Kanien’kéha / Onkwehonwehnéha]), 'oneida-postfix' (Oneida [Onʌyota:ká: +/ Ukwehuwehnéha]), 'cayuga-postfix' (Cayuga [Gayogo̱ho:nǫhnéha:ˀ]), +'onondaga-postfix (Onondaga [[Onųdaʔgegáʔ]), and `seneca-postfix' +[Onödowá’ga:’]). Additionally, there is a general-purpose +'haudenosaunee-postfix' input method to facilitate writing in the +orthographies of the five languages simultaneously. + --- ** 'visual-wrap-prefix-mode' now supports variable-pitch fonts. When using 'visual-wrap-prefix-mode' in buffers with variable-pitch diff --git a/lisp/leim/quail/iroquoian.el b/lisp/leim/quail/iroquoian.el new file mode 100644 index 00000000000..ca06e61bfa3 --- /dev/null +++ b/lisp/leim/quail/iroquoian.el @@ -0,0 +1,1051 @@ +;;; iroquoian.el --- Quail packages for inputting Iroquoian languages -*- lexical-binding: t; coding: utf-8; -*- + +;; Copyright (C) 2024 Free Software Foundation, Inc. + +;; Author: Kierin Bell +;; Keywords: i18n + +;; This file is part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU 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 General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; This file implements input methods for Northern Iroquoian languages. + +;; Input methods are implemented for all Five Nations Iroquois +;; languages: + +;; - Mohawk (Kanien’kéha / Onkwehonwehnéha) +;; - Oneida (Onʌyota:ká: / Ukwehuwehnéha) +;; - Onondaga (Onųdaʔgegáʔ) +;; - Cayuga (Gayogo̱ho:nǫhnéha:ˀ) +;; - Seneca (Onödowá’ga:’) + +;; A composite input method for all of the languages above is also +;; defined: `haudenosaunee-postfix'. + +;; Input methods are not yet implemented for the remaining Northern +;; Iroquoian languages, including: + +;; - Tuscarora (Skarù:ręʔ) +;; - Wendat (Huron) / Wyandot + +;;; Code: + +(require 'quail) +(require 'seq) +(require 'pcase) + + +;;; Mohawk + +;; +;; There are several orthographies used today to write Mohawk in +;; different communities, but differences are small and mainly involve +;; differences in representation of the palatal glide [j] (written +;; in Eastern/Central dialects and in Western dialects). The +;; following input method should work for all of variants. +;; +;; Reference work for orthographies used by speakers of Eastern +;; (Kahnawà:ke, Kanehsatà:ke, Wáhta) and Central (Ahkwesahsne) dialects +;; of Mohawk: +;; +;; Lazore, Dorothy Karihwénhawe. 1993. The Mohawk language +;; Standardisation Project, Conference Report. Ontario: Literacy +;; Ontario. +;; +;; Reference work for the orthography commonly used by speakers of +;; Western dialects of Mohawk (Tyendinaga, Ohswé:ken): +;; +;; Brian Maracle. 2021. 1st Year Adult Immersion Program 2020-21. +;; Ohsweken, ON, Canada: Onkwawenna Kentyohkwa. Unpublished curriculum +;; document written by staff for the Okwawenna Kentyohkwa adult +;; immersion program. +;; + +(defconst iroquoian-mohawk-modifier-alist nil + "Alist of rules for modifier letters in Mohawk input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-mohawk-vowel-alist + '(("a'" ?á) + ("a`" ?à) + ("A'" ?Á) + ("A`" ?À) + ("e'" ?é) + ("e`" ?è) + ("E'" ?É) + ("E`" ?È) + ("i'" ?í) + ("i`" ?ì) + ("I'" ?Í) + ("I`" ?Ì) + ("o'" ?ó) + ("o`" ?ò) + ("O'" ?Ó) + ("O`" ?Ò) + + ("a''" ["a'"]) + ("a``" ["a`"]) + ("A''" ["A'"]) + ("A``" ["A`"]) + ("e''" ["e'"]) + ("e``" ["e`"]) + ("E''" ["E'"]) + ("E``" ["E`"]) + ("i''" ["i'"]) + ("i``" ["i`"]) + ("I''" ["I'"]) + ("I``" ["I`"]) + ("o''" ["o'"]) + ("o``" ["o`"]) + ("O''" ["O'"]) + ("O``" ["O`"])) + "Alist of rules for vowel letters in Mohawk input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-mohawk-consonant-alist + '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})) + "Alist of rules for consonant letters in Mohawk input methods. +Entries are as with rules in `quail-define-rules'.") + +(quail-define-package + "mohawk-postfix" "Mohawk" "MOH<" nil + "Mohawk (Kanien’kéha) input method with postfix modifiers + +Stress diacritics: + +| Key | Description | Example | +|------+--------------+---------| +| \\=' | Acute accent | a' -> á | +| \\=` | Grave accent | a` -> à | + +Doubling any of these postfixes separates the letter and the postfix. + +Vowels: + +a, e, i, and o are bound to a single key. + +Consonants: + +| Key | Translation | Description | +|-----+-------------+--------------| +| ;; | \\=’ | Glottal stop | + +h, k, n, r, s, t, w, and y are bound to a single key. + +b, m, and p are used rarely in ideophones and loan words. They are also +each bound to a single key. + +All Haudenosaunee languages, including Mohawk, can be input +simultaneously using the input method `haudenosaunee-postfix'." + nil t nil nil nil nil nil nil nil nil t) + +(pcase-dolist (`(,key ,trans) + (append iroquoian-mohawk-modifier-alist + iroquoian-mohawk-consonant-alist + iroquoian-mohawk-vowel-alist)) + (quail-defrule key trans)) + + +;;; Oneida + +;; +;; There are slight variations in the orthographies used today to write +;; Oneida. The differences mainly involve in representation of vowel +;; length and glottal stops. +;; +;; Reference work for Oneida orthography: +;; +;; Michelson, K., Doxtator, M. and Doxtator, M.A.. 2002. +;; Oneida-English/English-Oneida dictionary. Toronto: University of +;; Toronto Press. +;; +;; Orthographic variation from personal familiarity with community +;; language programs and curricula. +;; + +(defconst iroquoian-oneida-modifier-alist + '(("::" ?\N{MIDDLE DOT})) + "Alist of rules for modifier letters in Oneida input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-oneida-vowel-alist + '(("a'" ?á) + ("A'" ?Á) + ("e'" ?é) + ("E'" ?É) + ("i'" ?í) + ("I'" ?Í) + ("o'" ?ó) + ("O'" ?Ó) + ("u'" ?ú) + ("U'" ?Ú) + ("e/" ?ʌ) + ("e/'" ["ʌ́"]) + ("E/" ?Ʌ) + ("E/'" ["Ʌ́"]) + + ("a''" ["a'"]) + ("A''" ["A'"]) + ("e''" ["e'"]) + ("E''" ["E'"]) + ("i''" ["i'"]) + ("I''" ["I'"]) + ("o''" ["o'"]) + ("O''" ["O'"]) + ("u''" ["u'"]) + ("U''" ["U'"]) + ("e//" ["e/"]) + ("e/''" ["ʌ'"]) + ("E//" ["E/"]) + ("E/''" ["Ʌ'"])) + "Alist of rules for vowel letters in Oneida input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-oneida-consonant-alist + '((";;" ?\N{MODIFIER LETTER GLOTTAL STOP}) + (";'" ?\N{RIGHT SINGLE QUOTATION MARK})) + "Alist of rules for consonant letters in Oneida input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-oneida-devoicing-alist + '(("_" ?\N{COMBINING LOW LINE}) + ("__" ?_)) + "Alist of rules for devoicing characters in Oneida input methods. +Entries are as with rules in `quail-define-rules'.") + +(quail-define-package + "oneida-postfix" "Oneida" "ONE<" nil + "Oneida (Onʌyota:ká:) input method with postfix modifiers + +Modifiers: + +| Key | Translation | Description | +|-----+-------------+--------------------------| +| :: | · | Vowel length | + +Stress diacritics: + +| Key | Description | Example | +|------+--------------+---------| +| \\=' | Acute accent | a' -> á | + +Doubling the postfix separates the letter and the postfix. + +Vowels: + +| Key | Translation | Description | +|-----+-------------+-----------------------------------| +| e/ | ʌ | Mid central nasal vowel | +| E/ | Ʌ | Mid central nasal vowel (capital) | + +a, e, i, o, and u are bound to a single key. + +Consonants: + +| Key | Translation | Description | +|-----+-------------+--------------------------| +| ;; | ˀ | Glottal stop | +| ;\\=' | \\=’ | Glottal stop (alternate) | + +h, k, l, n, s, t, w, and y are bound to a single key. + +Devoicing: + +| Key | Description | Example | +|-----+--------------------+----------| +| _ | Combining low line | a_ -> a̲ | + +Note: Not all fonts can properly display a combining low line on all +letters. + +Underlining is commonly used in Oneida to indicate devoiced syllables on +pre-pausal forms (also called utterance-final forms). Alternatively, +markup or other methods can be used to create an underlining effect. + +To enter a plain underscore, type the underscore twice. + +All Haudenosaunee languages, including Oneida, can be input +simultaneously using the input method `haudenosaunee-postfix'." + nil t nil nil nil nil nil nil nil nil t) + +(pcase-dolist (`(,key ,trans) + (append iroquoian-oneida-modifier-alist + iroquoian-oneida-consonant-alist + iroquoian-oneida-vowel-alist + iroquoian-oneida-devoicing-alist)) + (quail-defrule key trans)) + + +;;; Onondaga + +;; +;; There are three main orthographies for Onondaga in contemporary use: +;; the community orthography used at Six Nations of the Grand River, the +;; community orthography used at Onondaga Nation in New York, and the +;; orthography used by Hanni Woodbury in her 2003 dictionary (see +;; below). The latter is included because of its adoption in academia +;; and also by some contemporary second-language learners. +;; Additionally, Woodbury's dictionary provides a helpful description of +;; the community orthographies that is still applicable today. +;; +;; The differences between the orthographies are small, involving +;; representation of nasal vowels (ęand ǫat Six Nations of the Grand +;; River, eñ and oñ at Onondaga in New York, and ęand ųfollowing +;; Woodbury's dictionary), the low front rounded vowel (äat Six Nations +;; and Onondaga Nation and æ following Woodbury), vowel length (: +;; [colon] after a vowel in community orthographies and · [middle dot] +;; following Woodbury), and glottal stops (’ [right single quotation +;; mark] in community orthographies and ʔ [latin letter glottal stop] +;; following Woodbury). The input method here aims to accommodate all +;; three of these orthographies. +;; +;; Reference work for Onondaga orthography: +;; +;; Hanni Woodbury. 2003. Onondaga-English/English-Onondaga +;; Dictionary. Toronto: University of Toronto Press. +;; + +(defconst iroquoian-onondaga-modifier-alist + '(("::" ?\N{MIDDLE DOT})) + "Alist of rules for modifier letters in Onondaga input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-onondaga-vowel-alist + '(("a'" ?á) + ("A'" ?Á) + ("e'" ?é) + ("E'" ?É) + ("i'" ?í) + ("I'" ?Í) + ("o'" ?ó) + ("O'" ?Ó) + ("e," ?ę) + ("e,'" ["ę́"]) + ("E," ?Ę) + ("E,'" ["Ę́"]) + ("o," ?ǫ) + ("o,'" ["ǫ́"]) + ("O," ?Ǫ) + ("O,'" ["Ǫ́"]) + ("a\"" ?ä) + ("a\"'" ["ä́"]) + ("A\"" ?Ä) + ("A\"'" ["Ä́"]) + ;; From Woodbury (2003) orthography: + ("a/" ?æ) + ("a/'" ["ǽ"]) + ("A/" ?Æ) + ("A/'" ["Ǽ"]) + ("u," ?ų) + ("u,'" ["ų́"]) + ("U," ?Ų) + ("U,'" ["Ų́"]) + + ("a''" ["a'"]) + ("A''" ["A'"]) + ("e''" ["e'"]) + ("E''" ["E'"]) + ("i''" ["i'"]) + ("I''" ["I'"]) + ("o''" ["o'"]) + ("O''" ["O'"]) + ("e,," ["e,"]) + ("e,''" ["ę'"]) + ("E,," ["E,"]) + ("E,''" ["Ę'"]) + ("o,," ["o,"]) + ("o,''" ["ǫ'"]) + ("O,," ["O,"]) + ("O,''" ["Ǫ'"]) + ("a\"\"" ["a\""]) + ("a\"''" ["ä'"]) + ("A\"\"" ["A\""]) + ("A\"''" ["Ä'"]) + ("a//" ["a/"]) + ("a/''" ["æ'"]) + ("A//" ["A/"]) + ("A/''" ["Æ'"]) + ("u,," ["u,"]) + ("u,''" ["ų'"]) + ("U,," ["U,"]) + ("U,''" ["Ų'"])) + "Alist of rules for vowel letters in Onondaga input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-onondaga-consonant-alist + '((";;" ?\N{RIGHT SINGLE QUOTATION MARK}) + (";:" ?\N{LATIN LETTER GLOTTAL STOP})) + "Alist of rules for consonant letters in Onondaga input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-onondaga-nasal-alist + '(("n-" ?ñ) + ("n--" ["n-"]) + ("N-" ?Ñ) + ("N--" ["N-"])) + "Alist of rules for nasal modifier letters in Onondaga input methods. +Entries are as with rules in `quail-define-rules'.") + +(quail-define-package + "onondaga-postfix" "Onondaga" "ONO<" nil + "Onondaga (Onųdaʔgegáʔ) input method with postfix modifiers + +Modifiers: + +| Key | Translation | Description | +|-----+-------------+--------------------------| +| :: | · | Vowel length (alternate) | + +Stress diacritics: + +| Key | Description | Example | +|------+--------------+---------| +| \\=' | Acute accent | a' -> á | + +Doubling the postfix separates the letter and the postfix. + +Vowels: + +| Key | Translation | Description | +|-----+-------------+---------------------------------------| +| Six Nations of the Grand River orthography | +|-----------------------------------------------------------| +| e, | ę | Mid front nasal vowel | +| E, | Ę | Mid front nasal vowel (capital) | +| o, | ǫ | Back high nasal vowel | +| O, | Ǫ | Back high nasal vowel (capital) | +| a\" | ä | Low front rounded vowel | +| A\" | Ä | Low front rounded vowel (capital) | +|-----------------------------------------------------------| +| Onondaga Nation, New York orthography | +|-----------------------------------------------------------| +| en- | eñ | Mid front nasal vowel | +| EN- | EÑ | Mid front nasal vowel (capital) | +| on- | oñ | Back high nasal vowel | +| ON- | OÑ | Back high nasal vowel (capital) | +| a\" | ä | Low front rounded vowel | +| A\" | Ä | Low front rounded vowel (capital) | +|-----------------------------------------------------------| +| Dictionary orthography (Hanni Woodbury, 2003) | +|-----------------------------------------------------------| +| e, | ę | Mid front nasal vowel | +| E, | Ę | Mid front nasal vowel (capital) | +| u, | ų | Back high nasal vowel | +| U, | Ų | Back high nasal vowel (capital) | +| a/ | æ | Low front rounded vowel | +| A/ | Æ | Low front rounded vowel (capital) | + +a, e, i, and o are bound to a single key. + +Consonants: + +| Key | Translation | Description | +|-----+-------------+--------------------------| +| ;; | \\=’ | Glottal stop | +| ;: | ʔ | Glottal stop (alternate) | + +c, d, g, h, j, k, n, s, t, w, and y are bound to a single key. + +All Haudenosaunee languages, including Onondaga, can be input +simultaneously using the input method `haudenosaunee-postfix'." + nil t nil nil nil nil nil nil nil nil t) + +(pcase-dolist (`(,key ,trans) + (append iroquoian-onondaga-modifier-alist + iroquoian-onondaga-consonant-alist + iroquoian-onondaga-nasal-alist + iroquoian-onondaga-vowel-alist)) + (quail-defrule key trans)) + + +;;; Cayuga + +;; +;; The primary community orthography used for the Cayuga language is +;; called the Henry orthography, after important language revitalist +;; Reginald Henry. There are slight variations, particularly in which +;; letter is used to represent the glottal stop. While the most common +;; seems to be <ˀ> [modifier letter glottal stop], this input method +;; provides mappings for other glottal stop letters in common use. +;; Other common orthographies should be covered by this input method as +;; well. +;; +;; Reference work for Cayuga orthography: +;; +;; Carrie Dyck, Frances Froman, Alfred Keye & Lottie Keye. 2024. A +;; grammar and dictionary of Gayogo̱hó:nǫˀ (Cayuga) (Estudios de +;; Lingüística Amerindia 1). Berlin: Language Science Press. +;; + +(defconst iroquoian-cayuga-modifier-alist nil + "Alist of rules for modifier letters in Cayuga input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-cayuga-vowel-alist + '(("a'" ?á) + ("a-" ["a̱"]) + ("A'" ?Á) + ("A-" ["A̱"]) + ("e'" ?é) + ("e-" ["e̱"]) + ("E'" ?É) + ("E-" ["E̱"]) + ("i'" ?í) + ("i-" ["i̱"]) + ("I'" ?Í) + ("I-" ["I̱"]) + ("o'" ?ó) + ("o-" ["o̱"]) + ("O'" ?Ó) + ("O-" ["O̱"]) + ("u'" ?ú) + ("u-" ["u̱"]) + ("U'" ?Ú) + ("U-" ["U̱"]) + ("e," ?ę) + ("e,'" ["ę́"]) + ("e,-" ["ę̱"]) + ("E," ?Ę) + ("E,'" ["Ę́"]) + ("E,-" ["Ę̱"]) + ("o," ?ǫ) + ("o,'" ["ǫ́"]) + ("o,-" ["ǫ̱"]) + ("O," ?Ǫ) + ("O,'" ["Ǫ́"]) + ("O,-" ["Ǫ̱"]) + + ("a''" ["a'"]) + ("a--" ["a-"]) + ("A''" ["A'"]) + ("A--" ["A-"]) + ("e''" ["e'"]) + ("e--" ["e-"]) + ("E''" ["E'"]) + ("E--" ["E-"]) + ("i''" ["i'"]) + ("i--" ["i-"]) + ("I''" ["I'"]) + ("I--" ["I-"]) + ("o''" ["o'"]) + ("o--" ["o-"]) + ("O''" ["O'"]) + ("O--" ["O-"]) + ("u''" ["u'"]) + ("u--" ["u-"]) + ("U''" ["U'"]) + ("U--" ["U-"]) + ("e,," ["e,"]) + ("e,''" ["ę'"]) + ("e,--" ["ę-"]) + ("E,," ["E,"]) + ("E,''" ["Ę'"]) + ("E,--" ["Ę-"]) + ("o,," ["o,"]) + ("o,''" ["ǫ'"]) + ("o,--" ["ǫ-"]) + ("O,," ["O,"]) + ("O,''" ["Ǫ'"]) + ("O,--" ["Ǫ-"])) + "Alist of rules for vowel letters in Cayuga input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-cayuga-consonant-alist + '((";;" ?\N{MODIFIER LETTER GLOTTAL STOP}) + (";'" ?\N{RIGHT SINGLE QUOTATION MARK})) + "Alist of rules for consonant letters in Cayuga input methods. +Entries are as with rules in `quail-define-rules'.") + +(quail-define-package + "cayuga-postfix" "Cayuga" "CAY<" nil + "Cayuga (Gayogo̱ho:nǫhnéha:ˀ) input method with postfix modifiers + +Stress diacritics: + +| Key | Description | Example | +|------+--------------+---------| +| \\=' | Acute accent | a' -> á | + +Doubling the postfix separates the letter and the postfix. + +Vowels: + +| Key | Translation | Description | +|-----+-------------+---------------------------------| +| e, | ę | Mid front nasal vowel | +| E, | Ę | Mid front nasal vowel (capital) | +| o, | ǫ | Mid back nasal vowel | +| O, | Ǫ | Mid back nasal vowel (capital) | + +a, e, i, o, and u are bound to a single key. + +Consonants: + +| Key | Translation | Description | +|-------+-------------+--------------------------| +| ;; | ˀ | Glottal stop | +| ;\\=' | \\=’ | Glottal stop (alternate) | + +d, g, h, j, k, n, r, s, t, w, y, and f are bound to a single key. + +Devoicing: + +| Key | Description | Example | +|-----+------------------------+----------| +| - | Combining macron below | a- -> a̱ | + +Note: Not all fonts can properly display a combining macron low on all +vowels. + +To enter a plain hyphen after a vowel, simply type the hyphen twice. + +All Haudenosaunee languages, including Cayuga, can be input +simultaneously using the input method `haudenosaunee-postfix'." + nil t nil nil nil nil nil nil nil nil t) + +(pcase-dolist (`(,key ,trans) + (append iroquoian-cayuga-modifier-alist + iroquoian-cayuga-consonant-alist + iroquoian-cayuga-vowel-alist)) + (quail-defrule key trans)) + + +;;; Seneca + +;; +;; The orthography for the Seneca language is fairly stable with only +;; minor variations, for example, vs. <š> (currently preferred in +;; community orthography) for the voiceless postalveolar fricative. +;; +;; In the common community orthography, I'm told that acute and grave +;; accents occur rarely and only on nasal vowels (personal +;; communication). However, in works by Wallace Chafe, stress is +;; indicated on non-nasal vowels, as well. The maximal set of letters +;; with accent diacritics is included for the input method, even though +;; many of them apparently don't occur in community orthographies. +;; +;; Reference works for Seneca orthography: +;; +;; Phyllis E. Wms. Bardeau. 2002. Onondowa'ga:' Gawe:no': New Reference +;; Edition. Salamanca, NY: The Seneca Nation of Indians Allegany +;; Education Department. +;; +;; Wallace Chafe. 2015. A Grammar of the Seneca Language. Oakland, CA: +;; University of California Press. +;; + +(defconst iroquoian-seneca-modifier-alist nil + "Alist of rules for modifier letters in Seneca input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-seneca-vowel-alist + '(("a'" ?á) + ("a`" ?à) + ("A'" ?Á) + ("A`" ?À) + ("e'" ?é) + ("e`" ?è) + ("E'" ?É) + ("E`" ?È) + ("i'" ?í) + ("i`" ?ì) + ("I'" ?Í) + ("I`" ?Ì) + ("o'" ?ó) + ("o`" ?ò) + ("O'" ?Ó) + ("O`" ?Ò) + ("a\"" ?ä) + ("a\"'" ["ä́"]) + ("a\"`" ["ä̀"]) + ("A\"" ?Ä) + ("A\"'" ["Ä́"]) + ("A\"`" ["Ä̀"]) + ("e\"" ?ë) + ("e\"'" ["ë́"]) + ("e\"`" ["ë̀"]) + ("E\"" ?Ë) + ("E\"'" ["Ë́"]) + ("E\"`" ["Ë̀"]) + ("o\"" ?ö) + ("o\"'" ["ö́"]) + ("o\"`" ["ö̀"]) + ("O\"" ?Ö) + ("O\"'" ["Ö́"]) + ("O\"`" ["Ö̀"]) + ;; Rare (e.g., niwú’u:h 'it is tiny' [Chafe 2015]): + ("u'" ?ú) + ("u`" ?ù) + ("U'" ?Ú) + ("U`" ?Ù) + + ("a''" ["a'"]) + ("a``" ["a`"]) + ("A''" ["A'"]) + ("A``" ["A`"]) + ("e''" ["e'"]) + ("e``" ["e`"]) + ("E''" ["E'"]) + ("E``" ["E`"]) + ("i''" ["i'"]) + ("i``" ["i`"]) + ("I''" ["I'"]) + ("I``" ["I`"]) + ("o''" ["o'"]) + ("o``" ["o`"]) + ("O''" ["O'"]) + ("O``" ["O`"]) + ("a\"\"" ["a\""]) + ("a\"''" ["ä'"]) + ("a\"``" ["ä`"]) + ("A\"\"" ["A\""]) + ("A\"''" ["Ä'"]) + ("A\"``" ["Ä`"]) + ("e\"\"" ["e\""]) + ("e\"''" ["ë'"]) + ("e\"``" ["ë`"]) + ("E\"\"" ["E\""]) + ("E\"''" ["Ë'"]) + ("E\"``" ["Ë`"]) + ("o\"\"" ["o\""]) + ("o\"''" ["ö'"]) + ("o\"``" ["ö`"]) + ("O\"\"" ["O\""]) + ("O\"''" ["Ö'"]) + ("O\"``" ["Ö`"]) + ("u''" ["u'"]) + ("u``" ["u`"]) + ("U''" ["U'"]) + ("U``" ["U`"])) + "Alist of rules for vowel letters in Seneca input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-seneca-consonant-alist + '((";;" ?\N{RIGHT SINGLE QUOTATION MARK}) + ("s/" ?š) + ("s//" ["s/"]) + ("S/" ?Š) + ("S//" ["S/"])) + "Alist of rules for consonant letters in Seneca input methods. +Entries are as with rules in `quail-define-rules'.") + +(quail-define-package + "seneca-postfix" "Seneca" "SEE<" nil + "Seneca (Onödowá’ga:’) input method with postfix modifiers + +Stress diacritics: + +| Key | Description | Example | +|------+--------------+---------| +| \\=' | Acute accent | a' -> á| +| \\=` | Grave accent | a` -> à| + +Doubling any of these postfixes separates the letter and the postfix. + +Vowels: + +| Key | Translation | Description | +|-----+-------------+------------------------------------| +| e\" | ë | Mid front nasal vowel | +| E\" | Ë | Mid front nasal vowel (capital) | +| o\" | ö | Low-mid back nasal vowel | +| O\" | Ö | Low-mid back nasal vowel (capital) | +| a\" | ä | Low front vowel | +| A\" | Ä | Low front vowel (capital) | + +a, e, i, o, and u are bound to a single key. + +Consonants: + +| Key | Translation | Description | +|-------+-------------+--------------------------------------------| +| ;; | \\=’ | Glottal stop | +| s/ | š | Voiceless postalveolar fricative | +| S/ | Š | Voiceless postalveolar fricative (capital) | + +d, g, h, j, k, n, s, t, w, y, and z are bound to a single key. + +b, m, and p are used rarely in ideophones and nicknames. They are also +each bound to a single key. + +All Haudenosaunee languages, including Seneca, can be input +simultaneously using the input method `haudenosaunee-postfix'." + nil t nil nil nil nil nil nil nil nil t) + +(pcase-dolist (`(,key ,trans) + (append iroquoian-seneca-modifier-alist + iroquoian-seneca-consonant-alist + iroquoian-seneca-vowel-alist)) + (quail-defrule key trans)) + + +;;; Haudenosaunee (composite Northern Iroquoian) + +;; +;; This input method represents a composite input method for all of the +;; Northern Iroquoian languages included above. +;; +;; Although the "Iroquoian languages" is a standard term employed by +;; linguists and scholars, some believe the term "Iroquois" to be of +;; derogatory origin (see Dyck 2024). Hence, some prefer to refer to +;; what are collectively termed by linguists the "Five Nations Iroquois" +;; languages (Mohawk, Oneida, Onondaga, Cayuga, Seneca) by the autonym +;; "Haudenosaunee" (e.g., "Haudenosaunee languages"). +;; +;; However, it should be noted that the term "Haudenosaunee" is itself +;; an Anglicized form, probably from Seneca Hodínöhsö:ni:h 'they make +;; houses' or Hodínöhšo:ni:h 'People of the Long House'. Speakers of +;; Cayuga may prefer the word Hodinǫhsǫ:nih, and speakers of Mohawk may +;; prefer Rotinonhsón:ni or Rotinonhsíón:ni. These terms themselves +;; collectively relate to the confederacy of Indigenous nations that has +;; existed in what is now known as New York State in Northeastern North +;; America for many centuries, the founding of which is retold in oral +;; tradition in the story of The Peacemaker. +;; +;; It should also be noted that while Tuscarora and Wendat languages are +;; both sometimes included under the "Haudenosaunee languages" umbrella +;; (and by implication, those groups as a part of the Haudenosaunee +;; Confederacy), the exact extent of what defines "Haudenosaunee" has +;; occasionally caused controversy. +;; +;; Additionally, some prefer to collectively refer to the "Haudenosaunee +;; languages" using the terms Onkwehonwehnéha (Mohawk), Ukwehuwehnéha +;; (Oneida), Ǫgwehǫwekhá’ (Onondaga), Ǫgwehǫwéhneha:ˀ (Cayuga), and +;; Ögwé’öwe:ka:’ (Seneca), which all mean 'in the manner of the Original +;; People'. +;; +;; Bearing all of this in mind, I have opted to retain the term +;; "Iroquoian" in the name of this file (`iroquoian.el') (and hence, in +;; the symbol names in its namespace), while using "Haudenosaunee" in +;; the name of the input method that encompasses all of the languages so +;; far implemented: "haudenosaunee-postfix" --- this is the name shown +;; as a completion candidate after users enter M-x set-input-method RET. +;; Note that those searching for input methods for the individual +;; languages should have no problem finding them knowing only their +;; Anglicized names (e.g., Mohawk, Oneida, etc.), as these have been +;; retained in the names of the corresponding input methods. +;; +;; Above all, I hope that these decisions help those who wish to speak, +;; read, and write Onkwehonwehnéha. +;; +;; Iorihowá:nen ne aiónhnheke’ ne raotiwén:na’! +;; It is important that the language continues to live! +;; + +(defconst iroquoian-haudenosaunee-modifier-alist + (seq-uniq (append iroquoian-mohawk-modifier-alist + iroquoian-oneida-modifier-alist + iroquoian-onondaga-modifier-alist + iroquoian-cayuga-modifier-alist + iroquoian-seneca-modifier-alist)) + "Alist of rules for modifier letters in Haudenosaunee input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-haudenosaunee-vowel-alist + (seq-uniq (append iroquoian-mohawk-vowel-alist + iroquoian-oneida-vowel-alist + iroquoian-onondaga-vowel-alist + iroquoian-cayuga-vowel-alist + iroquoian-seneca-vowel-alist)) + "Alist of rules for vowel letters in Haudenosaunee input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-haudenosaunee-consonant-alist + (seq-uniq (append + '((";;" ?\N{RIGHT SINGLE QUOTATION MARK}) + (";'" ?\N{MODIFIER LETTER GLOTTAL STOP}) + (";:" ?\N{LATIN LETTER GLOTTAL STOP})) + iroquoian-mohawk-consonant-alist + iroquoian-oneida-consonant-alist + iroquoian-onondaga-consonant-alist + iroquoian-cayuga-consonant-alist + iroquoian-seneca-consonant-alist) + (lambda (c1 c2) + (equal (car c1) (car c2)))) + "Alist of rules for consonant letters in Haudenosaunee input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-haudenosaunee-devoicing-alist + '(("_" ?\N{COMBINING LOW LINE}) + ("__" ?_)) + "Alist of rules for devoicing characters in Haudenosaunee input methods. +Entries are as with rules in `quail-define-rules'.") + +(defconst iroquoian-haudenosaunee-nasal-alist iroquoian-onondaga-nasal-alist + "Alist of rules for nasal modifier letters in Haudenosaunee input methods. +Entries are as with rules in `quail-define-rules'.") + +(quail-define-package + "haudenosaunee-postfix" "Haudenosaunee" "HOD<" nil + "Composite input method for Haudenosaunee (Northern Iroquoian) languages + +This input method can be used to enter the following languages: + +- Mohawk (Kanien’kéha / Onkwehonwehnéha) +- Oneida (Onʌyota:ká: / Ukwehuwehnéha) +- Cayuga (Gayogo̱ho:nǫhnéha:ˀ) +- Onondaga (Onųdaʔgegáʔ) +- Seneca (Onödowá’ga:’) + +Modifiers: + +| Key | Translation | Description | +|-----+-------------+--------------------------| +| :: | · | Vowel length (alternate) | + +Stress diacritics: + +| Key | Description | Example | +|------+--------------+---------| +| \\=' | Acute accent | a' -> á | +| \\=` | Grave accent | a` -> à | + +Doubling any of these postfixes separates the letter and the postfix. + +Vowels: + +| Key | Translation | Description | +|----------------------------------------------------------------------| +| Mohawk | +| -------------------------------------------------------------------- | +| Single-key vowels: a e i o | +|----------------------------------------------------------------------| +| Oneida | +| -------------------------------------------------------------------- | +| e/ | ʌ | Mid central nasal vowel | +| E/ | Ʌ | Mid central nasal vowel (capital) | +| Single-key vowels: a e i o u | +|----------------------------------------------------------------------| +| Onondaga | +| (Six Nations of the Grand River) | +| -------------------------------------------------------------------- | +| e, | ę | Mid front nasal vowel | +| E, | Ę | Mid front nasal vowel (capital) | +| o, | ǫ | Back high nasal vowel | +| O, | Ǫ | Back high nasal vowel (capital) | +| a\" | ä | Low front rounded vowel | +| A\" | Ä | Low front rounded vowel (capital) | +| -------------------------------------------------------------------- | +| (Onondaga Nation, New York) | +| -------------------------------------------------------------------- | +| en~ | eñ | Mid front nasal vowel | +| EN~ | EÑ | Mid front nasal vowel (capital) | +| on~ | oñ | Back high nasal vowel | +| ON~ | OÑ | Back high nasal vowel (capital) | +| a\" | ä | Low front rounded vowel | +| A\" | Ä | Low front rounded vowel (capital) | +| -------------------------------------------------------------------- | +| (Hanni Woodbury, 2003) | +| -------------------------------------------------------------------- | +| e, | ę | Mid front nasal vowel | +| E, | Ę | Mid front nasal vowel (capital) | +| u, | ų | Back high nasal vowel | +| U, | Ų | Back high nasal vowel (capital) | +| a/ | æ | Low front rounded vowel | +| A/ | Æ | Low front rounded vowel (capital) | +| -------------------------------------------------------------------- | +| (all) | +| -------------------------------------------------------------------- | +| Single-key vowels: a e i o | +|----------------------------------------------------------------------| +| Cayuga | +| -------------------------------------------------------------------- | +| e, | ę | Mid front nasal vowel | +| E, | Ę | Mid front nasal vowel (capital) | +| o, | ǫ | Mid back nasal vowel | +| O, | Ǫ | Mid back nasal vowel (capital) | +| Single-key vowels: a e i o u | +|----------------------------------------------------------------------| +| Seneca | +| -------------------------------------------------------------------- | +| e\" | ë | Mid front nasal vowel | +| E\" | Ë | Mid front nasal vowel (capital) | +| o\" | ö | Low-mid back nasal vowel | +| O\" | Ö | Low-mid back nasal vowel (capital) | +| a\" | ä | Low front vowel | +| A\" | Ä | Low front vowel (capital) | +| Single-key vowels: a e i o u | + +Consonants: + +| Key | Translation | Description | +|----------------------------------------------------------------------| +| Mohawk | +| -------------------------------------------------------------------- | +| ;; | \\=’ | Glottal stop | +| Single-key consonants: h k n r s t w y (b m p) | +|----------------------------------------------------------------------| +| Oneida | +| -------------------------------------------------------------------- | +| ;\\=' | ˀ | Glottal stop | +| ;; | \\=’ | Glottal stop (alternate) | +| Single-key consonants: h k l n s t w y | +|----------------------------------------------------------------------| +| Onondaga | +| -------------------------------------------------------------------- | +| ;; | \\=’ | Glottal stop | +| ;: | ʔ | Glottal stop (alternate) | +| Single-key consonants: c d g h j k n s t w y | +|----------------------------------------------------------------------| +| Cayuga | +| -------------------------------------------------------------------- | +| ;\\=' | ˀ | Glottal stop | +| ;; | \\=’ | Glottal stop (alternate) | +| Single-key consonants: d g h j k n r s t w y (f) | +|----------------------------------------------------------------------| +| Seneca | +| -------------------------------------------------------------------- | +| ;; | \\=’ | Glottal stop | +| s/ | š | Voiceless postalveolar fricative | +| S/ | Š | Voiceless postalveolar fricative (capital) | +| Single-key consonants: d g h j k n s t w y z (b m p) | + +Devoicing: + +| Key | Description | Examples | +|-----+------------------------+------------------------------| +| _ | Combining low line | a_ -> a̲, · -> ·̲ | +| - | Combining macron below | a- -> a̱(after vowels only) | + +Note: Not all fonts can properly display a combining low line on all +letters and a combining macron below on all vowels. + +Underlining is commonly used in Oneida to indicate devoiced syllables on +pre-pausal forms (also called utterance-final forms). Alternatively, +markup or other methods can be used to create an underlining effect. + +To enter a plain underscore, the underscore twice. + +Macron below is commonly used in Cayuga to indicate devoiced vowels. + +To enter a plain hyphen after a vowel, simply type the hyphen twice. + +There are individual input methods for each of the languages that can be +entered with this input method: `mohawk-postfix', `oneida-postfix', +`onondaga-postfix', `cayuga-postfix', `seneca-postfix'." + nil t nil nil nil nil nil nil nil nil t) + +(pcase-dolist (`(,key ,trans) + (append iroquoian-haudenosaunee-modifier-alist + iroquoian-haudenosaunee-consonant-alist + iroquoian-haudenosaunee-nasal-alist + iroquoian-haudenosaunee-vowel-alist + iroquoian-haudenosaunee-devoicing-alist)) + (quail-defrule key trans)) + +(provide 'iroquoian) +;;; iroquoian.el ends here