Mercurial > hg > xemacs-beta
diff lisp/symbol-syntax.el @ 219:262b8bb4a523 r20-4b8
Import from CVS: tag r20-4b8
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:09:35 +0200 |
parents | |
children | 70ad99077275 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/symbol-syntax.el Mon Aug 13 10:09:35 2007 +0200 @@ -0,0 +1,129 @@ +;;; symbol-syntax.el --- find chars with symbol syntax + +;; Copyright (C) 1992, 1993, 1997 Free Software Foundation, Inc. +;; Copyright (C) 1995 Sun Microsystems. + +;; Author: JBW, JBW@_CORTEZ +;; Created: Wed Jun 20 15:15:34 1990 +;; Maintainer: XEmacs Development Team +;; Keywords: matching + +;; 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. + +;;; Synched up with: Not in FSF. + +;;; Commentary: + +;; Last modified by: Ben Wing, wing@666.com +;; Last modified on: Mon Oct 2 02:32:05 GMT 1995 + +;;; Code: + +(defvar symbol-syntax-table-alist nil) +;; '((c-mode-syntax-table) +;; (emacs-lisp-mode-syntax-table) +;; (lisp-mode-syntax-table) +;; (text-mode-syntax-table))) + +(defun update-symbol-syntax-table-alist () + (let ((alist symbol-syntax-table-alist) + item) + (while (consp alist) + (cond ((null (car alist)) + (error "Missing alist item")) + ((null (car (car alist))) + (error "Alist item with null car")) + ;; this functionality not used + ((symbolp (setq item (car (car alist)))) + (or (null (cdr (car alist))) + (error "Alist item expected to have null cdr")) + (while (symbolp item) + (setq item (symbol-value item))) + (setcar (car alist) item))) + (cond ((not (syntax-table-p (car (car alist)))) + (error "Alist item car expected to be symbol table")) + ((null (cdr (car alist))) + (setcdr (car alist) + (make-symbol-syntax-table (car (car alist)))))) + (setq alist (cdr alist))))) + +(defun get-symbol-syntax-table (norm-table) + (let (result) + (if (setq result (assq norm-table symbol-syntax-table-alist)) + nil + (update-symbol-syntax-table-alist) + (if (setq result (assq norm-table symbol-syntax-table-alist)) + nil + (setq symbol-syntax-table-alist + (cons (list norm-table) + symbol-syntax-table-alist)) + (update-symbol-syntax-table-alist) + (or (setq result (assq norm-table symbol-syntax-table-alist)) + (error "Syntax table missing from symbol-syntax-table-alist")))) + (or (setq result (cdr result)) + (error "Alist item has null cdr")) + (or (syntax-table-p result) + (error "Non-syntax-table item in alist")) + result)) + +(defun make-symbol-syntax-table (in-table) + (let ((out-table (copy-syntax-table in-table))) + (map-syntax-table + #'(lambda (key value) + (if (eq ?_ (char-syntax-from-code value)) + (put-char-table key (set-char-syntax-in-code value ?w) + out-table)) + nil) + out-table) + out-table)) + +;; stuff for examining contents of syntax tables +;;(show-chars-with-syntax +;; '(c-mode-syntax-table +;; emacs-lisp-mode-syntax-table +;; lisp-mode-syntax-table +;; text-mode-syntax-table) +;; ?_) + +(defun show-chars-with-syntax (tables syntax) + (let ((osyn (syntax-table)) + (schars nil)) + (unwind-protect + (while (consp tables) + (let* ((chars nil) + (table-symbol (car tables)) + (table table-symbol) + (i 0)) + (or (symbolp table-symbol) + (error "bad argument non-symbol")) + (while (symbolp table) + (setq table (symbol-value table))) + (map-syntax-table + #'(lambda (key value) + (if (eq syntax (char-syntax-from-code value)) + (setq chars (cons key chars))) + nil) + table) + (setq schars (cons (list table-symbol (nreverse chars)) + schars))) + (setq tables (cdr tables)))) + (nreverse schars))) + +(provide 'symbol-syntax) + +;;; symbol-syntax.el ends here