446
+ − 1 /* XEmacs routines to deal with case tables.
+ − 2 Copyright (C) 2000 Yoshiki Hayashi.
826
+ − 3 Copyright (C) 2002 Ben Wing.
446
+ − 4 This file is part of XEmacs.
+ − 5
+ − 6 XEmacs is free software; you can redistribute it and/or modify it
+ − 7 under the terms of the GNU General Public License as published by the
+ − 8 Free Software Foundation; either version 2, or (at your option) any
+ − 9 later version.
+ − 10
+ − 11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ − 12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ − 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ − 14 for more details.
+ − 15
+ − 16 You should have received a copy of the GNU General Public License
+ − 17 along with XEmacs; see the file COPYING. If not, write to
+ − 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ − 19 Boston, MA 02111-1307, USA. */
+ − 20
+ − 21 /* Synched up with: Not in FSF. */
+ − 22
+ − 23 #ifndef INCLUDED_casetab_h_
+ − 24 #define INCLUDED_casetab_h_
+ − 25
+ − 26 struct Lisp_Case_Table
+ − 27 {
3017
+ − 28 struct LCRECORD_HEADER header;
446
+ − 29 Lisp_Object downcase_table;
+ − 30 Lisp_Object upcase_table;
+ − 31 Lisp_Object case_canon_table;
+ − 32 Lisp_Object case_eqv_table;
826
+ − 33 int dirty;
446
+ − 34 };
+ − 35 typedef struct Lisp_Case_Table Lisp_Case_Table;
+ − 36
+ − 37 DECLARE_LRECORD (case_table, Lisp_Case_Table);
+ − 38 #define XCASE_TABLE(x) XRECORD (x, case_table, Lisp_Case_Table)
617
+ − 39 #define wrap_case_table(p) wrap_record (p, case_table)
446
+ − 40 #define CASE_TABLEP(x) RECORDP (x, case_table)
+ − 41 #define CHECK_CASE_TABLE(x) CHECK_RECORD (x, case_table)
+ − 42 #define CONCHECK_CASE_TABLE(x) CONCHECK_RECORD (x, case_table)
+ − 43
826
+ − 44 void recompute_case_table (Lisp_Object casetab);
+ − 45
+ − 46 DECLARE_INLINE_HEADER (
+ − 47 Lisp_Case_Table *
+ − 48 XCASE_TABLE_UPDATE (Lisp_Object table)
+ − 49 )
+ − 50 {
+ − 51 Lisp_Case_Table *ct = XCASE_TABLE (table);
+ − 52 /* If the table is dirty (changes have been made without ancillary
+ − 53 structures updated), recompute first. */
+ − 54 if (ct->dirty)
+ − 55 recompute_case_table (table);
+ − 56 return ct;
+ − 57 }
+ − 58
446
+ − 59 #define CASE_TABLE_DOWNCASE(ct) ((ct)->downcase_table)
+ − 60 #define CASE_TABLE_UPCASE(ct) ((ct)->upcase_table)
+ − 61 #define CASE_TABLE_CANON(ct) ((ct)->case_canon_table)
+ − 62 #define CASE_TABLE_EQV(ct) ((ct)->case_eqv_table)
+ − 63 #define XCASE_TABLE_DOWNCASE(ct) (XCASE_TABLE (ct)->downcase_table)
+ − 64 #define XCASE_TABLE_UPCASE(ct) (XCASE_TABLE (ct)->upcase_table)
826
+ − 65 /* Only do automatic updating for canon and eqv, which are the two that are
+ − 66 automatically computed and that are not up to date. These are not
+ − 67 normally used by the simple case routines. canon is used by
+ − 68 compare-buffer-substrings when case-insensitive and by the regex
+ − 69 routines, and eqv is used only by the Boyer-Moore search routines. */
+ − 70 #define XCASE_TABLE_CANON(ct) (XCASE_TABLE_UPDATE (ct)->case_canon_table)
+ − 71 #define XCASE_TABLE_EQV(ct) (XCASE_TABLE_UPDATE (ct)->case_eqv_table)
446
+ − 72
+ − 73 #define SET_CASE_TABLE_DOWNCASE(ct, p) ((ct)->downcase_table = p)
+ − 74 #define SET_CASE_TABLE_UPCASE(ct, p) ((ct)->upcase_table = p)
+ − 75 #define SET_CASE_TABLE_CANON(ct, p) ((ct)->case_canon_table = p)
+ − 76 #define SET_CASE_TABLE_EQV(ct, p) ((ct)->case_eqv_table = p)
+ − 77 #define XSET_CASE_TABLE_DOWNCASE(ct, p) \
+ − 78 SET_CASE_TABLE_DOWNCASE (XCASE_TABLE (ct), p)
+ − 79 #define XSET_CASE_TABLE_UPCASE(ct, p) \
+ − 80 SET_CASE_TABLE_UPCASE (XCASE_TABLE (ct), p)
+ − 81 #define XSET_CASE_TABLE_CANON(ct, p) \
+ − 82 SET_CASE_TABLE_CANON (XCASE_TABLE (ct), p)
+ − 83 #define XSET_CASE_TABLE_EQV(ct, p) \
+ − 84 SET_CASE_TABLE_EQV (XCASE_TABLE (ct), p)
+ − 85
+ − 86 extern Lisp_Object Vstandard_case_table;
+ − 87
+ − 88 #endif /* INCLUDED_casetab_h_ */