;;; ;;; emu-nemacs.el --- Mule 2 emulation module for NEmacs ;;; ;;; Copyright (C) 1995 Free Software Foundation, Inc. ;;; Copyright (C) 1993 .. 1996 MORIOKA Tomohiko ;;; ;;; Author: MORIOKA Tomohiko ;;; modified by KOBAYASHI Shuhei ;;; Version: ;;; $Id: emu-nemacs.el,v 7.19 1996/05/09 15:06:53 morioka Exp $ ;;; Keywords: emulation, compatibility, NEmacs, Mule ;;; ;;; This file is part of tl (Tiny Library). ;;; ;;; 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 2, 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, write to the Free Software ;;; Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ;;; ;;; Code: (require 'emu-18) ;;; @ character set ;;; (defconst lc-ascii 0) (defconst lc-jp 146) (defun char-charset (chr) "Return the character set of char CHR. \[emu-nemacs.el; XEmacs 20 emulating function]" (if (< chr 128) lc-ascii lc-jp)) (defalias 'char-leading-char 'char-charset) ;;; @ coding system ;;; (defconst *noconv* 0) (defconst *sjis* 1) (defconst *junet* 2) (defconst *ctext* 2) (defconst *internal* 3) (defconst *euc-japan* 3) (defun character-encode-string (str coding-system) "Encode the string STR which is encoded in CODING-SYSTEM. [emu-nemacs.el]" (convert-string-kanji-code str 3 coding-system) ) (defun character-decode-string (str coding-system) "Decode the string STR which is encoded in CODING-SYSTEM. [emu-nemacs.el]" (convert-string-kanji-code str coding-system 3) ) (defun character-encode-region (start end coding-system) "Encode the text between START and END which is encoded in CODING-SYSTEM. [emu-nemacs.el]" (save-excursion (save-restriction (narrow-to-region beg end) (convert-region-kanji-code start end 3 coding-system) ))) (defun character-decode-region (start end coding-system) "Decode the text between START and END which is encoded in CODING-SYSTEM. [emu-nemacs.el]" (save-excursion (save-restriction (narrow-to-region beg end) (convert-region-kanji-code start end coding-system 3) ))) (defun code-convert-string (str ic oc) "Convert code in STRING from SOURCE code to TARGET code, On successful converion, returns the result string, else returns nil. [emu-nemacs.el; Mule emulating function]" (if (not (eq ic oc)) (convert-string-kanji-code str ic oc) str)) (defun code-convert-region (beg end ic oc) "Convert code of the text between BEGIN and END from SOURCE to TARGET. On successful conversion returns t, else returns nil. [emu-nemacs.el; Mule emulating function]" (if (/= ic oc) (save-excursion (save-restriction (narrow-to-region beg end) (convert-region-kanji-code beg end ic oc) )))) (defun code-detect-region (start end) "Detect coding-system of the text in the region between START and END. \[emu-nemacs.el; Mule emulating function]" (if (save-excursion (save-restriction (narrow-to-region start end) (goto-char start) (re-search-forward "[\200-\377]" nil t) )) *euc-japan* )) (defun set-file-coding-system (coding-system &optional force) (set-kanji-fileio-code coding-system) ) ;;; @ character and string ;;; (defun char-bytes (chr) "Return number of bytes CHAR will occupy in a buffer. \[emu-nemacs.el; Mule emulating function]" (if (< chr 128) 1 2)) (defun char-width (chr) "Return number of columns CHAR will occupy when displayed. \[emu-nemacs.el; Mule emulating function]" (if (< chr 128) 1 2)) (defun string-width (str) "Return number of columns STRING will occupy. \[emu-nemacs.el; Mule emulating function]" (length str)) (defun sref (str idx) "Return the character in STR at index IDX. \[emu-nemacs.el; Mule emulating function]" (let ((chr (aref str idx))) (if (< chr 128) chr (logior (lsh (aref str (1+ idx)) 8) chr) ))) (defun string-to-char-list (str) (let ((i 0)(len (length str)) dest chr) (while (< i len) (setq chr (aref str i)) (if (>= chr 128) (setq i (1+ i) chr (+ (lsh chr 8) (aref str i)) )) (setq dest (cons chr dest)) (setq i (1+ i)) ) (reverse dest) )) (fset 'string-to-int-list (symbol-function 'string-to-char-list)) (defun find-charset-string (str) "Return a list of leading-chars in the string. \[emu-nemacs.el; Mule emulating function]" (if (string-match "[\200-\377]" str) (list lc-jp) )) (defun find-charset-region (start end) "Return a list of leading-chars in the region between START and END. \[emu-nemacs.el; Mule emulating function]" (if (save-excursion (save-restriction (narrow-to-region start end) (goto-char start) (re-search-forward "[\200-\377]" nil t) )) (list lc-jp) )) (defun check-ASCII-string (str) (let ((i 0) len) (setq len (length str)) (catch 'label (while (< i len) (if (>= (elt str i) 128) (throw 'label nil)) (setq i (+ i 1)) ) str))) ;;; Imported from Mule-2.3 (defun truncate-string (str width &optional start-column) "Truncate STR to fit in WIDTH columns. Optional non-nil arg START-COLUMN specifies the starting column. \[emu-mule.el; Mule 2.3 emulating function]" (or start-column (setq start-column 0)) (let ((max-width (string-width str)) (len (length str)) (from 0) (column 0) to-prev to ch) (if (>= width max-width) (setq width max-width)) (if (>= start-column width) "" (while (< column start-column) (setq ch (aref str from) column (+ column (char-width ch)) from (+ from (char-bytes ch)))) (if (< width max-width) (progn (setq to from) (while (<= column width) (setq ch (aref str to) column (+ column (char-width ch)) to-prev to to (+ to (char-bytes ch)))) (setq to to-prev))) (substring str from to)))) ;;; @ text property emulation ;;; (setq tl:available-face-attribute-alist '( ;;(bold . inversed-region) (italic . underlined-region) (underline . underlined-region) )) ;; by YAMATE Keiichirou 1994/10/28 (defun attribute-add-narrow-attribute (attr from to) (or (consp (symbol-value attr)) (set attr (list 1))) (let* ((attr-value (symbol-value attr)) (len (car attr-value)) (posfrom 1) posto) (while (and (< posfrom len) (> from (nth posfrom attr-value))) (setq posfrom (1+ posfrom))) (setq posto posfrom) (while (and (< posto len) (> to (nth posto attr-value))) (setq posto (1+ posto))) (if (= posto posfrom) (if (= (% posto 2) 1) (if (and (< to len) (= to (nth posto attr-value))) (set-marker (nth posto attr-value) from) (setcdr (nthcdr (1- posfrom) attr-value) (cons (set-marker-type (set-marker (make-marker) from) 'point-type) (cons (set-marker-type (set-marker (make-marker) to) nil) (nthcdr posto attr-value)))) (setcar attr-value (+ len 2)))) (if (= (% posfrom 2) 0) (setq posfrom (1- posfrom)) (set-marker (nth posfrom attr-value) from)) (if (= (% posto 2) 0) nil (setq posto (1- posto)) (set-marker (nth posto attr-value) to)) (setcdr (nthcdr posfrom attr-value) (nthcdr posto attr-value))))) (defalias 'tl:make-overlay 'cons) (defun tl:overlay-put (overlay prop value) (let ((ret (and (eq prop 'face) (assq value tl:available-face-attribute-alist) ))) (if ret (attribute-add-narrow-attribute (cdr ret) (car overlay)(cdr overlay)) ))) ;;; @ end ;;; (provide 'emu-nemacs) ;;; emu-nemacs.el ends here