;;; latin-euro-latin7.el --- Define language environment -*- coding: iso-2022-7 -*-

;; Copyright (C) 2002 Free Software Foundation, Inc

;; Author: Stephen J. Turnbull
;; Keywords: mule, charsets
;; Created: 2002 March 7 (as latin-unity-latin7.el)
;; Last-modified: 2005 February 7

;; This file is part of XEmacs.

;; XEmacs 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 2, or (at your option)
;; any later version.

;; XEmacs 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 XEmacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.


;;; Commentary:

;; Provides the latin-7 language environment, character set, and coding
;; system.

;;; Code:

(defvar latin-euro-recognize-safe-charsets
  (condition-case nil
      (progn
	(coding-system-property (find-coding-system 'iso-8859-1-unix)
				'safe-charsets)
	t)
    (error nil))
  "t if this XEmacs understands the `safe-charsets' coding-system property.")

;; define ISO-8859-13 for XEmacs 21.4 and earlier
(unless (find-charset 'latin-iso8859-13)
  ;; Create character set
  (make-charset
   'latin-iso8859-13 "ISO8859-13 (Latin 7)"
   '(short-name "Latin-7"
     long-name "ISO8859-13 (Latin 7)"
     registry "iso8859-13"
     dimension 1
     columns 1
     chars 96
     final ?Y
     graphic 1
     direction l2r))

  ;; For syntax of Latin-7 characters.
  (loop for c from 64 to 127		; from ',A@(B' to ',A(B'
    do (modify-syntax-entry (make-char 'latin-iso8859-13 c) "w"))
  (loop for c in '(#xA8 #xAA #xAF #xB8 #xBA #xBF)
    do (modify-syntax-entry (make-char 'latin-iso8859-13 c) "w"))
  (modify-syntax-entry (make-char 'latin-iso8859-13 32) "w") ; no-break space
  (modify-syntax-entry (make-char 'latin-iso8859-13 87) "_") ; multiply
  (modify-syntax-entry (make-char 'latin-iso8859-13 119) "_") ; divide
  (modify-syntax-entry (make-char 'latin-iso8859-13 127) ".")) ; right squote

(let ((table (standard-case-table)))
  (mapc (lambda (pair)
	  (put-case-table-pair (make-char 'latin-iso8859-13 (car pair))
			       (make-char 'latin-iso8859-13 (cdr pair))
			       table))
	'((#xA8 . #xB8) (#xAA . #xBA) (#xAF . #xBF)))
  (let ((i #xC0))
    (while (< i #xDF)
      (unless (= i #xD7)
	(put-case-table-pair (make-char 'latin-iso8859-13 i)
			     (make-char 'latin-iso8859-13 (+ i #x20))
			     table))
      (setq i (1+ i))))) 

(unless (find-coding-system 'iso-8859-13)
  ;; Create coding system
  (make-coding-system
   'iso-8859-13 'iso2022 "MIME ISO-8859-13"
   `(charset-g0 ascii
     charset-g1 latin-iso8859-13
     charset-g2 t			; grrr
     charset-g3 t			; grrr
     mnemonic "MIME/Ltn-7"
     ,@(if latin-euro-recognize-safe-charsets
           '(safe-charsets (ascii control-1 latin-iso8859-13))))))

(unless (assoc "Latin-7" language-info-alist)
  (defun setup-latin7-environment ()
    "Set up multilingual environment (MULE) for Baltic Rim Latin-7 users."
    (interactive)
    (set-language-environment "Latin-7"))

  (set-language-info-alist "Latin-7"
			   `((charset ascii latin-iso8859-13)
			     (coding-system iso-8859-13)
			     (coding-priority iso-8859-13)
			     (input-method . "latin-7-prefix")
			     (sample-text . ,(format "\
Hello, Hej, Tere, Hei, Bonjour, Gr%c%c Gott, Ciao, %cHola!"
						     ;; SMALL U WITH UMLAUT
						     (make-char
						      'latin-iso8859-13 #x7C)
						     ;; GERMAN SHARP S
						     (make-char
						      'latin-iso8859-13 #x5F)
						     ;; INVERTED EXCLAMATION
						     ;; MARK
						     (make-char
						      'latin-iso8859-13 #x21)))
			     (documentation . "\
This is a generic language environment for Latin-7 (ISO-8859-13).  It
supports the Baltic Rim languages."))
                           '("Baltic Rim")))

(provide 'latin-euro-latin7)

;;; end of latin-euro-latin7.el
