;; sa-itrans.mim -- Sanskrit input method with ITRANS method
;; Copyright (C) 2012  Kencihi Handa <handa@m17n.org>

;; This file is part of the m17n database; a sub-part of the m17n
;; library.

;; The m17n library is free software; you can redistribute it and/or
;; modify it under the terms of the GNU Lesser General Public License
;; as published by the Free Software Foundation; either version 2.1 of
;; the License, or (at your option) any later version.

;; The m17n library 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
;; Lesser General Public License for more details.

;; You should have received a copy of the GNU Lesser General Public
;; License along with the m17n library; if not, write to the Free
;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.

;; This file is branched from hi-itrans.mim.

(input-method sa itrans)

(description "Sanskrit input method by ITRANS and Harvard-Kyoto
transliteration systems.

You can use all the standard ITRANS key sequences plus key
sequences such as the below.

  nk->ङ्क्, nkh->ङ्ख्, ng->ङ्ग्, ngh->ङ्घ्
  nch->ञ्च्, nCh->ञ्छ्, nc->ञ्च्, nC->ञ्छ्, nchh->ञ्छ्,
  nj->ञ्ज्, njh->ञ्झ्, nT->ण्ट्, nTh->ण्ठ्, nD->ण्ड्, nDh->ण्ढ्
  c->च्, C->छ्, z->श्, S->ष्, jn->ज्ञ्, R->ऋ
  _->॑, ''->॒

For motivations and further details, see description of hi-itrans.mim.")

(title "क")

(variable (trim-last-halant nil 0)
	  (enable-udatta nil 1))

(include (hi itrans) map)

(map
 (udattta
  ("_" "॒")
  ("''" "॑")))

(state
 (init
  (starter (pushback 1) (shift intermediate))
  (udattta)
  (misc))

 (intermediate
  ;; CANDRA-E-O is set to the character CANDRA E or CANDRA O when "e"
  ;; or "o" is typed, and in that case, if ".c" is typed, the
  ;; character set to CANDRA-E-O is inserted.
  (t (set CANDRA-E-O 0))
  ;; LAST-HALANT-POS is set to the position after a consonat + HALANT
  ;; sequence.  If the following key is for non-letter, that HALANT
  ;; character is removed.
  (consonant (mark LAST-HALANT-POS) (shift second))
  (independent (cond (CANDRA-E-O (shift after-eo)) (1 (shift init))))
  (digit (shift init))
  (danda (shift init))
  (udattta (shift init))
  (backspace)
  (commit-key (shift init)))

 (second
  ;; CANDRA-E-O is set to the character CANDRA E or CANDRA O when "e"
  ;; or "o" is typed, and in that case, if ".c" is typed, the
  ;; character set to CANDRA-E-O is inserted.
  (t (set CANDRA-E-O 0))
  (consonant (mark LAST-HALANT-POS))
  (dependent (cond (CANDRA-E-O (shift after-eo)) (1 (shift init))))
  (danda
   (cond (trim-last-halant (move LAST-HALANT-POS) (delete @-) (move @>)))
   (shift init))
  (udattta
   (cond (trim-last-halant (move LAST-HALANT-POS) (delete @-) (move @>)))
   (shift init))
  (backspace)
  (commit-key (shift init))
  (nil (cond (trim-last-halant (move LAST-HALANT-POS) (delete @-) (move @>)))
       (shift init)))

 (after-eo
  (t (set DOT 0))
  (dot)
  (eo-dot-c (shift init))
  (danda (shift init))
  (udattta (shift init))
  (commit-key (shift init))
  (nil (cond (DOT (delete @-) (pushback 1))) (shift init))))

;; Local Variables:
;; coding: utf-8
;; mode: emacs-lisp
;; End:
