*** empty log message ***
[bpt/emacs.git] / lisp / language / indian.el
index 7d13eb4..d7b4c36 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1999, 2001 Free Software Foundation, Inc.
 
-;; Maintainer:  KAWABATA, Taichi <batta@beige.ocn.ne.jp>
+;; Maintainer:  KAWABATA, Taichi <kawabata@m17n.org>
 ;; Keywords:   multilingual, i18n, Indian
 
 ;; This file is part of GNU Emacs.
 
 (define-coding-system-alias 'devanagari 'in-is13194-devanagari)
 
+(defvar indian-font-foundry 'cdac
+  "Font foundry for Indian characters.
+Currently supported foundries are `cdac' and `akruti'.")
+
+(defvar indian-script-language-alist
+  "Alist of Indian scripts vs the corresponding language list and font foundry.
+Each element has this form:
+
+  (SCRIPT LANGUAGE-LIST FONT-FOUNDRY)
+
+SCRIPT is one of Indian script names.
+
+LANGUAGE-LIST is a list of Indian langauge names SCRIPT is used for.
+The list is in the priority order.
+
+FONT-FOUNDRY is a font foundry representing a group of Indian
+fonts.  If the value is nil, the value of `indian-font-foundry'
+is used."
+  '((devanagari (hindi sanskrit) nil)
+    (bengali (bengali assamese) nil)
+    (gurmukhi (punjabi) nil)
+    (gujarati (gujarati) nil)
+    (oriya (oriya) nil)
+    (tamil (tamil) nil)
+    (telugu (telugu) nil)
+    (kannada (kannada) nil)
+    (malayalam (malayalam) nil)))
+
+(defconst indian-font-char-index-table
+  '(                                   ; for which language(s)
+    ;; CDAC fonts
+    (#x0000 . cdac:dv-ttsurekh)                ; hindi, etc
+    (#x0100 . cdac:sd-ttsurekh)                ; sanskrit
+    (#x0200 . cdac:bn-ttdurga)         ; bengali
+    (#x0300 . cdac:tm-ttvalluvar)      ; tamil
+    (#x0400 . cdac:tl-tthemalatha)     ; telugu
+    (#x0500 . cdac:as-ttdurga)         ; assamese
+    (#x0600 . cdac:or-ttsarala)                ; oriya
+    (#x0700 . cdac:kn-ttuma)           ; kannada
+    (#x0800 . cdac:ml-ttkarthika)      ; malayalam
+    (#x0900 . cdac:gj-ttavantika)      ; gujarati
+    (#x0A00 . cdac:pn-ttamar)          ; punjabi
+
+    ;; AKRUTI fonts
+    (#x0B00 . akruti:dev)              ; hindi, etc
+    (#x0C00 . akruti:bng)              ; bengali
+    (#x0D00 . akruti:pnj)              ; punjabi
+    (#x0E00 . akruti:guj)              ; gujarati
+    (#x0F00 . akruti:ori)              ; oriya
+    (#x1000 . akruti:tml)              ; tamil
+    (#x1100 . akruti:tlg)              ; telugu
+    (#x1200 . akruti:knd)              ; kannada
+    (#x1300 . akruti:mal)              ; malayalam
+    )
+  "Aliat of indices of `indian-glyph' character vs Indian font identifiers.
+Each element has this form: (INDEX . FONT-IDENTIFIER)
+
+INDEX is an index number of the first character in the charset
+`indian-glyph' assigned for glyphs in the font specified by
+FONT-IDENTIFIER.  Currently FONT-IDENTIFIERs are defined for CDAC
+and AKRUTI font groups.")
+  
+(defun indian-font-char (index font-identifier)
+  "Return character of charset `indian-glyph' made from glyph index INDEX.
+FONT-IDENTIFIER is an identifier of an Indian font listed in the
+variable `indian-font-char-index-table'.  It specifies which
+font INDEX is for."
+  (if (or (< index 0) (> index 255))
+      (error "Invalid glyph index: %d" index))
+  (let ((start (car (rassq font-identifier indian-font-char-index-table))))
+    (if (not start)
+       (error "Unknown font identifier: %s" font-identifier))
+    (setq index (+ start index))
+    (make-char 'indian-glyph (+ (/ index 96) 32) (+ (% index 96) 32))))
+
+;; Return a range of characters (cons of min and max character) of the
+;; charset `indian-glyph' for displaying SCRIPT in LANGUAGE by a font
+;; of FOUNDRY.
+
+(defun indian-font-char-range (font-identifier)
+  (cons (indian-font-char 0 font-identifier)
+       (indian-font-char 255 font-identifier)))
+        
+(defvar indian-script-table
+  '[
+    devanagari
+    sanskrit
+    bengali
+    tamil
+    telugu
+    assamese
+    oriya
+    kannada
+    malayalam
+    gujarati
+    punjabi
+    ]
+  "Vector of Indian script names.")
+
+(let ((len (length indian-script-table))
+      (i 0))
+  (while (< i len)
+    (put (aref indian-script-table i) 'indian-glyph-code-offset (* 256 i))
+    (setq i (1+ i))))
+
 (defvar indian-default-script 'devanagari
   "Default script for Indian languages.
 Each Indian language environment sets this value