annotate lisp/emacs-lisp/syntax.el @ 50715:46229d46cbeb

Major rewrite. The code is reordered, cleaner and faster. Introduced new options to automatically cleanup the recent list, and to handle filename transformation (for example to use true filenames). (recentf-version): New constant. (recentf-save-file-header): Moved. (recentf-data-cache): New variable. (recentf-update-menu-p, recentf-initialized-p): Removed. (recentf-menu-customization-changed): Moved. Doc fix. (recentf-max-saved-items): Doc fix. (recentf-save-file): Doc fix. No more expand filename here. (recentf-exclude, recentf-menu-action) (recentf-menu-filter): Doc fix. (recentf-menu-append-commands-flag): Renamed from... (recentf-menu-append-commands-p): Made obsolete. (recentf-keep-non-readable-files-flag): Renamed from... (recentf-keep-non-readable-files-p): Made obsolete. (recentf-auto-cleanup, recentf-filename-handler): New options. (recentf-string-equal, recentf-string-lessp) (recentf-string-member): New functions. (recentf-trunc-list): Moved. (recentf-dump-variable): Moved. Better code and output format. (recentf-auto-cleanup-timer): New variable. (recentf-auto-cleanup): New function. (recentf-push, recentf-expand-file-name): New functions. (recentf-add-file): In-lined. Use above functions. (recentf-remove-if-non-readable): In-lined. Expand file name. (recentf-find-file): Use `recentf-remove-if-non-readable'. (recentf-directory-compare): Moved. Use `recentf-string-equal' and `recentf-string-lessp' to do comparisons. (recentf-menu-items-for-commands) (recentf-menu-filter-commands): Moved. (recentf-elements, recentf-make-menu-element) (recentf-menu-element-item, recentf-menu-element-value) (recentf-set-menu-element-item, recentf-set-menu-element-value) (recentf-sub-menu-element-p, recentf-make-default-menu-element) (recentf-menu-elements): In-lined. Some doc fix. (recentf-apply-menu-filter): Better code. (recentf-make-menu-items): Doc fix. Use `recentf-menu-append-commands-flag'. (recentf-make-menu-item): In-lined. Better code. (recentf-clear-data): New function. (recentf-sort-ascending, recentf-sort-descending) (recentf-sort-basenames-ascending) (recentf-sort-basenames-descending) (recentf-sort-directories-ascending) (recentf-sort-directories-descending) (recentf-show-basenames-ascending) (recentf-show-basenames-descending: In-lined. Better code. Some doc fix. (recentf-show-basenames) (recentf-relative-filter): Better code. Doc fix. (recentf-arrange-by-rule-subfilter): Doc fix. Improved :set code. (recentf-match-rule-p): Use filename instead of file-path. (recentf-arrange-by-rule, recentf-build-mode-rules) (recentf-arrange-by-mode, recentf-build-dir-rules) (recentf-file-name-nondir) (recentf-filter-changer-alist): Some doc fix and code cleanup. (recentf-filter-changer-goto-next): Doc fix. Call `recentf-clear-data'. (recentf-filter-changer-get-current) (recentf-filter-changer-get-next): In-lined. Doc fix and better code. (recentf-filter-changer): Doc fix and better code. (recentf-cancel-dialog): Doc fix. (recentf-dialog-mode-map): Initialized in defvar. (recentf-dialog-mode): Doc fix. (recentf-track-opened-file): Renamed from... (recentf-add-file-hook): Removed. (recentf-track-closed-file): Renamed from... (recentf-remove-file-hook): Removed. (recentf-update-menu-hook): Removed. Replaced by... (recentf-update-menu): New. Better catch unnecessary updates. Display a message on error. (recentf-used-hooks): New constant. (recentf-enabled-p): New function. (recentf-edit-selected-items) (recentf-open-files-action) (recentf-open-files-item-shift): Doc fix. (recentf-edit-list-action) (recentf-open-files-item): Doc fix. Code cleanup. (recentf-edit-list, recentf-open-files) (recentf-open-more-files): Likewise. Removed autoload cookie. (recentf-save-list, recentf-cleanup): Likewise. Moved. (recentf-load-list): New command. (recentf-mode): Better code. Does nothing if enabling the already enabled mode.
author Juanma Barranquero <lekktu@gmail.com>
date Sat, 26 Apr 2003 23:41:59 +0000
parents 0d8b17d428b5
children 9bf93e387b5e d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45078
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 41515
diff changeset
1 ;;; syntax.el --- helper functions to find syntactic context
39756
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
2
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
3 ;; Copyright (C) 2000 Free Software Foundation, Inc.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
4
45078
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 41515
diff changeset
5 ;; Maintainer: FSF
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 41515
diff changeset
6 ;; Keywords: internal
829beb9a6a4b Follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 41515
diff changeset
7
39756
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
9
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
13 ;; any later version.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
14
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
18 ;; GNU General Public License for more details.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
19
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
24
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
25 ;;; Commentary:
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
26
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
27 ;; The main exported function is `syntax-ppss'. You might also need
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
28 ;; to call `syntax-ppss-after-change-function' or to add it to
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
29 ;; after-change-functions'(although this is automatically done by
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
30 ;; syntax-ppss when needed, but that might fail if syntax-ppss is
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
31 ;; called in a context where after-change-functions is temporarily
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
32 ;; let-bound to nil).
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
33
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
34 ;;; Todo:
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
35
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
36 ;; - do something about the case where the syntax-table is changed.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
37 ;; This typically happens with tex-mode and its `$' operator.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
38 ;; - move font-lock-syntactic-keywords in here. Then again, maybe not.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
39 ;; - new functions `syntax-state', ... to replace uses of parse-partial-state
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
40 ;; with something higher-level (similar to syntax-ppss-context).
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
41 ;; - interaction with mmm-mode.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
42 ;; - what to do when the buffer is narrowed ?
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
43
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
44 ;;; Code:
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
45
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
46 ;; Note: PPSS stands for `parse-partial-sexp state'
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
47
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
48 (eval-when-compile (require 'cl))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
49
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
50 (defsubst syntax-ppss-depth (ppss)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
51 (nth 0 ppss))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
52
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
53 (defsubst syntax-ppss-context (ppss)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
54 (cond
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
55 ((nth 3 ppss) 'string)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
56 ((nth 4 ppss) 'comment)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
57 (t nil)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
58
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
59 (defvar syntax-ppss-max-span 20000
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
60 "Threshold below which cache info is deemed unnecessary.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
61 We try to make sure that cache entries are at least this far apart
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
62 from each other, to avoid keeping too much useless info.")
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
63
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
64 (defvar syntax-begin-function nil
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
65 "Function to move back outside of any comment/string/paren.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
66 This function should move the cursor back to some syntactically safe
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
67 point (where the PPSS is equivalent to nil).")
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
68
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
69 (defvar syntax-ppss-cache nil
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
70 "List of (POS . PPSS) pairs, in decreasing POS order.")
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
71 (make-variable-buffer-local 'syntax-ppss-cache)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
72 (defvar syntax-ppss-last nil
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
73 "Cache of (LAST-POS . LAST-PPSS).")
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
74 (make-variable-buffer-local 'syntax-ppss-last)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
75
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
76 (defun syntax-ppss-after-change-function (beg &rest ignored)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
77 ;; Flush invalid cache entries.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
78 (while (and syntax-ppss-cache (> (caar syntax-ppss-cache) beg))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
79 (setq syntax-ppss-cache (cdr syntax-ppss-cache)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
80 ;; Throw away `last' value if made invalid.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
81 (when (< beg (or (car syntax-ppss-last) 0))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
82 (if (< beg (or (car (nth 10 syntax-ppss-last))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
83 (nth 9 syntax-ppss-last)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
84 (nth 2 syntax-ppss-last)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
85 0))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
86 (setq syntax-ppss-last nil)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
87 (setcar syntax-ppss-last nil)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
88 ;; Unregister if there's no cache left. Sadly this doesn't work
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
89 ;; because `after-change-functions' is temporarily bound to nil here.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
90 ;; (unless syntax-ppss-cache
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
91 ;; (remove-hook 'after-change-functions
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
92 ;; 'syntax-ppss-after-change-function t))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
93 )
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
94
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
95 (defvar syntax-ppss-stats
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
96 [(0 . 0.0) (0 . 0.0) (0 . 0.0) (0 . 0.0) (0 . 0.0) (1 . 2500.0)])
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
97 (defun syntax-ppss-stats ()
40396
894b9bc4ca7a (syntax-ppss-stats): Be more robust when dividing by 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39889
diff changeset
98 (mapcar (lambda (x)
894b9bc4ca7a (syntax-ppss-stats): Be more robust when dividing by 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39889
diff changeset
99 (condition-case nil
894b9bc4ca7a (syntax-ppss-stats): Be more robust when dividing by 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39889
diff changeset
100 (cons (car x) (truncate (/ (cdr x) (car x))))
894b9bc4ca7a (syntax-ppss-stats): Be more robust when dividing by 0.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39889
diff changeset
101 (error nil)))
39756
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
102 syntax-ppss-stats))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
103
39889
9cc5a8486ab5 (syntax-ppss): Autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39756
diff changeset
104 ;;;###autoload
39756
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
105 (defun syntax-ppss (&optional pos)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
106 "Parse-Partial-Sexp State at POS.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
107 The returned value is the same as `parse-partial-sexp' except that
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
108 the 2nd and 6th values of the returned state cannot be relied upon.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
109
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
110 If the caller knows the PPSS of a nearby position, she can pass it
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
111 in OLP-PPSS (with or without its corresponding OLD-POS) to try and
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
112 avoid a more expansive scan.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
113 Point is at POS when this function returns."
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
114 ;; Default values.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
115 (unless pos (setq pos (point)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47356
diff changeset
116 ;;
39756
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
117 (let ((old-ppss (cdr syntax-ppss-last))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
118 (old-pos (car syntax-ppss-last))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
119 (ppss nil)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
120 (pt-min (point-min)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
121 (if (and old-pos (> old-pos pos)) (setq old-pos nil))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
122 ;; Use the OLD-POS if usable and close. Don't update the `last' cache.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
123 (if (and old-pos (< (- pos old-pos)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
124 ;; The time to find PPSS using syntax-begin-function
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
125 ;; is assumed to be about 2 * distance.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
126 (* 2 (/ (cdr (aref syntax-ppss-stats 5))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
127 (1+ (car (aref syntax-ppss-stats 5)))))))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
128 (progn
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
129 (incf (car (aref syntax-ppss-stats 0)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
130 (incf (cdr (aref syntax-ppss-stats 0)) (- pos old-pos))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
131 (parse-partial-sexp old-pos pos nil nil old-ppss))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47356
diff changeset
132
39756
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
133 (cond
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
134 ;; Use OLD-PPSS if possible and close enough.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
135 ((and (not old-pos) old-ppss
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
136 ;; BEWARE! We rely on the undocumented 9th field.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
137 ;; The 9th field currently contains the list of positions
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
138 ;; of open-parens of the enclosing parens. I.e. those positions
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
139 ;; are outside of any string/comment and the first of those is
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
140 ;; outside of any paren (i.e. corresponds to a nil ppss).
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
141 ;; If this list is empty but we are in a string or comment,
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
142 ;; then the 8th field contains a similar "toplevel" position.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
143 ;; If `pt-min' is too far from `pos', we could try to use
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
144 ;; other positions in (nth 9 old-ppss), but that doesn't seem
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
145 ;; to happen in practice and it would complicate this code
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
146 ;; (and the after-change-function code even more). But maybe it
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
147 ;; would be useful in "degenerate" cases such as when the whole
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
148 ;; file is wrapped in a set of parenthesis.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
149 (setq pt-min (or (car (nth 9 old-ppss))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
150 (nth 8 old-ppss)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
151 (nth 2 old-ppss)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
152 (<= pt-min pos) (< (- pos pt-min) syntax-ppss-max-span))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
153 (incf (car (aref syntax-ppss-stats 1)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
154 (incf (cdr (aref syntax-ppss-stats 1)) (- pos pt-min))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
155 (setq ppss (parse-partial-sexp pt-min pos)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
156 ;; The OLD-* data can't be used. Consult the cache.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
157 (t
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
158 (let ((cache-pred nil)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
159 (cache syntax-ppss-cache)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
160 (pt-min (point-min))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
161 ;; I differentiate between PT-MIN and PT-BEST because I feel
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
162 ;; like it might be important to ensure that the cache is only
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
163 ;; filled with 100% sure data (whereas syntax-begin-function
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
164 ;; might return incorrect data). Maybe that's just stupid.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
165 (pt-best (point-min))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
166 (ppss-best nil))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
167 ;; look for a usable cache entry.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
168 (while (and cache (< pos (caar cache)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
169 (setq cache-pred cache)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
170 (setq cache (cdr cache)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
171 (if cache (setq pt-min (caar cache) ppss (cdar cache)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
172
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
173 ;; Setup the after-change function if necessary.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
174 (unless (or syntax-ppss-cache syntax-ppss-last)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
175 (add-hook 'after-change-functions
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
176 'syntax-ppss-after-change-function nil t))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
177
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
178 ;; Use the best of OLD-POS and CACHE.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
179 (if (or (not old-pos) (< old-pos pt-min))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
180 (setq pt-best pt-min ppss-best ppss)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
181 (incf (car (aref syntax-ppss-stats 4)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
182 (incf (cdr (aref syntax-ppss-stats 4)) (- pos old-pos))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
183 (setq pt-best old-pos ppss-best old-ppss))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
184
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
185 ;; Use the `syntax-begin-function' if available.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
186 ;; We could try using that function earlier, but:
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
187 ;; - The result might not be 100% reliable, so it's better to use
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
188 ;; the cache if available.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
189 ;; - The function might be slow.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
190 ;; - If this function almost always finds a safe nearby spot,
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
191 ;; the cache won't be populated, so consulting it is cheap.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
192 (unless (or syntax-begin-function
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
193 (not (boundp 'font-lock-beginning-of-syntax-function))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
194 (not font-lock-beginning-of-syntax-function))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
195 (set (make-local-variable 'syntax-begin-function)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
196 font-lock-beginning-of-syntax-function))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
197 (when (and syntax-begin-function
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
198 (progn (goto-char pos)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
199 (funcall syntax-begin-function)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
200 ;; Make sure it's better.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
201 (> (point) pt-best))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
202 ;; Simple sanity check.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
203 (not (memq (get-text-property (point) 'face)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
204 '(font-lock-string-face font-lock-comment-face
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
205 font-lock-doc-face))))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
206 (incf (car (aref syntax-ppss-stats 5)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
207 (incf (cdr (aref syntax-ppss-stats 5)) (- pos (point)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
208 (setq pt-best (point) ppss-best nil))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
209
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
210 (cond
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
211 ;; Quick case when we found a nearby pos.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
212 ((< (- pos pt-best) syntax-ppss-max-span)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
213 (incf (car (aref syntax-ppss-stats 2)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
214 (incf (cdr (aref syntax-ppss-stats 2)) (- pos pt-best))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
215 (setq ppss (parse-partial-sexp pt-best pos nil nil ppss-best)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
216 ;; Slow case: compute the state from some known position and
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
217 ;; populate the cache so we won't need to do it again soon.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
218 (t
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
219 (incf (car (aref syntax-ppss-stats 3)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
220 (incf (cdr (aref syntax-ppss-stats 3)) (- pos pt-min))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
221
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
222 ;; If `pt-min' is too far, add a few intermediate entries.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
223 (while (> (- pos pt-min) (* 2 syntax-ppss-max-span))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
224 (setq ppss (parse-partial-sexp
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
225 pt-min (setq pt-min (/ (+ pt-min pos) 2))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
226 nil nil ppss))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
227 (let ((pair (cons pt-min ppss)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
228 (if cache-pred
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
229 (push pair (cdr cache-pred))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
230 (push pair syntax-ppss-cache))))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
231
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
232 ;; Compute the actual return value.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
233 (setq ppss (parse-partial-sexp pt-min pos nil nil ppss))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
234
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
235 ;; Debugging check.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
236 ;; (let ((real-ppss (parse-partial-sexp (point-min) pos)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
237 ;; (setcar (last ppss 4) 0)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
238 ;; (setcar (last real-ppss 4) 0)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
239 ;; (setcar (last ppss 8) nil)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
240 ;; (setcar (last real-ppss 8) nil)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
241 ;; (unless (equal ppss real-ppss)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
242 ;; (message "!!Syntax: %s != %s" ppss real-ppss)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
243 ;; (setq ppss real-ppss)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
244
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
245 ;; Store it in the cache.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
246 (let ((pair (cons pos ppss)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
247 (if cache-pred
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
248 (if (> (- (caar cache-pred) pos) syntax-ppss-max-span)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
249 (push pair (cdr cache-pred))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
250 (setcar cache-pred pair))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
251 (if (or (null syntax-ppss-cache)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
252 (> (- (caar syntax-ppss-cache) pos)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
253 syntax-ppss-max-span))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
254 (push pair syntax-ppss-cache)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
255 (setcar syntax-ppss-cache pair)))))))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47356
diff changeset
256
39756
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
257 (setq syntax-ppss-last (cons pos ppss))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
258 ppss)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
259
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
260 ;; Debugging functions
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
261
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
262 (defun syntax-ppss-debug ()
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
263 (let ((pt nil)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
264 (min-diffs nil))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
265 (dolist (x (append syntax-ppss-cache (list (cons (point-min) nil))))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
266 (when pt (push (- pt (car x)) min-diffs))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
267 (setq pt (car x)))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
268 min-diffs))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
269
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
270 ;; XEmacs compatibility functions
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
271
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
272 ;; (defun buffer-syntactic-context (&optional buffer)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
273 ;; "Syntactic context at point in BUFFER.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
274 ;; Either of `string', `comment' or `nil'.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
275 ;; This is an XEmacs compatibility function."
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
276 ;; (with-current-buffer (or buffer (current-buffer))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
277 ;; (syntax-ppss-context (syntax-ppss))))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
278
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
279 ;; (defun buffer-syntactic-context-depth (&optional buffer)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
280 ;; "Syntactic parenthesis depth at point in BUFFER.
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
281 ;; This is an XEmacs compatibility function."
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
282 ;; (with-current-buffer (or buffer (current-buffer))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
283 ;; (syntax-ppss-depth (syntax-ppss))))
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
284
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
285 (provide 'syntax)
cc0f91bb368d New file.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
diff changeset
286 ;;; syntax.el ends here