# HG changeset patch # User Kenichi Handa # Date 1107305827 0 # Node ID e1f57074406eb69c593266271c7f95144895c107 # Parent 75a481e7d8f167645e62b906bbc70b18fdacef14 (get-upcase-table): New function. (copy-case-table): Copy upcaes table too if non-nil. (set-case-syntax-delims): Maintain upcase table too. (set-case-syntax-pair): Likewise. (set-upcase-syntax, set-downcase-syntax): New functions. (set-case-syntax): Maintain upcase table too. diff -r 75a481e7d8f1 -r e1f57074406e lisp/case-table.el --- a/lisp/case-table.el Tue Feb 01 23:49:46 2005 +0000 +++ b/lisp/case-table.el Wed Feb 02 00:57:07 2005 +0000 @@ -1,6 +1,6 @@ ;;; case-table.el --- code to extend the character set and support case tables -;; Copyright (C) 1988, 1994 Free Software Foundation, Inc. +;; Copyright (C) 1988, 1994, 2005 Free Software Foundation, Inc. ;; Author: Howard Gayle ;; Maintainer: FSF @@ -62,11 +62,26 @@ (describe-vector description) (help-mode))))) +(defun get-upcase-table (case-table) + "Return the upcase table of CASE-TABLE." + (or (char-table-extra-slot case-table 0) + ;; Setup all extra slots of CASE-TABLE by temporarily selecting + ;; it as the standard case table. + (let ((old (standard-case-table))) + (unwind-protect + (progn + (set-standard-case-table case-table) + (char-table-extra-slot case-table 0)) + (or (eq case-table old) + (set-standard-case-table old)))))) + (defun copy-case-table (case-table) - (let ((copy (copy-sequence case-table))) - ;; Clear out the extra slots so that they will be - ;; recomputed from the main (downcase) table. - (set-char-table-extra-slot copy 0 nil) + (let ((copy (copy-sequence case-table)) + (up (char-table-extra-slot case-table 0))) + ;; Clear out the extra slots (except for upcase table) so that + ;; they will be recomputed from the main (downcase) table. + (if up + (set-char-table-extra-slot copy 0 (copy-sequence up))) (set-char-table-extra-slot copy 1 nil) (set-char-table-extra-slot copy 2 nil) copy)) @@ -87,9 +102,11 @@ (setq r (set-case-syntax-1 r)) (aset table l l) (aset table r r) + (let ((up (get-upcase-table table))) + (aset up l l) + (aset up r r)) ;; Clear out the extra slots so that they will be - ;; recomputed from the main (downcase) table. - (set-char-table-extra-slot table 0 nil) + ;; recomputed from the main (downcase) table and upcase table. (set-char-table-extra-slot table 1 nil) (set-char-table-extra-slot table 2 nil) (modify-syntax-entry l (concat "(" (char-to-string r) " ") @@ -103,16 +120,46 @@ that will be used as the downcase part of a case table. It also modifies `standard-syntax-table' to give them the syntax of word constituents." - (unless (= (charset-bytes (char-charset uc)) - (charset-bytes (char-charset lc))) - (error "Can't casify chars with different `charset-bytes' values")) + (setq uc (set-case-syntax-1 uc)) + (setq lc (set-case-syntax-1 lc)) + (aset table uc lc) + (aset table lc lc) + (let ((up (get-upcase-table table))) + (aset up uc uc) + (aset up lc uc)) + ;; Clear out the extra slots so that they will be + ;; recomputed from the main (downcase) table and upcase table. + (set-char-table-extra-slot table 1 nil) + (set-char-table-extra-slot table 2 nil) + (modify-syntax-entry lc "w " (standard-syntax-table)) + (modify-syntax-entry uc "w " (standard-syntax-table))) + +(defun set-upcase-syntax (uc lc table) + "Make character UC an upcase of character LC. +It also modifies `standard-syntax-table' to give them the syntax of +word constituents." + (setq uc (set-case-syntax-1 uc)) + (setq lc (set-case-syntax-1 lc)) + (let ((up (get-upcase-table table))) + (aset up uc uc) + (aset up lc uc)) + ;; Clear out the extra slots so that they will be + ;; recomputed from the main (downcase) table and upcase table. + (set-char-table-extra-slot table 1 nil) + (set-char-table-extra-slot table 2 nil) + (modify-syntax-entry lc "w " (standard-syntax-table)) + (modify-syntax-entry uc "w " (standard-syntax-table))) + +(defun set-downcase-syntax (uc lc table) + "Make character LC a downcase of character UC. +It also modifies `standard-syntax-table' to give them the syntax of +word constituents." (setq uc (set-case-syntax-1 uc)) (setq lc (set-case-syntax-1 lc)) (aset table uc lc) (aset table lc lc) ;; Clear out the extra slots so that they will be - ;; recomputed from the main (downcase) table. - (set-char-table-extra-slot table 0 nil) + ;; recomputed from the main (downcase) table and upcase table. (set-char-table-extra-slot table 1 nil) (set-char-table-extra-slot table 2 nil) (modify-syntax-entry lc "w " (standard-syntax-table)) @@ -126,9 +173,10 @@ SYNTAX should be \" \", \"w\", \".\" or \"_\"." (setq c (set-case-syntax-1 c)) (aset table c c) + (let ((up (get-upcase-table table))) + (aset up c c)) ;; Clear out the extra slots so that they will be - ;; recomputed from the main (downcase) table. - (set-char-table-extra-slot table 0 nil) + ;; recomputed from the main (downcase) table and upcase table. (set-char-table-extra-slot table 1 nil) (set-char-table-extra-slot table 2 nil) (modify-syntax-entry c syntax (standard-syntax-table)))