emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Ogham input method


From: David De La Harpe Golden
Subject: Ogham input method
Date: Thu, 29 May 2008 09:42:47 +0100
User-agent: Mozilla-Thunderbird 2.0.0.14 (X11/20080509)

Ogham is an old irish alphabet that is in unicode
http://en.wikipedia.org/wiki/Ogham
http://www.omniglot.com/writing/ogham.htm

Not exactly a complicated input method or alphabet, nor particularly
vital to support (modern irish is usually written in latin alphabet),
but turned out to be easy to do.

The "smart" ogham vs. ascii space handling (ethiopic does something
conceptually similar but more complicated) is probably wrongly
implemented (though it works for me), but it's nonessential anyway
("-" is also mapped to ogham space, so it might be okay to leave space
alone rather than trying the "smart" space thing).







;;; ogham.el --- Quail method for Ogham alphabet -*- coding: utf-8 -*-

;; Copyright (C) 2008
;;   David De La Harpe Golden

;; Author: David De La Harpe Golden <address@hidden>
;; Keywords: i18n

;; ogham.el 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.

;; ogham.el 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 ogham.el.  If not, see <http://www.gnu.org/licenses/>.

;;; Commentary:

;; Ogham, old irish alphabet, now in unicode.

;;; Code:

(require 'quail)

(defun ogham-insert-space ()
  "Insert an ascii or ogham space.
If point is preceded by an ogham character other than an
ogham ending (reversed) feather mark (like -<), then insert
an ogham space mark, otherwise insert an ascii space."
  (interactive)
  (cond
   ((memq (preceding-char)
          '(?  ?ᚁ ?ᚂ ?ᚃ ?ᚄ ?ᚅ ?ᚆ ?ᚇ ?ᚈ ?ᚉ ?ᚊ
               ?ᚋ ?ᚌ ?ᚍ ?ᚎ ?ᚏ ?ᚐ ?ᚑ ?ᚒ ?ᚓ ?ᚔ
               ?ᚕ ?ᚖ ?ᚗ ?ᚘ ?ᚙ ?ᚚ ?᚛)) ;; excludes this: ?᚜
    (insert ? ))
   (t
    (insert #x20))))

(defun ogham-activate-ogham-space ()
  (when (string-equal (car quail-current-package) "ogham")
    (local-set-key " " 'ogham-insert-space)))

(defun ogham-inactivate-ogham-space ()
  (when (string-equal (car quail-current-package) "ogham")
    (local-unset-key " ")))

;; called at end of this file
(defun ogham-install-quail-hooks ()
  "Installs quail hooks for smart ogham space handling."
  (interactive)
  (add-hook 'quail-activate-hook 'ogham-activate-ogham-space)
  (add-hook 'quail-inactivate-hook 'ogham-inactivate-ogham-space))

(defun ogham-remove-quail-hooks ()
  "Removes quail hooks for smart ogham space handling."
  (interactive)
  (remove-hook 'quail-activate-hook 'ogham-activate-ogham-space)
  (remove-hook 'quail-inactivate-hook 'ogham-inactivate-ogham-space))

(quail-define-package
 "ogham" "Irish"
 "᚛ᚑ᚜"
 t
 "Ogham (old Irish alphabet) input method (see Latin methods for modern Irish)

Forfeda input as dipthongs (late/manuscript ogham).

᚛ ᚁ ᚂ ᚃ ᚄ ᚅ ᚜  >-b-l-f-s-n-<
᚛ ᚆ ᚇ ᚈ ᚉ ᚊ ᚜  >-h-d-t-c-q-<
᚛ ᚋ ᚌ ᚍ ᚎ ᚏ ᚜  >-m-g-ng-z-r-<
᚛ ᚐ ᚑ ᚒ ᚓ ᚔ ᚜  >-a-o-u-e-i-<

᚛ ᚕ ᚖ ᚗ ᚘ ᚙ ᚜  >-ea-oi-ui-ia-ae-<
᚛ ᚚ ᚜  >-p-<

᚛  >
᚜  <
   - or sometimes SPC (see below).

SPC keypresses are handled specially:

SPC will insert an ogham space mark (` ') when preceded by an
ogham character other than an ogham ending (reversed) feather
mark (`᚜'), otherise it will insert an ascii space (` ').

Warning: If your ogham font is in a `stemless' ogham style,
the ogham space mark may, logically enough, appear as a blank
character similar to ascii space, rather than as a dash-like
character.
"
nil t nil nil nil nil nil nil nil nil t)

;; helper to generate template to be filled in
;; (dotimes (i #x1d)
;;  (insert "(\"\" ?")
;;  (insert-char (+ i #x1680) 1)
;;  (insert ")\n"))

(quail-define-rules
 ("-" ? )
 ("b" ?ᚁ)
 ("l" ?ᚂ)
 ("f" ?ᚃ)
 ("s" ?ᚄ)
 ("n" ?ᚅ)
 ("h" ?ᚆ)
 ("d" ?ᚇ)
 ("t" ?ᚈ)
 ("c" ?ᚉ)
 ("q" ?ᚊ)
 ("m" ?ᚋ)
 ("g" ?ᚌ)
 ("ng" ?ᚍ)
 ("z" ?ᚎ)
 ("r" ?ᚏ)
 ("a" ?ᚐ)
 ("o" ?ᚑ)
 ("u" ?ᚒ)
 ("e" ?ᚓ)
 ("i" ?ᚔ)
 ("ea" ?ᚕ)
 ("oi" ?ᚖ)
 ("ui" ?ᚗ)
 ("ia" ?ᚘ)
 ("ae" ?ᚙ)
 ("p" ?ᚚ)
 (">" ?᚛)
 ("<" ?᚜)
)

(ogham-install-quail-hooks)

(provide 'ogham)

;;; ogham.el ends here

reply via email to

[Prev in Thread] Current Thread [Next in Thread]