unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
@ 2024-11-02  2:34 Kierin Bell
  2024-11-02  8:16 ` Eli Zaretskii
  2024-11-03 22:11 ` bug#74170: [PATCH] Add input methods for Northern Iroquoian Kierin Bell
  0 siblings, 2 replies; 15+ messages in thread
From: Kierin Bell @ 2024-11-02  2:34 UTC (permalink / raw)
  To: 74170

[-- Attachment #1: Type: text/plain, Size: 1669 bytes --]

Tags: patch


Hello,

Attached is a patch implementing input methods for five languages in the
Northern Iroquoian language family.

None of these languages have have officially designated standardized
orthographies (and all of them are endangered), but I have designed the
input methods around what I believe to be the most widely used community
orthographies (used in language programs, dictionaries, etc).

The orthographies for several of the languages require, for example, the
ability to enter a given vowel X, X with a diacritic Y, X with both
diacritics Y and Z, etc. Oneida even requires the ability to underline
consecutive characters --- I implement this with COMBINING LOW LINE,
even though in practice users may opt to use something else, like
markup, for this.

Because of this complexity, I decided to use state transition tables
(with `quail-map-from-table') and a custom UPDATE-TRANSLATION-FUNCTION.
The result works nicely, but I don't understand all of the intricacies
and conventions of Quail and am open to any suggestions for improvement.

I should already have FSF copyright assignment on file.

Regards,
Kierin

In GNU Emacs 30.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.41, cairo version 1.18.0)
System Description: Guix System

Configured using:
 'configure
 CONFIG_SHELL=/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash
 SHELL=/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash
 --prefix=/gnu/store/9x5277gcjzwlis5yd0iq7ypq8f78jhpa-emacs-next-pgtk-30.0.91-1.9a1c76b
 --enable-fast-install --with-pgtk --with-cairo --with-modules
 --with-native-compilation=aot --disable-build-details'


[-- Attachment #2: 0001-Add-input-methods-for-Northern-Iroquoian-languages.patch --]
[-- Type: text/patch, Size: 15912 bytes --]

From 4fe10ab7d4f448703785848596adf62fa8d508a5 Mon Sep 17 00:00:00 2001
From: Kierin Bell <fernseed@fernseed.me>
Date: Fri, 1 Nov 2024 21:56:36 -0400
Subject: [PATCH] Add input methods for Northern Iroquoian languages

---
 etc/NEWS                     |  11 +
 lisp/leim/quail/iroquoian.el | 491 +++++++++++++++++++++++++++++++++++
 2 files changed, 502 insertions(+)
 create mode 100644 lisp/leim/quail/iroquoian.el

diff --git a/etc/NEWS b/etc/NEWS
index 4aba4b17055..16759255345 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -815,6 +815,17 @@ DirectWrite rendering parameters.
 To show color Emoji in Emacs, customize the default fontset to use a
 color Emoji font installed on your system for the 'emoji' script.
 
+---
+** New input methods for Northern Iroquoian languages.
+Input methods are now implemented for all Five Nations Iroquois
+languages in the Northern Iroquoian language family: 'mohawk-postfix'
+(Mohawk [Kanien’kéha / Onkwehonwe’né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 'iroquoian-postfix' input method to facilitate writing
+in the orthographies of the five languages simultaneously.
+
 \f
 ----------------------------------------------------------------------
 This file is part of GNU Emacs.
diff --git a/lisp/leim/quail/iroquoian.el b/lisp/leim/quail/iroquoian.el
new file mode 100644
index 00000000000..36a78724779
--- /dev/null
+++ b/lisp/leim/quail/iroquoian.el
@@ -0,0 +1,491 @@
+;;; iroquoian.el --- Quail package for inputting Iroquoian languages  -*- lexical-binding: t; coding: utf-8; -*-
+
+;; Copyright (C) 2024  Free Software Foundation, Inc.
+
+;; Author: Kierin Bell <fernseed@fernseed.me>
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file implements input methods for Northern Iroquoian languages.
+
+;; Input methods are implemented for all Five Nations Iroquois
+;; languages:
+
+;; - Mohawk (Kanien’kéha / Onkwehonwe’néha)
+;; - Oneida (Onʌyota:ká: / Ukwehuwehnéha)
+;; - Cayuga (Gayogo̱ho:nǫhnéha:ˀ)
+;; - Onondaga (Onųdaʔgegáʔ)
+;; - Seneca (Onödowá’ga:’)
+
+;; Input methods are not yet implemented for the remaining Northern
+;; Iroquoian languages, including:
+
+;; - Tuscarora (Skarù:ręʔ)
+;; - Wendat (Huron) / Wyandot
+
+;;; Code:
+
+(require 'quail)
+(require 'seq)
+
+(defun quail-iroquoian-combining-char-p (char)
+  "Return whether CHAR is a combining character."
+  (and (characterp char)
+       ;; XXX: Combining characters here all have 'Mn' general category.
+       (memq (get-char-code-property char 'general-category) '(Mn))))
+
+(defun quail-iroquoian-update-translation (control-flag)
+  (cond
+   ((integerp control-flag)
+    ;; XXX: Set `quail-current-str' according to `quail-overlay', which
+    ;; seems to work more reliably in this use-case than analogous code
+    ;; in `quail-update-translation' (borrowed from the function
+    ;; `quail-lao-update-translation' in 'lao.el').
+    (setq quail-current-str
+          (buffer-substring (overlay-start quail-overlay)
+                            (overlay-end quail-overlay)))
+    (unless input-method-exit-on-first-char
+      (quail-add-unread-command-events
+       (string-to-vector (substring quail-current-key control-flag)))))
+   ((quail-iroquoian-combining-char-p quail-current-str)
+    (setq quail-current-str
+          (compose-string
+           ;;
+           ;; XXX: Kludge to delete extraneous initial letters from some
+           ;; translations, e.g., with keys "a/'" in `onondaga-post',
+           ;; the following would be inserted (with the extraneous
+           ;; initial "a"): aǽ
+           ;;
+           ;; Doesn't work:
+           ;; (substring STR (max 0 (- (string-width STR) 1)))
+           ;;
+           (apply #'string
+                  (seq-reduce
+                   (lambda (acc elt)
+                     (if (quail-iroquoian-combining-char-p elt)
+                         (append acc (list elt))
+                       (list elt)))
+                   (quail-lookup-map-and-concat quail-current-key)
+                   '())))))
+   ((null control-flag)
+    ;; Borrowed from `quail-update-translation'.
+    (unless quail-current-str
+      (setq quail-current-str
+            (if (quail-kbd-translate)
+                (quail-keyseq-translate quail-current-key)
+              quail-current-key))
+      (when (and input-method-exit-on-first-char (quail-simple))
+        (setq control-flag t)))))
+  control-flag)
+
+\f
+;;; Mohawk
+
+(defconst iroquoian-mohawk-punctuation-alist
+  '((":" ?:)))
+
+(defconst iroquoian-mohawk-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)))
+
+(defconst iroquoian-mohawk-consonant-alist
+  '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
+    ("h" ?h)
+    ("H" ?H)
+    ("k" ?k)
+    ("K" ?K)
+    ("n" ?n)
+    ("N" ?N)
+    ("r" ?r)
+    ("R" ?R)
+    ("s" ?s)
+    ("S" ?S)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("Y" ?Y)
+    ("y" ?y)))
+
+(defconst iroquoian-mohawk-accent-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("`" ?\N{COMBINING GRAVE ACCENT})))
+
+(quail-define-package
+ "mohawk-postfix" "Mohawk" "MOH<" nil
+ "Mohawk input method with postfix modifiers"
+ nil t t nil nil nil nil nil
+ #'quail-iroquoian-update-translation
+ nil t)
+
+(quail-install-map
+ (quail-map-from-table
+  '((base-state (iroquoian-mohawk-vowel-alist . v-state)
+                iroquoian-mohawk-consonant-alist
+                iroquoian-mohawk-punctuation-alist)
+    (v-state iroquoian-mohawk-accent-alist))))
+
+\f
+;;; Oneida
+
+(defconst iroquoian-oneida-punctuation-alist
+  '(("::" ?\N{MIDDLE DOT})
+    ;; Alternative vowel lengthener:
+    (":" ?:)))
+
+(defconst iroquoian-oneida-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)
+    ("u" ?u)
+    ("U" ?U)
+    ("e/" ?ʌ)
+    ("E/" ?Ʌ)))
+
+(defconst iroquoian-oneida-consonant-alist
+  '(;; Alternative: ?\N{RIGHT SINGLE QUOTATION MARK}
+    (";;" ?\N{MODIFIER LETTER GLOTTAL STOP})
+    ("h" ?h)
+    ("H" ?H)
+    ("k" ?k)
+    ("K" ?K)
+    ("l" ?l)
+    ("L" ?L)
+    ("n" ?n)
+    ("N" ?N)
+    ("s" ?s)
+    ("S" ?S)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("y" ?y)
+    ("Y" ?Y)))
+
+(defconst iroquoian-oneida-accent-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})))
+
+(defconst iroquoian-oneida-pre-pausal-alist
+  '(("_" ?\N{COMBINING LOW LINE})))
+
+(quail-define-package
+ "oneida-postfix" "Oneida" "ONE<" nil
+ "Oneida input method with postfix modifiers"
+ nil t t nil nil nil nil nil
+ #'quail-iroquoian-update-translation
+ nil t)
+
+(quail-install-map
+ (quail-map-from-table
+  '((base-state (iroquoian-oneida-vowel-alist . v-state)
+                (iroquoian-oneida-consonant-alist . p-state)
+                (iroquoian-oneida-punctuation-alist . p-state))
+    (v-state (iroquoian-oneida-accent-alist . p-state)
+             iroquoian-oneida-pre-pausal-alist)
+    (p-state iroquoian-oneida-pre-pausal-alist))))
+
+\f
+;;; Onondaga
+
+(defconst iroquoian-onondaga-punctuation-alist
+  '(("::" ?\N{MIDDLE DOT})
+    ;; Alternative vowel lengthener:
+    (":" ?:)))
+
+(defconst iroquoian-onondaga-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("a/" ?æ)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)))
+
+(defconst iroquoian-onondaga-ogonek-vowel-alist
+  '(("e" ?e)
+    ("E" ?E)
+    ("u" ?u)
+    ("U" ?U)))
+
+(defconst iroquoian-onondaga-consonant-alist
+  '(;; Alternative glottal stop: ?\N{RIGHT SINGLE QUOTATION MARK}
+    ;; Alternative glottal stop: ?\N{MODIFIER LETTER GLOTTAL STOP}
+    (";;" ?\N{LATIN LETTER GLOTTAL STOP})
+    ("c" ?c)
+    ("C" ?C)
+    ("d" ?d)
+    ("D" ?D)
+    ("g" ?g)
+    ("G" ?G)
+    ("h" ?h)
+    ("H" ?H)
+    ("j" ?j)
+    ("J" ?J)
+    ("k" ?k)
+    ("K" ?K)
+    ("n" ?n)
+    ("N" ?N)
+    ("s" ?s)
+    ("S" ?S)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("y" ?y)
+    ("Y" ?Y)))
+
+(defconst iroquoian-onondaga-accent-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})))
+
+(defconst iroquoian-onondaga-ogonek-alist
+  '(("," ?\N{COMBINING OGONEK})))
+
+(quail-define-package
+ "onondaga-postfix" "Onondaga" "ONO<" nil
+ "Onondaga input method with postfix modifiers"
+ nil t t nil nil nil nil nil
+ #'quail-iroquoian-update-translation
+ nil t)
+
+(quail-install-map
+ (quail-map-from-table
+  '((base-state (iroquoian-onondaga-ogonek-vowel-alist . o-state)
+                (iroquoian-onondaga-vowel-alist . v-state)
+                iroquoian-onondaga-consonant-alist
+                iroquoian-onondaga-punctuation-alist)
+    (o-state (iroquoian-onondaga-ogonek-alist . v-state)
+             iroquoian-onondaga-accent-alist)
+    (v-state iroquoian-onondaga-accent-alist))))
+
+\f
+;;; Cayuga
+
+(defconst iroquoian-cayuga-punctuation-alist
+  '((":" ?:)))
+
+(defconst iroquoian-cayuga-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("i" ?i)
+    ("I" ?I)
+    ("u" ?u)
+    ("U" ?U)))
+
+(defconst iroquoian-cayuga-ogonek-vowel-alist
+  '(("e" ?e)
+    ("E" ?E)
+    ("o" ?o)
+    ("O" ?O)))
+
+(defconst iroquoian-cayuga-consonant-alist
+  '((";;" ?\N{MODIFIER LETTER GLOTTAL STOP})
+    ("d" ?d)
+    ("D" ?D)
+    ("f" ?f) ; Example word?
+    ("F" ?F)
+    ("g" ?g)
+    ("G" ?G)
+    ("h" ?h)
+    ("H" ?H)
+    ("j" ?j)
+    ("J" ?J)
+    ("k" ?k)
+    ("K" ?K)
+    ("n" ?n)
+    ("N" ?N)
+    ("r" ?r)
+    ("R" ?R)
+    ("s" ?s)
+    ("S" ?S)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("y" ?y)
+    ("Y" ?Y)))
+
+(defconst iroquoian-cayuga-accent-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("-" ?\N{COMBINING MACRON BELOW})))
+
+(defconst iroquoian-cayuga-ogonek-alist
+  '(("," ?\N{COMBINING OGONEK})))
+
+(quail-define-package
+ "cayuga-postfix" "Cayuga" "CAY<" nil
+ "Cayuga input method with postfix modifiers (Henry orthography)"
+ nil t t nil nil nil nil nil
+ #'quail-iroquoian-update-translation
+ nil t)
+
+(quail-install-map
+ (quail-map-from-table
+  '((base-state (iroquoian-cayuga-ogonek-vowel-alist . o-state)
+                (iroquoian-cayuga-vowel-alist . v-state)
+                iroquoian-cayuga-consonant-alist
+                iroquoian-cayuga-punctuation-alist)
+    (o-state (iroquoian-cayuga-ogonek-alist . v-state))
+    (v-state iroquoian-cayuga-accent-alist))))
+
+\f
+;;; Seneca
+
+(defconst iroquoian-seneca-punctuation-alist
+  '((":" ?:)))
+
+(defconst iroquoian-seneca-vowel-alist
+  '(("i" ?i)
+    ("I" ?I)
+    ("u" ?u)
+    ("U" ?U)))
+
+(defconst iroquoian-seneca-diaeresis-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("o" ?o)
+    ("O" ?O)))
+
+(defconst iroquoian-seneca-consonant-alist
+  `((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
+    ("d" ?d)
+    ("D" ?D)
+    ("g" ?g)
+    ("G" ?G)
+    ("h" ?h)
+    ("H" ?H)
+    ("j" ?j)
+    ("J" ?J)
+    ("k" ?k)
+    ("K" ?K)
+    ("n" ?n)
+    ("N" ?N)
+    ("s" ?s)
+    ("S" ?S)
+    ("s/" ?š)
+    ("S/" ?Š)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("y" ?y)
+    ("Y" ?Y)
+    ("z" ?z)
+    ("Z" ?Z)))
+
+(defconst iroquoian-seneca-accent-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})))
+
+(defconst iroquoian-seneca-diaeresis-alist
+  '(("\"" ?\N{COMBINING DIAERESIS})))
+
+(quail-define-package
+ "seneca-postfix" "Seneca" "SEE<" nil
+ "Seneca input method with postfix modifiers (Henry orthography)"
+ nil t t nil nil nil nil nil
+ #'quail-iroquoian-update-translation
+ nil t)
+
+(quail-install-map
+ (quail-map-from-table
+  '((base-state (iroquoian-seneca-diaeresis-vowel-alist . d-state)
+                (iroquoian-seneca-vowel-alist . v-state)
+                iroquoian-seneca-consonant-alist
+                iroquoian-seneca-punctuation-alist)
+    (d-state (iroquoian-seneca-diaeresis-alist . v-state)
+             iroquoian-seneca-accent-alist)
+    (v-state iroquoian-seneca-accent-alist))))
+
+\f
+;;; Composite Iroquoian
+
+(defconst iroquoian-composite-punctuation-alist
+  (seq-uniq (append iroquoian-mohawk-punctuation-alist
+                    iroquoian-oneida-punctuation-alist
+                    iroquoian-onondaga-punctuation-alist
+                    iroquoian-cayuga-punctuation-alist
+                    iroquoian-seneca-punctuation-alist)))
+
+(defconst iroquoian-composite-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
+                    iroquoian-onondaga-ogonek-vowel-alist
+                    iroquoian-cayuga-ogonek-vowel-alist
+                    iroquoian-seneca-diaeresis-vowel-alist)))
+
+(defconst iroquoian-composite-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)))))
+
+(defconst iroquoian-composite-accent-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("`" ?\N{COMBINING GRAVE ACCENT})
+    ("-" ?\N{COMBINING MACRON BELOW})))
+
+(defconst iroquoian-composite-modifier-alist
+  '(("," ?\N{COMBINING OGONEK})
+    ("\"" ?\N{COMBINING DIAERESIS})))
+
+(defconst iroquoian-composite-pre-pausal-alist
+  '(("_" ?\N{COMBINING LOW LINE})))
+
+(quail-define-package
+ "iroquoian-postfix" "Iroquoian" "IRO<" nil
+ "Composite input method for Northern Iroquoian languages"
+ nil t t nil nil nil nil nil
+ #'quail-iroquoian-update-translation
+ nil t)
+
+(quail-install-map
+ (quail-map-from-table
+  '((base-state (iroquoian-composite-vowel-alist . v-state)
+                (iroquoian-composite-consonant-alist . p-state)
+                (iroquoian-composite-punctuation-alist . p-state))
+    (v-state (iroquoian-composite-modifier-alist . v-state-2)
+             (iroquoian-composite-accent-alist . p-state)
+             iroquoian-composite-pre-pausal-alist)
+    (v-state-2 (iroquoian-composite-accent-alist . p-state)
+               iroquoian-composite-pre-pausal-alist)
+    (p-state iroquoian-composite-pre-pausal-alist))))
+
+;;; iroquoian.el ends here
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-02  2:34 bug#74170: [PATCH] Add input methods for Northern Iroquoian languages Kierin Bell
@ 2024-11-02  8:16 ` Eli Zaretskii
  2024-11-03  3:40   ` Kierin Bell
  2024-11-03 22:11 ` bug#74170: [PATCH] Add input methods for Northern Iroquoian Kierin Bell
  1 sibling, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2024-11-02  8:16 UTC (permalink / raw)
  To: Kierin Bell; +Cc: 74170

> From: Kierin Bell <fernseed@fernseed.me>
> Date: Fri, 01 Nov 2024 22:34:16 -0400
> 
> Attached is a patch implementing input methods for five languages in the
> Northern Iroquoian language family.

Thanks.

> None of these languages have have officially designated standardized
> orthographies (and all of them are endangered), but I have designed the
> input methods around what I believe to be the most widely used community
> orthographies (used in language programs, dictionaries, etc).

Would it make sense to document the sources of the information you
used to write these input methods?  Since there are no standardized
orthographies, I think it would be good to have this information in
the file, so that in the future people who are interested in
developing these input methods could consult those sources and
understand your decisions.

> I should already have FSF copyright assignment on file.

Your copyright assignment is on file, yes.

> In GNU Emacs 30.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version
> 3.24.41, cairo version 1.18.0)
> System Description: Guix System

Please rebase the changeset on the master branch, as the Emacs 30
release branch is already closed for new features.  This is mostly
important for the NEWS part, because otherwise the patchset will fail
to apply.

> +(defun quail-iroquoian-combining-char-p (char)
> +  "Return whether CHAR is a combining character."
> +  (and (characterp char)
> +       ;; XXX: Combining characters here all have 'Mn' general category.
> +       (memq (get-char-code-property char 'general-category) '(Mn))))

What's with those "XXX" comments, here and elsewhere in the patch?
They seem to be FIXME comments of sorts, and if so, can we please
resolve these issues before this is installed?

More generally, I wonder why you needed to test 'characterp' here.  Do
we expect to get anything but characters in the code which uses this?

Also, what is special with combining characters used by these
languages that we need a special test for them?

> +   ((quail-iroquoian-combining-char-p quail-current-str)
> +    (setq quail-current-str
> +          (compose-string
> +           ;;
> +           ;; XXX: Kludge to delete extraneous initial letters from some
> +           ;; translations, e.g., with keys "a/'" in `onondaga-post',
> +           ;; the following would be inserted (with the extraneous
> +           ;; initial "a"): aǽ
> +           ;;
> +           ;; Doesn't work:
> +           ;; (substring STR (max 0 (- (string-width STR) 1)))
> +           ;;
> +           (apply #'string
> +                  (seq-reduce
> +                   (lambda (acc elt)
> +                     (if (quail-iroquoian-combining-char-p elt)
> +                         (append acc (list elt))
> +                       (list elt)))
> +                   (quail-lookup-map-and-concat quail-current-key)
> +                   '())))))

Please explain why we need to use compose-string here.  In general,
I'd like to avoid using it, because it's based on so-called "static
compositions", which don't support the bidirectional display that is
standard in Emacs since v24.1.  Why cannot we rely on the automatic
compositions (which are turned on by default) instead?  Any combining
character will automatically be composed with the preceding base and
combining characters due to the following auto-composition rule we
install by default:

  (when unicode-category-table
    (let ((elt `([,(purecopy "\\c.\\c^+") 1 compose-gstring-for-graphic]
		 [nil 0 compose-gstring-for-graphic])))
      (map-char-table
       #'(lambda (key val)
	   (if (memq val '(Mn Mc Me))
	       (set-char-table-range composition-function-table key elt)))
       unicode-category-table))

If this is somehow not enough for what you want to do here, please
explain the details.

Perhaps also explain how these input methods work, from the user's
POV.  That is, what should the user type and what will EMacs show
while inputting some of these sequences.

> +;;; iroquoian.el ends here

A 'provide' line is missing here.

Thanks.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-02  8:16 ` Eli Zaretskii
@ 2024-11-03  3:40   ` Kierin Bell
  2024-11-03  3:45     ` Kierin Bell
  0 siblings, 1 reply; 15+ messages in thread
From: Kierin Bell @ 2024-11-03  3:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74170

[-- Attachment #1: Type: text/plain, Size: 3989 bytes --]


Hi Eli,

Thanks for the feedback.

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Kierin Bell <fernseed@fernseed.me> Date: Fri, 01 Nov 2024
>> 22:34:16 -0400
>> 
>> Attached is a patch implementing input methods for five languages in the
>> Northern Iroquoian language family.
>
> Thanks.
>
>> None of these languages have have officially designated standardized
>> orthographies (and all of them are endangered), but I have designed the
>> input methods around what I believe to be the most widely used community
>> orthographies (used in language programs, dictionaries, etc).
>
> Would it make sense to document the sources of the information you
> used to write these input methods?  Since there are no standardized
> orthographies, I think it would be good to have this information in
> the file, so that in the future people who are interested in
> developing these input methods could consult those sources and
> understand your decisions.
>

This is a good suggestion. I have added comments with reference works
that should be helpful (although some of the minutiae also come from
personal familiarity with community language programs).

>> I should already have FSF copyright assignment on file.
>
> Your copyright assignment is on file, yes.
>
>> In GNU Emacs 30.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version
>> 3.24.41, cairo version 1.18.0)
>> System Description: Guix System
>
> Please rebase the changeset on the master branch, as the Emacs 30
> release branch is already closed for new features.  This is mostly
> important for the NEWS part, because otherwise the patchset will fail
> to apply.
>

I thought that I had formatted the patch with `git format-patch master',
but I re-formatted again against master after pulling. Hopefully that
works.

>> +(defun quail-iroquoian-combining-char-p (char)
>> +  "Return whether CHAR is a combining character."
>> +  (and (characterp char)
>> +       ;; XXX: Combining characters here all have 'Mn' general category.
>> +       (memq (get-char-code-property char 'general-category) '(Mn))))
>
> What's with those "XXX" comments, here and elsewhere in the patch?
> They seem to be FIXME comments of sorts, and if so, can we please
> resolve these issues before this is installed?
>

Yes, "XXX" is like "FIXME".  After investigating a lot of these issues,
I decided it was best to do a major refactor (see below).

> ...
> Perhaps also explain how these input methods work, from the user's
> POV.  That is, what should the user type and what will EMacs show
> while inputting some of these sequences.
>

I have added relatively comprehensive documentation strings for each of
the new input methods.

>> +;;; iroquoian.el ends here
>
> A 'provide' line is missing here.
>

Added a `provide' line. Most files in lisp/leim/quail lack them, but I
think that it makes sense to have one.

> Thanks.

I have done a major refactor doing away with the state transition table
approach in favor of generating rules for all of the diacritic/vowel
combinations and defining them with `quail-defrule'.

It turns out that the state transition table approach creates a few
issues that cannot be corrected for without patching quail.el.
Particularly, `quail-help' and `quail-build-decode-map' are hard-coded
to display a "KEY SEQUENCE" section that is ugly and not helpful when
state transition tables are employed for use-cases like mine. For
example, the 'char' column for the 'key' "a'" would display just the
combining acute accent character, which does not convey that the
diacritic and vowel are combined in the final translation.

My docstrings now are complete enough that the last issue would not be a
deal-breaker, but this and other issues make it clear that Quail was not
designed to be used like that. Also, few of the existing Quail packages
use state transition tables at all, and the refactored input method
implementations contained in my new patch are cleaner and more
maintainable.

Second patch is attached.

Thanks,
Kierin


[-- Attachment #2: ~/src/emacs/0001-Add-input-methods-for-Northern-Iroquoian-languages.patch --]
[-- Type: message/external-body, Size: 104 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-03  3:40   ` Kierin Bell
@ 2024-11-03  3:45     ` Kierin Bell
  2024-11-03  7:10       ` Eli Zaretskii
  0 siblings, 1 reply; 15+ messages in thread
From: Kierin Bell @ 2024-11-03  3:45 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74170

[-- Attachment #1: Type: text/plain, Size: 95 bytes --]


Apologies, the patch likely did not attach properly in the previous
email. Here it is again.


[-- Attachment #2: 0001-Add-input-methods-for-Northern-Iroquoian-languages.patch --]
[-- Type: text/x-patch, Size: 36967 bytes --]

From 6125fcedf4dac3e1c23dfe28e1cef19d9fef0e94 Mon Sep 17 00:00:00 2001
From: Kierin Bell <fernseed@fernseed.me>
Date: Fri, 1 Nov 2024 21:56:36 -0400
Subject: [PATCH] Add input methods for Northern Iroquoian languages

---
 etc/NEWS                     |  11 +
 lisp/leim/quail/iroquoian.el | 959 +++++++++++++++++++++++++++++++++++
 2 files changed, 970 insertions(+)
 create mode 100644 lisp/leim/quail/iroquoian.el

diff --git a/etc/NEWS b/etc/NEWS
index 22f11037453..9b8908e82ef 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -815,6 +815,17 @@ DirectWrite rendering parameters.
 To show color Emoji in Emacs, customize the default fontset to use a
 color Emoji font installed on your system for the 'emoji' script.
 
+---
+** New input methods for Northern Iroquoian languages.
+Input methods are now implemented for all Five Nations Iroquois
+languages in the Northern Iroquoian language family: 'mohawk-postfix'
+(Mohawk [Kanien’kéha / Onkwehonwe’né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 'iroquoian-postfix' input method to facilitate writing
+in the orthographies of the five languages simultaneously.
+
 \f
 ----------------------------------------------------------------------
 This file is part of GNU Emacs.
diff --git a/lisp/leim/quail/iroquoian.el b/lisp/leim/quail/iroquoian.el
new file mode 100644
index 00000000000..e205f22f759
--- /dev/null
+++ b/lisp/leim/quail/iroquoian.el
@@ -0,0 +1,959 @@
+;;; iroquoian.el --- Quail packages for inputting Iroquoian languages  -*- lexical-binding: t; coding: utf-8; -*-
+
+;; Copyright (C) 2024  Free Software Foundation, Inc.
+
+;; Author: Kierin Bell <fernseed@fernseed.me>
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file implements input methods for Northern Iroquoian languages.
+
+;; Input methods are implemented for all Five Nations Iroquois
+;; languages:
+
+;; - Mohawk (Kanien’kéha / Onkwehonwe’néha)
+;; - Oneida (Onʌyota:ká: / Ukwehuwehnéha)
+;; - Cayuga (Gayogo̱ho:nǫhnéha:ˀ)
+;; - Onondaga (Onųdaʔgegáʔ)
+;; - Seneca (Onödowá’ga:’)
+
+;; 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)
+
+(defun quail-iroquoian-permute-rules (letters modifiers)
+  "Return rules from all permutations of LETTERS and MODIFIERS
+
+LETTERS and MODIFIERS are lists or rules where each entry is of the
+form:
+
+(KEY TRANSLATION)
+
+KEY is a string containing the sequence of keys to be translated.
+TRANSLATE is a character representing the translation for KEY."
+  (let (result)
+    (pcase-dolist (`(,l-k ,l-t) letters)
+      (pcase-dolist (`(,m-k ,m-t) modifiers)
+        ;; Converting translation into vector ensures that keys that are
+        ;;  equal to prefixes of another key will not overshadow it.
+        (push (list (concat l-k m-k) (vector (string l-t m-t)))
+              result)))
+    (append letters
+            (nreverse result))))
+
+\f
+;;; 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 <i>
+;; in Eastern/Central dialects and <y> 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
+  '((":" ?:)))
+
+(defconst iroquoian-mohawk-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)))
+
+(defconst iroquoian-mohawk-consonant-alist
+  '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
+    ("h" ?h)
+    ("H" ?H)
+    ("k" ?k)
+    ("K" ?K)
+    ("m" ?m)
+    ("M" ?M)
+    ("n" ?n)
+    ("N" ?N)
+    ("r" ?r)
+    ("R" ?R)
+    ("s" ?s)
+    ("S" ?S)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("Y" ?Y)
+    ("y" ?y)
+    ;; Rare (ideophones and loan words):
+    ("b" ?b)
+    ("B" ?B)
+    ("m" ?m)
+    ("M" ?M)))
+
+(defconst iroquoian-mohawk-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("`" ?\N{COMBINING GRAVE ACCENT})))
+
+(quail-define-package
+ "mohawk-postfix" "Mohawk" "MOH<" nil
+ "Mohawk input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description  |
+|-----+-------------+--------------|
+| :   | :           | Vowel length |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á |
+| \\=`    | Grave accent | a` -> à |
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-mohawk-modifier-alist
+                       iroquoian-mohawk-consonant-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-mohawk-vowel-alist
+                        iroquoian-mohawk-diacritic-alist)))
+  (quail-defrule key trans))
+
+\f
+;;; 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})
+    ;; Alternative vowel length modifier:
+    (":" ?:)))
+
+(defconst iroquoian-oneida-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)
+    ("u" ?u)
+    ("U" ?U)
+    ("e/" ?ʌ)
+    ("E/" ?Ʌ)))
+
+(defconst iroquoian-oneida-consonant-alist
+  '((";;" ?\N{MODIFIER LETTER GLOTTAL STOP})
+    (";'" ?\N{RIGHT SINGLE QUOTATION MARK})
+    ("h" ?h)
+    ("H" ?H)
+    ("k" ?k)
+    ("K" ?K)
+    ("l" ?l)
+    ("L" ?L)
+    ("n" ?n)
+    ("N" ?N)
+    ("s" ?s)
+    ("S" ?S)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("y" ?y)
+    ("Y" ?Y)))
+
+(defconst iroquoian-oneida-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})))
+
+(defconst iroquoian-oneida-devoicing-alist
+  '(("_" ?\N{COMBINING LOW LINE})
+    ("__" ?_)))
+
+(quail-define-package
+ "oneida-postfix" "Oneida" "ONE<" nil
+ "Oneida input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| ::  | ·           | Vowel length             |
+| :   | :           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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 _ twice."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-oneida-modifier-alist
+                       iroquoian-oneida-consonant-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-oneida-vowel-alist
+                        iroquoian-oneida-diacritic-alist)
+                       iroquoian-oneida-devoicing-alist))
+  (quail-defrule key trans))
+
+\f
+;;; 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
+  '((":" ?:)
+    ;; Alternative vowel length modifier:
+    ("::" ?\N{MIDDLE DOT})))
+
+(defconst iroquoian-onondaga-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)
+    ("e," ?ę)
+    ("E," ?Ę)
+    ("o," ?ǫ)
+    ("O," ?Ǫ)
+    ("a\"" ?ä)
+    ("A\"" ?Ä)
+    ;; From Woodbury (2003) orthography:
+    ("a/" ?æ)
+    ("A/" ?Æ)
+    ("u," ?ų)
+    ("U," ?Ų)))
+
+(defconst iroquoian-onondaga-consonant-alist
+  '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
+    (";:" ?\N{LATIN LETTER GLOTTAL STOP})
+    ("c" ?c)
+    ("C" ?C)
+    ("d" ?d)
+    ("D" ?D)
+    ("g" ?g)
+    ("G" ?G)
+    ("h" ?h)
+    ("H" ?H)
+    ("j" ?j)
+    ("J" ?J)
+    ("k" ?k)
+    ("K" ?K)
+    ("n" ?n)
+    ("N" ?N)
+    ("s" ?s)
+    ("S" ?S)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("y" ?y)
+    ("Y" ?Y)))
+
+(defconst iroquoian-onondaga-nasal-alist
+  '(("n-" ?ñ)
+    ("N-" ?Ñ)))
+
+(defconst iroquoian-onondaga-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})))
+
+(quail-define-package
+ "onondaga-postfix" "Onondaga" "ONO<" nil
+ "Onondaga input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| :   | :           | Vowel length             |
+| ::  | ·           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ 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
+                       (quail-iroquoian-permute-rules
+                        iroquoian-onondaga-vowel-alist
+                        iroquoian-onondaga-diacritic-alist)))
+  (quail-defrule key trans))
+
+\f
+;;; 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
+  '((":" ?:)))
+
+(defconst iroquoian-cayuga-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)
+    ("u" ?u)
+    ("U" ?U)
+    ("e," ?ę)
+    ("E," ?Ę)
+    ("o," ?ǫ)
+    ("O," ?Ǫ)))
+
+(defconst iroquoian-cayuga-consonant-alist
+  '((";;" ?\N{MODIFIER LETTER GLOTTAL STOP})
+    (";'" ?\N{RIGHT SINGLE QUOTATION MARK})
+    ("d" ?d)
+    ("D" ?D)
+    ("g" ?g)
+    ("G" ?G)
+    ("h" ?h)
+    ("H" ?H)
+    ("j" ?j)
+    ("J" ?J)
+    ("k" ?k)
+    ("K" ?K)
+    ("n" ?n)
+    ("N" ?N)
+    ("r" ?r)
+    ("R" ?R)
+    ("s" ?s)
+    ("S" ?S)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("y" ?y)
+    ("Y" ?Y)
+    ;; Rare (examples?)
+    ("f" ?f)
+    ("F" ?F)))
+
+(defconst iroquoian-cayuga-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("-" ?\N{COMBINING MACRON BELOW})))
+
+(quail-define-package
+ "cayuga-postfix" "Cayuga" "CAY<" nil
+ "Cayuga input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| :   | :           | Vowel length             |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the
+translation and then type the hyphen."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-cayuga-modifier-alist
+                       iroquoian-cayuga-consonant-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-cayuga-vowel-alist
+                        iroquoian-cayuga-diacritic-alist)))
+  (quail-defrule key trans))
+
+\f
+;;; Seneca
+
+;;
+;; The orthography for the Seneca language is fairly stable with only
+;; minor variations (for example, <š> vs. <sy> for the voiceless
+;; postalveolar fricative).
+;;
+;; 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
+  '((":" ?:)))
+
+(defconst iroquoian-seneca-vowel-alist
+  '(("a" ?a)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)
+    ("a\"" ?ä)
+    ("A\"" ?Ä)
+    ("e\"" ?ë)
+    ("E\"" ?Ë)
+    ("o\"" ?ö)
+    ("O\"" ?Ö)
+    ;; Rare (e.g., niwú’u:h 'it is tiny'):
+    ("u" ?u)
+    ("U" ?U)))
+
+(defconst iroquoian-seneca-consonant-alist
+  `((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
+    ("d" ?d)
+    ("D" ?D)
+    ("g" ?g)
+    ("G" ?G)
+    ("h" ?h)
+    ("H" ?H)
+    ("j" ?j)
+    ("J" ?J)
+    ("k" ?k)
+    ("K" ?K)
+    ("n" ?n)
+    ("N" ?N)
+    ("s" ?s)
+    ("S" ?S)
+    ("s/" ?š)
+    ("S/" ?Š)
+    ("t" ?t)
+    ("T" ?T)
+    ("w" ?w)
+    ("W" ?W)
+    ("y" ?y)
+    ("Y" ?Y)
+    ("z" ?z)
+    ("Z" ?Z)
+    ;; Rare (e.g., ideophones: ba’s, plo’ts; nicknames: Gó’bit, Dagam,
+    ;; Jita:m):
+    ("b" ?b)
+    ("m" ?m)
+    ("p" ?p)))
+
+(defconst iroquoian-seneca-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("`" ?\N{COMBINING GRAVE ACCENT})))
+
+(quail-define-package
+ "seneca-postfix" "Seneca" "SEE<" nil
+ "Seneca input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| :   | :           | Vowel length             |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+| \\=`    | Grave accent | a` -> à|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-seneca-modifier-alist
+                       iroquoian-seneca-consonant-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-seneca-vowel-alist
+                        iroquoian-seneca-diacritic-alist)))
+  (quail-defrule key trans))
+
+\f
+;;; Composite Iroquoian
+
+;;
+;; This input method represents a composite input method for all of the
+;; Northern Iroquoian languages included above.
+;;
+
+(defconst iroquoian-composite-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)))
+
+(defconst iroquoian-composite-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)))
+
+(defconst iroquoian-composite-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)))))
+
+(defconst iroquoian-composite-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("`" ?\N{COMBINING GRAVE ACCENT})
+    ("-" ?\N{COMBINING MACRON BELOW})))
+
+(defconst iroquoian-composite-devoicing-alist
+  '(("_" ?\N{COMBINING LOW LINE})
+    ("__" ?_)))
+
+(defconst iroquoian-composite-nasal-alist
+  ;; Use ~ modifier instead of - (in contrast with `onondaga-postfix'),
+  ;; because the obtrusiveness of not being able to input literal
+  ;; hyphens after n outweighs benefits of being able to type a
+  ;; relatively obscure orthography easily.
+  '(("n~" ?ñ)
+    ("N~" ?Ñ)))
+
+(quail-define-package
+ "iroquoian-postfix" "Iroquoian" "IRO<" nil
+ "Composite input method for Northern Iroquoian languages
+
+This input method can be used to enter the following Northern Iroquoian
+languages:
+
+- Mohawk (Kanien’kéha / Onkwehonwe’né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             |
+| ::  | ·           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+| \\=`    | Grave accent | a` -> à|
+
+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)                 |
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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, type _ twice.
+
+Macron below is commonly used in Cayuga to indicate devoiced vowels.
+
+To enter a plain hyphen after a vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the
+translation and then type the hyphen.  After any other character, simply
+type a hyphen (it will not be translated into a combining macron below)."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-composite-modifier-alist
+                       iroquoian-composite-consonant-alist
+                       iroquoian-composite-nasal-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-composite-vowel-alist
+                        iroquoian-composite-diacritic-alist)
+                       iroquoian-composite-devoicing-alist))
+  (quail-defrule key trans))
+
+(provide 'iroquoian)
+;;; iroquoian.el ends here
-- 
2.46.0


[-- Attachment #3: Type: text/plain, Size: 16 bytes --]


Thanks,
Kierin

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-03  3:45     ` Kierin Bell
@ 2024-11-03  7:10       ` Eli Zaretskii
  2024-11-03 16:43         ` Kierin Bell
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2024-11-03  7:10 UTC (permalink / raw)
  To: Kierin Bell; +Cc: 74170

> From: Kierin Bell <fernseed@fernseed.me>
> Cc: 74170@debbugs.gnu.org
> Date: Sat, 02 Nov 2024 23:45:34 -0400
> 
> --- a/etc/NEWS
> +++ b/etc/NEWS
> @@ -815,6 +815,17 @@ DirectWrite rendering parameters.
>  To show color Emoji in Emacs, customize the default fontset to use a
>  color Emoji font installed on your system for the 'emoji' script.
>  
> +---
> +** New input methods for Northern Iroquoian languages.
> +Input methods are now implemented for all Five Nations Iroquois
> +languages in the Northern Iroquoian language family: 'mohawk-postfix'
> +(Mohawk [Kanien’kéha / Onkwehonwe’né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 'iroquoian-postfix' input method to facilitate writing
> +in the orthographies of the five languages simultaneously.

This is the wrong place for this NEWS entry.  Please put this entry
under Internationalization (where you will see another entry about a
new input method), and please made it a sub-entry of
Internationalization, i.e. start with "***", not "**".

> +(defconst iroquoian-mohawk-consonant-alist
> +  '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
> +    ("h" ?h)
> +    ("H" ?H)
> +    ("k" ?k)
> +    ("K" ?K)
> +    ("m" ?m)
> +    ("M" ?M)
> +    ("n" ?n)
> +    ("N" ?N)
> +    ("r" ?r)
> +    ("R" ?R)
> +    ("s" ?s)
> +    ("S" ?S)
> +    ("t" ?t)
> +    ("T" ?T)
> +    ("w" ?w)
> +    ("W" ?W)
> +    ("Y" ?Y)
> +    ("y" ?y)
> +    ;; Rare (ideophones and loan words):
> +    ("b" ?b)
> +    ("B" ?B)
> +    ("m" ?m)
> +    ("M" ?M)))

Can we please have doc strings for these defconst's, which explain the
role of each element of alist's associations?  For example, by looking
at the rest of the code, it sounds like most of the above will define
trivial rules that map, say, H into itself?  If so, do we really need
such rules in the input method?  Quail generally does that
automatically, i.e. a letter that has no mapping produces itself.  But
maybe I misunderstood the code and the role of the data of these
alists, which is why I think doc strings would be a good idea.

Thanks.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-03  7:10       ` Eli Zaretskii
@ 2024-11-03 16:43         ` Kierin Bell
  2024-11-03 18:52           ` Eli Zaretskii
  0 siblings, 1 reply; 15+ messages in thread
From: Kierin Bell @ 2024-11-03 16:43 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74170

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Kierin Bell <fernseed@fernseed.me> Cc: 74170@debbugs.gnu.org
>> Date: Sat, 02 Nov 2024 23:45:34 -0400
>> 
>> --- a/etc/NEWS
>> +++ b/etc/NEWS
>> @@ -815,6 +815,17 @@ DirectWrite rendering parameters.
>>  To show color Emoji in Emacs, customize the default fontset to use a
>>  color Emoji font installed on your system for the 'emoji' script.
>>  
>> +---
>> +** New input methods for Northern Iroquoian languages.
>> +Input methods are now implemented for all Five Nations Iroquois
>> +languages in the Northern Iroquoian language family: 'mohawk-postfix'
>> +(Mohawk [Kanien’kéha / Onkwehonwe’né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 'iroquoian-postfix' input method to facilitate writing
>> +in the orthographies of the five languages simultaneously.
>
> This is the wrong place for this NEWS entry.  Please put this entry
> under Internationalization (where you will see another entry about a
> new input method), and please made it a sub-entry of
> Internationalization, i.e. start with "***", not "**".
>

Sorry, fixed.

>> +(defconst iroquoian-mohawk-consonant-alist
>> +  '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
>> +    ("h" ?h)
>> +    ("H" ?H)
>> +    ("k" ?k)
>> +    ("K" ?K)
>> +    ("m" ?m)
>> +    ("M" ?M)
>> +    ("n" ?n)
>> +    ("N" ?N)
>> +    ("r" ?r)
>> +    ("R" ?R)
>> +    ("s" ?s)
>> +    ("S" ?S)
>> +    ("t" ?t)
>> +    ("T" ?T)
>> +    ("w" ?w)
>> +    ("W" ?W)
>> +    ("Y" ?Y)
>> +    ("y" ?y)
>> +    ;; Rare (ideophones and loan words):
>> +    ("b" ?b)
>> +    ("B" ?B)
>> +    ("m" ?m)
>> +    ("M" ?M)))
>
> Can we please have doc strings for these defconst's, which explain the
> role of each element of alist's associations?  For example, by looking
> at the rest of the code, it sounds like most of the above will define
> trivial rules that map, say, H into itself?  If so, do we really need
> such rules in the input method?  Quail generally does that
> automatically, i.e. a letter that has no mapping produces itself.  But
> maybe I misunderstood the code and the role of the data of these
> alists, which is why I think doc strings would be a good idea.
>
> Thanks.

Added doc strings for all defconst's.

With the state transition tables, entries were needed for consonants
that were bound to a single key representing themselves, so that
pre-pausal low lines could be combined with them. That's unnecessary
now. There isn't any real benefit of leaving such entries and it could
be confusing, so I will remove all unnecessary consonant and modifier
letter entries.

Finally, before I submit the next patch, there is one more change that I
would like feedback on regarding the names of the input methods.

For accessibility purposes, I think that it is important to use the
Anglicized names of the languages and of the linguistic group for the
input methods. There are few (if any) monolingual speakers of these
languages today and academics are also an audience.

However, some will likely prefer names derived from autonyms, like
Kanien’kéha for 'Mohawk (language)' --- so perhaps Latinizing and
sluggifying that: 'kanienkeha-postfix'.

I'm especially thinking about the use of the term "Iroquoian" in the
name of the `iroquoian-postfix' input method --- while this is by no
means a universal sentiment, some believe it to be of derogatory origin.
There are a few different alternative terms that can be used.

I would like to propose that I add aliases for the six input methods
derived from autonyms --- or at least for the 'iroqouian-postfix'
method. I am wondering: 1) Is there a built-in way to define aliases for
input methods? (I can implement a quick macro that defines two input
methods simultaneously if not.) 2) Is there a convention or argument
against declaring multiple input methods with different names that
basically do the same thing?

WDYT?

Thanks,
Kierin





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-03 16:43         ` Kierin Bell
@ 2024-11-03 18:52           ` Eli Zaretskii
  2024-11-03 20:46             ` Kierin Bell
  2024-11-07  4:07             ` Kierin Bell
  0 siblings, 2 replies; 15+ messages in thread
From: Eli Zaretskii @ 2024-11-03 18:52 UTC (permalink / raw)
  To: Kierin Bell; +Cc: 74170

> From: Kierin Bell <fernseed@fernseed.me>
> Cc: 74170@debbugs.gnu.org
> Date: Sun, 03 Nov 2024 11:43:51 -0500
> 
> I would like to propose that I add aliases for the six input methods
> derived from autonyms --- or at least for the 'iroqouian-postfix'
> method. I am wondering: 1) Is there a built-in way to define aliases for
> input methods? (I can implement a quick macro that defines two input
> methods simultaneously if not.) 2) Is there a convention or argument
> against declaring multiple input methods with different names that
> basically do the same thing?

I don't think we have precedents for any of these.

In general, input method names are AFAIR always plain-ASCII, but the
mnemonics shown on the mode line when an input method is active use
non-ASCII characters indicative of the language.

Using several names for a single input method could be confusing, so
if you can find a single name that cannot cause negative sentiments,
using such a name is a better alternative, I think.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-03 18:52           ` Eli Zaretskii
@ 2024-11-03 20:46             ` Kierin Bell
  2024-11-07  4:07             ` Kierin Bell
  1 sibling, 0 replies; 15+ messages in thread
From: Kierin Bell @ 2024-11-03 20:46 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74170

[-- Attachment #1: Type: text/plain, Size: 1368 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Kierin Bell <fernseed@fernseed.me> Cc: 74170@debbugs.gnu.org
>> Date: Sun, 03 Nov 2024 11:43:51 -0500
>> 
>> I would like to propose that I add aliases for the six input methods
>> derived from autonyms --- or at least for the 'iroqouian-postfix'
>> method. I am wondering: 1) Is there a built-in way to define aliases for
>> input methods? (I can implement a quick macro that defines two input
>> methods simultaneously if not.) 2) Is there a convention or argument
>> against declaring multiple input methods with different names that
>> basically do the same thing?
>
> I don't think we have precedents for any of these.
>
> In general, input method names are AFAIR always plain-ASCII, but the
> mnemonics shown on the mode line when an input method is active use
> non-ASCII characters indicative of the language.
>
> Using several names for a single input method could be confusing, so
> if you can find a single name that cannot cause negative sentiments,
> using such a name is a better alternative, I think.

Thank you for your input, Eli.

I opted to rename `iroquoian-postfix' to `haudenosaunee-postfix' and
leave the other input methods as-is. I have also included a (relatively
lengthy) explanatory comment that will hopefully be helpful for those
asking similar questions in the future.

Patch is attached.


[-- Attachment #2: 0001-Add-input-methods-for-Northern-Iroquoian-languages.patch --]
[-- Type: text/x-patch, Size: 41951 bytes --]

From e3ceffa02cc49bd0579752437f16ac93d4f23865 Mon Sep 17 00:00:00 2001
From: Kierin Bell <fernseed@fernseed.me>
Date: Sun, 3 Nov 2024 15:19:09 -0500
Subject: [PATCH] Add input methods for Northern Iroquoian languages

---
 etc/NEWS                     |  11 +
 lisp/leim/quail/iroquoian.el | 981 +++++++++++++++++++++++++++++++++++
 2 files changed, 992 insertions(+)
 create mode 100644 lisp/leim/quail/iroquoian.el

diff --git a/etc/NEWS b/etc/NEWS
index 41a76d1cd95..bf6322f1a47 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 / Onkwehonwe’né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..c63bcd13083
--- /dev/null
+++ b/lisp/leim/quail/iroquoian.el
@@ -0,0 +1,981 @@
+;;; iroquoian.el --- Quail packages for inputting Iroquoian languages  -*- lexical-binding: t; coding: utf-8; -*-
+
+;; Copyright (C) 2024  Free Software Foundation, Inc.
+
+;; Author: Kierin Bell <fernseed@fernseed.me>
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file implements input methods for Northern Iroquoian languages.
+
+;; Input methods are implemented for all Five Nations Iroquois
+;; languages:
+
+;; - Mohawk (Kanien’kéha / Onkwehonwe’né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)
+
+(defun quail-iroquoian-permute-rules (letters modifiers)
+  "Return rules from all permutations of LETTERS and MODIFIERS
+
+LETTERS and MODIFIERS are lists or rules where each entry is of the
+form:
+
+(KEY TRANSLATION)
+
+KEY is a string containing the sequence of keys to be translated.
+TRANSLATE is a character representing the translation for KEY."
+  (let (result)
+    (pcase-dolist (`(,l-k ,l-t) letters)
+      (pcase-dolist (`(,m-k ,m-t) modifiers)
+        ;; Converting translation into vector ensures that keys that are
+        ;; equal to prefixes of another key will not overshadow it.
+        (push (list (concat l-k m-k) (vector (string l-t m-t)))
+              result)))
+    (append letters
+            (nreverse result))))
+
+\f
+;;; 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 <i>
+;; in Eastern/Central dialects and <y> 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))
+  "Alist of rules for vowel letters in Mohawk input methods.
+
+Each entry is of the form:
+
+(KEY TRANSLATION)
+
+KEY must be a string representing a key sequence to be translated.
+
+TRANSLATION must be a character representing the translation for KEY.
+
+This variable is meant to be used as the first argument to
+`quail-iroquoian-permute-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'.")
+
+(defconst iroquoian-mohawk-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("`" ?\N{COMBINING GRAVE ACCENT}))
+  "Alist of rules for combining diacritics in Mohawk input methods.
+Entries are as with `iroquoian-mohawk-vowel-alist', which see.")
+
+(quail-define-package
+ "mohawk-postfix" "Mohawk" "MOH<" nil
+ "Mohawk (Kanien’kéha) input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description  |
+|-----+-------------+--------------|
+| :   | :           | Vowel length |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á |
+| \\=`    | Grave accent | a` -> à |
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-mohawk-modifier-alist
+                       iroquoian-mohawk-consonant-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-mohawk-vowel-alist
+                        iroquoian-mohawk-diacritic-alist)))
+  (quail-defrule key trans))
+
+\f
+;;; 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)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)
+    ("u" ?u)
+    ("U" ?U)
+    ("e/" ?ʌ)
+    ("E/" ?Ʌ))
+  "Alist of rules for vowel letters in Oneida input methods.
+
+Each entry is of the form:
+
+(KEY TRANSLATION)
+
+KEY must be a string representing a key sequence to be translated.
+
+TRANSLATION must be a character representing the translation for KEY.
+
+This variable is meant to be used as the first argument to
+`quail-iroquoian-permute-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-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT}))
+  "Alist of rules for combining diacritics in Oneida input methods.
+Entries are as with `iroquoian-oneida-vowel-alist', which see.")
+
+(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             |
+| :   | :           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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 _ twice."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-oneida-modifier-alist
+                       iroquoian-oneida-consonant-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-oneida-vowel-alist
+                        iroquoian-oneida-diacritic-alist)
+                       iroquoian-oneida-devoicing-alist))
+  (quail-defrule key trans))
+
+\f
+;;; 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)
+    ("A" ?A)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)
+    ("e," ?ę)
+    ("E," ?Ę)
+    ("o," ?ǫ)
+    ("O," ?Ǫ)
+    ("a\"" ?ä)
+    ("A\"" ?Ä)
+    ;; From Woodbury (2003) orthography:
+    ("a/" ?æ)
+    ("A/" ?Æ)
+    ("u," ?ų)
+    ("U," ?Ų))
+  "Alist of rules for vowel letters in Onondaga input methods.
+
+Each entry is of the form:
+
+(KEY TRANSLATION)
+
+KEY must be a string representing a key sequence to be translated.
+
+TRANSLATION must be a character representing the translation for KEY.
+
+This variable is meant to be used as the first argument to
+`quail-iroquoian-permute-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-" ?Ñ))
+  "Alist of rules for nasal modifier letters in Onondaga input methods.
+Entries are as with rules in `quail-define-rules'.")
+
+(defconst iroquoian-onondaga-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT}))
+  "Alist of rules for combining diacritics in Onondaga input methods.
+Entries are as with `iroquoian-onondaga-vowel-alist', which see.")
+
+(quail-define-package
+ "onondaga-postfix" "Onondaga" "ONO<" nil
+ "Onondaga (Onųdaʔgegáʔ) input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| :   | :           | Vowel length             |
+| ::  | ·           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ 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
+                       (quail-iroquoian-permute-rules
+                        iroquoian-onondaga-vowel-alist
+                        iroquoian-onondaga-diacritic-alist)))
+  (quail-defrule key trans))
+
+\f
+;;; 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)
+    ("e" ?e)
+    ("E" ?E)
+    ("i" ?i)
+    ("I" ?I)
+    ("o" ?o)
+    ("O" ?O)
+    ("u" ?u)
+    ("U" ?U)
+    ("e," ?ę)
+    ("E," ?Ę)
+    ("o," ?ǫ)
+    ("O," ?Ǫ))
+  "Alist of rules for vowel letters in Cayuga input methods.
+
+Each entry is of the form:
+
+(KEY TRANSLATION)
+
+KEY must be a string representing a key sequence to be translated.
+
+TRANSLATION must be a character representing the translation for KEY.
+
+This variable is meant to be used as the first argument to
+`quail-iroquoian-permute-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'.")
+
+(defconst iroquoian-cayuga-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("-" ?\N{COMBINING MACRON BELOW}))
+  "Alist of rules for combining diacritics in Cayuga input methods.
+Entries are as with `iroquoian-cayuga-vowel-alist', which see.")
+
+(quail-define-package
+ "cayuga-postfix" "Cayuga" "CAY<" nil
+ "Cayuga (Gayogo̱ho:nǫhnéha:ˀ) input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| :   | :           | Vowel length             |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the
+translation and then type the hyphen."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-cayuga-modifier-alist
+                       iroquoian-cayuga-consonant-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-cayuga-vowel-alist
+                        iroquoian-cayuga-diacritic-alist)))
+  (quail-defrule key trans))
+
+\f
+;;; Seneca
+
+;;
+;; The orthography for the Seneca language is fairly stable with only
+;; minor variations (for example, <š> vs. <sy> for the voiceless
+;; postalveolar fricative).
+;;
+;; 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\"" ?Ä)
+    ("e\"" ?ë)
+    ("E\"" ?Ë)
+    ("o\"" ?ö)
+    ("O\"" ?Ö)
+    ;; Rare (e.g., niwú’u:h 'it is tiny' [Chafe 2015]):
+    ("u" ?u)
+    ("U" ?U))
+  "Alist of rules for vowels in Seneca input methods.
+
+Each entry is of the form:
+
+(KEY TRANSLATION)
+
+KEY must be a string representing a key sequence to be translated.
+
+TRANSLATION must be a character representing the translation for KEY.
+
+This variable is meant to be used as the first argument to
+`quail-iroquoian-permute-rules'.")
+
+(defconst iroquoian-seneca-consonant-alist
+  '((";;" ?\N{RIGHT SINGLE QUOTATION MARK})
+    ("s/" ?š)
+    ("S/" ?Š))
+  "Alist of rules for consonant letters in Seneca input methods.
+Entries are as with rules in `quail-define-rules'.")
+
+(defconst iroquoian-seneca-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("`" ?\N{COMBINING GRAVE ACCENT}))
+  "Alist of rules for combining diacritics in Seneca input methods.
+Entries are as with `iroquoian-seneca-vowel-alist', which see.")
+
+(quail-define-package
+ "seneca-postfix" "Seneca" "SEE<" nil
+ "Seneca (Onödowá’ga:’) input method with postfix modifiers
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| :   | :           | Vowel length             |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+| \\=`    | Grave accent | a` -> à|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ nil t nil nil nil nil nil nil nil nil t)
+
+(pcase-dolist (`(,key ,trans)
+               (append iroquoian-seneca-modifier-alist
+                       iroquoian-seneca-consonant-alist
+                       (quail-iroquoian-permute-rules
+                        iroquoian-seneca-vowel-alist
+                        iroquoian-seneca-diacritic-alist)))
+  (quail-defrule key trans))
+
+\f
+;;; 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 Onkwehonwe’né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 Onkwehonwe’né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)))
+
+(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)))
+
+(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)))))
+
+(defconst iroquoian-haudenosaunee-diacritic-alist
+  '(("'" ?\N{COMBINING ACUTE ACCENT})
+    ("`" ?\N{COMBINING GRAVE ACCENT})
+    ("-" ?\N{COMBINING MACRON BELOW})))
+
+(defconst iroquoian-haudenosaunee-devoicing-alist
+  '(("_" ?\N{COMBINING LOW LINE})
+    ("__" ?_)))
+
+(defconst iroquoian-haudenosaunee-nasal-alist
+  ;; Use ~ modifier instead of - (in contrast with `onondaga-postfix'),
+  ;; because the obtrusiveness of not being able to input literal
+  ;; hyphens after n outweighs benefits of being able to type a
+  ;; relatively obscure orthography easily.
+  '(("n~" ?ñ)
+    ("N~" ?Ñ)))
+
+(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 / Onkwehonwe’né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             |
+| ::  | ·           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+| \\=`    | Grave accent | a` -> à|
+
+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)                 |
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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, type _ twice.
+
+Macron below is commonly used in Cayuga to indicate devoiced vowels.
+
+To enter a plain hyphen after a vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the
+translation and then type the hyphen.  After any other character, simply
+type a hyphen (it will not be translated into a combining macron below)."
+ 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
+                       (quail-iroquoian-permute-rules
+                        iroquoian-haudenosaunee-vowel-alist
+                        iroquoian-haudenosaunee-diacritic-alist)
+                       iroquoian-haudenosaunee-devoicing-alist))
+  (quail-defrule key trans))
+
+(provide 'iroquoian)
+;;; iroquoian.el ends here
-- 
2.46.0


[-- Attachment #3: Type: text/plain, Size: 16 bytes --]


Thanks,
Kierin

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian
  2024-11-02  2:34 bug#74170: [PATCH] Add input methods for Northern Iroquoian languages Kierin Bell
  2024-11-02  8:16 ` Eli Zaretskii
@ 2024-11-03 22:11 ` Kierin Bell
  1 sibling, 0 replies; 15+ messages in thread
From: Kierin Bell @ 2024-11-03 22:11 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74170

[-- Attachment #1: Type: text/plain, Size: 603 bytes --]


Resending a revised patch again. I find it easier to just reformat
against master, and I apologize if there is some other workflow that is
preferred.

In testing, I found one more area for improvement: we should try to use
precomposed characters when they exist instead of strings containing
base letters and combining characters. That meant doing away the the
automatic concatenation of vowels and combining diacritics permutations
in favor of just specifying all permutations manually (like most Quail
packages do). That is more error-prone, but I've double checked and
tested it and it looks good.


[-- Attachment #2: 0001-Add-input-methods-for-Northern-Iroquoian-languages.patch --]
[-- Type: text/x-patch, Size: 39162 bytes --]

From 556025db0460097428d32dc445c05d35b88bdbe2 Mon Sep 17 00:00:00 2001
From: Kierin Bell <fernseed@fernseed.me>
Date: Sun, 3 Nov 2024 15:19:09 -0500
Subject: [PATCH] Add input methods for Northern Iroquoian languages

---
 etc/NEWS                     |  11 +
 lisp/leim/quail/iroquoian.el | 926 +++++++++++++++++++++++++++++++++++
 2 files changed, 937 insertions(+)
 create mode 100644 lisp/leim/quail/iroquoian.el

diff --git a/etc/NEWS b/etc/NEWS
index 41a76d1cd95..bf6322f1a47 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 / Onkwehonwe’né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..1739453b5e4
--- /dev/null
+++ b/lisp/leim/quail/iroquoian.el
@@ -0,0 +1,926 @@
+;;; iroquoian.el --- Quail packages for inputting Iroquoian languages  -*- lexical-binding: t; coding: utf-8; -*-
+
+;; Copyright (C) 2024  Free Software Foundation, Inc.
+
+;; Author: Kierin Bell <fernseed@fernseed.me>
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file implements input methods for Northern Iroquoian languages.
+
+;; Input methods are implemented for all Five Nations Iroquois
+;; languages:
+
+;; - Mohawk (Kanien’kéha / Onkwehonwe’né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)
+
+\f
+;;; 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 <i>
+;; in Eastern/Central dialects and <y> 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`" ?Ò))
+  "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
+
+Modifiers:
+
+| Key | Translation | Description  |
+|-----+-------------+--------------|
+| :   | :           | Vowel length |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á |
+| \\=`    | Grave accent | a` -> à |
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ 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))
+
+\f
+;;; 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/'" ["Ʌ́"]))
+  "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             |
+| :   | :           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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 _ twice."
+ 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))
+
+\f
+;;; 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,'" ["Ų́"]))
+  "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-" ?Ñ))
+  "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             |
+| ::  | ·           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ 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))
+
+\f
+;;; 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,-" ["Ǫ̱"]))
+  "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
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| :   | :           | Vowel length             |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the
+translation and then type the hyphen."
+ 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))
+
+\f
+;;; Seneca
+
+;;
+;; The orthography for the Seneca language is fairly stable with only
+;; minor variations (for example, <š> vs. <sy> for the voiceless
+;; postalveolar fricative).
+;;
+;; 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`" ?Ù))
+  "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/" ?Š))
+  "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
+
+Modifiers:
+
+| Key | Translation | Description              |
+|-----+-------------+--------------------------|
+| :   | :           | Vowel length             |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+| \\=`    | Grave accent | a` -> à|
+
+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.
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe."
+ 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))
+
+\f
+;;; 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 Onkwehonwe’né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 Onkwehonwe’né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)))
+
+(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)))
+
+(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)))))
+
+(defconst iroquoian-haudenosaunee-devoicing-alist
+  '(("_" ?\N{COMBINING LOW LINE})
+    ("__" ?_)))
+
+(defconst iroquoian-haudenosaunee-nasal-alist
+  ;; Use ~ modifier instead of - (in contrast with `onondaga-postfix'),
+  ;; because the obtrusiveness of not being able to input literal
+  ;; hyphens after n outweighs benefits of being able to type a
+  ;; relatively obscure orthography easily.
+  '(("n~" ?ñ)
+    ("N~" ?Ñ)))
+
+(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 / Onkwehonwe’né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             |
+| ::  | ·           | Vowel length (alternate) |
+
+Stress diacritics:
+
+| Key  | Description  | Example |
+|------+--------------+---------|
+| \\='    | Acute accent | a' -> á|
+| \\=`    | Grave accent | a` -> à|
+
+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)                 |
+
+Alternatively, an apostrophe can represent a glottal stop.  To enter an
+apostrophe directly after a vowel without adding an acute accent to that
+vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the translation and then type the
+apostrophe.
+
+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, type _ twice.
+
+Macron below is commonly used in Cayuga to indicate devoiced vowels.
+
+To enter a plain hyphen after a vowel, first use \\<quail-translation-keymap>\\[quail-select-current] to terminate the
+translation and then type the hyphen.  After any other character, simply
+type a hyphen (it will not be translated into a combining macron below)."
+ 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
-- 
2.46.0


[-- Attachment #3: Type: text/plain, Size: 16 bytes --]


Thanks,
Kierin

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-03 18:52           ` Eli Zaretskii
  2024-11-03 20:46             ` Kierin Bell
@ 2024-11-07  4:07             ` Kierin Bell
  2024-11-07  9:25               ` Eli Zaretskii
  1 sibling, 1 reply; 15+ messages in thread
From: Kierin Bell @ 2024-11-07  4:07 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74170

[-- Attachment #1: Type: text/plain, Size: 2117 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

Hi,

>> From: Kierin Bell <fernseed@fernseed.me> Cc: 74170@debbugs.gnu.org
>> Date: Sun, 03 Nov 2024 11:43:51 -0500
>> 
>> I would like to propose that I add aliases for the six input methods
>> derived from autonyms --- or at least for the 'iroqouian-postfix'
>> method. I am wondering: 1) Is there a built-in way to define aliases for
>> input methods? (I can implement a quick macro that defines two input
>> methods simultaneously if not.) 2) Is there a convention or argument
>> against declaring multiple input methods with different names that
>> basically do the same thing?
>
> I don't think we have precedents for any of these.
>
> In general, input method names are AFAIR always plain-ASCII, but the
> mnemonics shown on the mode line when an input method is active use
> non-ASCII characters indicative of the language.
>
> Using several names for a single input method could be confusing, so
> if you can find a single name that cannot cause negative sentiments,
> using such a name is a better alternative, I think.

I did not see any movement on this after a few days (after sending a new
version of the patch).

Attached is yet another version of the patch. Again, apologies if there
is a different workflow that is preferred other than repeatedly sending
reformatted patches.

This patch makes a few more minor improvements:

- Manually add entries to create behavior similar to `latin-postix'
  where doubling any postfix letter (letter that comes after the first
  letter) inserts the initial letter and the postfix letter separately.
  (And updated the input method doc strings to document this.)

- Added doc strings to five defconst's, which I forgot to do previously.

- Added references to the composite `haudenosaunee-postfix' method in
  the doc strings for the input methods for individual languages, and
  added references to each of the input methods for individual languages
  to the doc string for `haudenosaunee-postfix'.

- Added some Lisp commentary with details about community Seneca
  orthography vs. that used in dictionaries and grammars.


[-- Attachment #2: 0001-Add-input-methods-for-Northern-Iroquoian-languages.patch --]
[-- Type: text/x-patch, Size: 41562 bytes --]

From 84db7a49bda65af8db19a1b5bbdcc16e1cd444dc Mon Sep 17 00:00:00 2001
From: Kierin Bell <fernseed@fernseed.me>
Date: Sun, 3 Nov 2024 15:19:09 -0500
Subject: [PATCH] Add input methods for Northern Iroquoian languages

---
 etc/NEWS                     |   11 +
 lisp/leim/quail/iroquoian.el | 1051 ++++++++++++++++++++++++++++++++++
 2 files changed, 1062 insertions(+)
 create mode 100644 lisp/leim/quail/iroquoian.el

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 <fernseed@fernseed.me>
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; 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)
+
+\f
+;;; 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 <i>
+;; in Eastern/Central dialects and <y> 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))
+
+\f
+;;; 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))
+
+\f
+;;; 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))
+
+\f
+;;; 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))
+
+\f
+;;; Seneca
+
+;;
+;; The orthography for the Seneca language is fairly stable with only
+;; minor variations, for example, <sy> 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))
+
+\f
+;;; 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
-- 
2.46.0


[-- Attachment #3: Type: text/plain, Size: 19 bytes --]


Thank you,
Kierin

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-07  4:07             ` Kierin Bell
@ 2024-11-07  9:25               ` Eli Zaretskii
  2024-11-07  9:34                 ` Robert Pluim
  0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2024-11-07  9:25 UTC (permalink / raw)
  To: Kierin Bell; +Cc: 74170

> From: Kierin Bell <fernseed@fernseed.me>
> Cc: 74170@debbugs.gnu.org
> Date: Wed, 06 Nov 2024 23:07:16 -0500
> 
> I did not see any movement on this after a few days (after sending a new
> version of the patch).

I'm afraid you greatly exaggerate the amount of free time I and other
maintainers have to work on Emacs.  For me personally, as my free time
patterns have a week-long cycle, you should only worry about lack of
any responses after full 7 days have passed since the last
communications.  We are far from being there yet in this case.

> Attached is yet another version of the patch. Again, apologies if there
> is a different workflow that is preferred other than repeatedly sending
> reformatted patches.

Thanks, I installed this on the master branch.  Please in the future
accompany your changes with ChangeLog-style commit log messages, as
described in CONTRIBUTE, and also mention the bug number there.  (I
did it this time for you.)

After trying the new input methods a bit, I wonder why they don't show
the same hints as, say, the latin-post input method.  Here's an
example: if I enable the mohawk-postfix input method, and type the
letter a, all I see in the echo-area is "a".  If I then type the
apostrophe ', the letter a in the buffer becomes á, and the echo-area
shows "a'".

By contrast, with the latin-post input method, after typing the letter
a, I see a much more helpful display in the echo-area: a["',-/^_`~],
and after typing the apostrophe ', the display in the echo-area
becomes a'['].  Typing another apostrophe clears the echo-area, as
expected.

Is there a reason why these new input methods don't behave like
latin-post?  The main difference that bothers me is what is shown in
the echo-area: latin-post seems to be much more helpful in this
regard.





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-07  9:25               ` Eli Zaretskii
@ 2024-11-07  9:34                 ` Robert Pluim
  2024-11-07 13:10                   ` Kierin Bell
  0 siblings, 1 reply; 15+ messages in thread
From: Robert Pluim @ 2024-11-07  9:34 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74170, Kierin Bell

>>>>> On Thu, 07 Nov 2024 11:25:01 +0200, Eli Zaretskii <eliz@gnu.org> said:

    Eli> After trying the new input methods a bit, I wonder why they don't show
    Eli> the same hints as, say, the latin-post input method.  Here's an
    Eli> example: if I enable the mohawk-postfix input method, and type the
    Eli> letter a, all I see in the echo-area is "a".  If I then type the
    Eli> apostrophe ', the letter a in the buffer becomes á, and the echo-area
    Eli> shows "a'".

    Eli> By contrast, with the latin-post input method, after typing the letter
    Eli> a, I see a much more helpful display in the echo-area: a["',-/^_`~],
    Eli> and after typing the apostrophe ', the display in the echo-area
    Eli> becomes a'['].  Typing another apostrophe clears the echo-area, as
    Eli> expected.

    Eli> Is there a reason why these new input methods don't behave like
    Eli> latin-post?  The main difference that bothers me is what is shown in
    Eli> the echo-area: latin-post seems to be much more helpful in this
    Eli> regard.

I suspect the `quail-define-package' has GUIDANCE as nil.

Robert
-- 





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-07  9:34                 ` Robert Pluim
@ 2024-11-07 13:10                   ` Kierin Bell
  2024-11-07 13:48                     ` Robert Pluim
  0 siblings, 1 reply; 15+ messages in thread
From: Kierin Bell @ 2024-11-07 13:10 UTC (permalink / raw)
  To: Robert Pluim; +Cc: Eli Zaretskii, 74170

[-- Attachment #1: Type: text/plain, Size: 1498 bytes --]

Robert Pluim <rpluim@gmail.com> writes:

>>>>>> On Thu, 07 Nov 2024 11:25:01 +0200, Eli Zaretskii <eliz@gnu.org>
>>>>>> said:
>
>     Eli> After trying the new input methods a bit, I wonder why they don't show
>     Eli> the same hints as, say, the latin-post input method.  Here's an
>     Eli> example: if I enable the mohawk-postfix input method, and type the
>     Eli> letter a, all I see in the echo-area is "a".  If I then type the
>     Eli> apostrophe ', the letter a in the buffer becomes á, and the echo-area
>     Eli> shows "a'".
>
>     Eli> By contrast, with the latin-post input method, after typing the letter
>     Eli> a, I see a much more helpful display in the echo-area: a["',-/^_`~],
>     Eli> and after typing the apostrophe ', the display in the echo-area
>     Eli> becomes a'['].  Typing another apostrophe clears the echo-area, as
>     Eli> expected.
>
>     Eli> Is there a reason why these new input methods don't behave like
>     Eli> latin-post?  The main difference that bothers me is what is shown in
>     Eli> the echo-area: latin-post seems to be much more helpful in this
>     Eli> regard.
>
> I suspect the `quail-define-package' has GUIDANCE as nil.
>
> Robert

Yes, GUIDANCE was set to nil and this is a mistake on my part (left over
from the old state transition tables implementation).

Attached is a patch against master fixing this. (Or should I submit a
new bug?)

Thank you maintainers for your precious time!


[-- Attachment #2: 0001-Enable-guidance-for-Northern-Iroquoian-input-methods.patch --]
[-- Type: text/x-patch, Size: 2668 bytes --]

From d491c7ea21c926f6fd870a13f65301c48ba663aa Mon Sep 17 00:00:00 2001
From: Kierin Bell <fernseed@fernseed.me>
Date: Thu, 7 Nov 2024 07:55:01 -0500
Subject: [PATCH] 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)
---
 lisp/leim/quail/iroquoian.el | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

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


[-- Attachment #3: Type: text/plain, Size: 8 bytes --]


Kierin

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-07 13:10                   ` Kierin Bell
@ 2024-11-07 13:48                     ` Robert Pluim
  2024-11-07 16:20                       ` Robert Pluim
  0 siblings, 1 reply; 15+ messages in thread
From: Robert Pluim @ 2024-11-07 13:48 UTC (permalink / raw)
  To: Kierin Bell; +Cc: Eli Zaretskii, 74170

>>>>> On Thu, 07 Nov 2024 08:10:59 -0500, Kierin Bell <fernseed@fernseed.me> said:
    Kierin> Yes, GUIDANCE was set to nil and this is a mistake on my part (left over
    Kierin> from the old state transition tables implementation).

    Kierin> Attached is a patch against master fixing this. (Or should I submit a
    Kierin> new bug?)

No need for a new bug. Pushed in your name to master. Thank you for
the contribution.

Robert
-- 





^ permalink raw reply	[flat|nested] 15+ messages in thread

* bug#74170: [PATCH] Add input methods for Northern Iroquoian languages
  2024-11-07 13:48                     ` Robert Pluim
@ 2024-11-07 16:20                       ` Robert Pluim
  0 siblings, 0 replies; 15+ messages in thread
From: Robert Pluim @ 2024-11-07 16:20 UTC (permalink / raw)
  To: Kierin Bell; +Cc: Eli Zaretskii, 74170

tags 74170 fixed
close 74170 31.1
quit

(I forgot to close the bug.)

Closing.
Committed as 04b055797a4 and 63d4c4b9ce4

Robert
-- 





^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-11-07 16:20 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-02  2:34 bug#74170: [PATCH] Add input methods for Northern Iroquoian languages Kierin Bell
2024-11-02  8:16 ` Eli Zaretskii
2024-11-03  3:40   ` Kierin Bell
2024-11-03  3:45     ` Kierin Bell
2024-11-03  7:10       ` Eli Zaretskii
2024-11-03 16:43         ` Kierin Bell
2024-11-03 18:52           ` Eli Zaretskii
2024-11-03 20:46             ` Kierin Bell
2024-11-07  4:07             ` Kierin Bell
2024-11-07  9:25               ` Eli Zaretskii
2024-11-07  9:34                 ` Robert Pluim
2024-11-07 13:10                   ` Kierin Bell
2024-11-07 13:48                     ` Robert Pluim
2024-11-07 16:20                       ` Robert Pluim
2024-11-03 22:11 ` bug#74170: [PATCH] Add input methods for Northern Iroquoian Kierin Bell

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).