Mercurial > hg > xemacs-beta
diff src/casetab.c @ 5118:e0db3c197671 ben-lisp-object
merge up to latest default branch, doesn't compile yet
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sat, 26 Dec 2009 21:18:49 -0600 |
parents | 3742ea8250b5 4ee73bbe4f8e |
children | b5df3737028a |
line wrap: on
line diff
--- a/src/casetab.c Sat Dec 26 00:20:27 2009 -0600 +++ b/src/casetab.c Sat Dec 26 21:18:49 2009 -0600 @@ -48,13 +48,28 @@ or vice versa, both characters will have the same entry in the canon table. - (4) `equiv' lists the "equivalence classes" defined by `canon'. Imagine + (4) `eqv' lists the "equivalence classes" defined by `canon'. Imagine that all characters are divided into groups having the same `canon' - entry; these groups are called "equivalence classes" and `equiv' lists - them by linking the characters in each equivalence class together in a - circular list. + entry; these groups are called "equivalence classes" and `eqv' lists them + by linking the characters in each equivalence class together in a + circular list. That is, to find out all all the members of a given char's + equivalence classe, you need something like the following code: - `canon' is used when doing case-insensitive comparisons. `equiv' is + (let* ((char ?i) + (original-char char) + (standard-case-eqv (case-table-eqv (standard-case-table)))) + (loop + with res = (list char) + until (eq (setq char (get-char-table char standard-case-eqv)) + original-char) + do (push char res) + finally return res)) + + (Where #'case-table-eqv doesn't yet exist, and probably never will, given + that the C code needs to keep it in a consistent state so Lisp can't mess + around with it.) + + `canon' is used when doing case-insensitive comparisons. `eqv' is used in the Boyer-Moore search code. */ @@ -107,9 +122,9 @@ }; -DEFINE_LISP_OBJECT("case-table", case_table, - mark_case_table, print_case_table, 0, - 0, 0, case_table_description, Lisp_Case_Table); +DEFINE_DUMPABLE_LISP_OBJECT ("case-table", case_table, + mark_case_table, print_case_table, 0, + 0, 0, case_table_description, Lisp_Case_Table); static Lisp_Object allocate_case_table (int init_tables)