[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/auto-overlays 734371d 43/93: Changed @ignore Texinfo co
From: |
Stefan Monnier |
Subject: |
[elpa] externals/auto-overlays 734371d 43/93: Changed @ignore Texinfo command to flat overlay class. |
Date: |
Mon, 14 Dec 2020 13:00:34 -0500 (EST) |
branch: externals/auto-overlays
commit 734371d86ff198dc2c4222fa3eba518db1144ab3
Author: Toby Cubitt <toby-predictive@dr-qubit.org>
Commit: tsc25 <toby-predictive@dr-qubit.org>
Changed @ignore Texinfo command to flat overlay class.
---
auto-overlay-flat.el | 425 ++++++++++++++++++++++++++-------------------------
1 file changed, 214 insertions(+), 211 deletions(-)
diff --git a/auto-overlay-flat.el b/auto-overlay-flat.el
index dc2537b..4962913 100644
--- a/auto-overlay-flat.el
+++ b/auto-overlay-flat.el
@@ -1,211 +1,214 @@
-
-;;; auto-overlay-flat.el --- flat start/end-delimited automatic overlays
-
-
-;; Copyright (C) 2006-2007 Toby Cubitt
-
-;; Author: Toby Cubitt <toby-predictive@dr-qubit.org>
-;; Version: 0.1.2
-;; Keywords: automatic, overlays, flat, unnested
-;; URL: http://www.dr-qubit.org/emacs.php
-
-
-;; This file is part of the Emacs Automatic Overlays package.
-;;
-;; This program 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
-;; of the License, or (at your option) any later version.
-;;
-;; This program 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 this program; if not, write to the Free Software
-;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-;; MA 02110-1301, USA.
-
-
-;;; Change Log:
-;;
-;; Version 0.1.2
-;; * added new `auto-overlay-complex-class' property
-;; * renamed 'entry-id and 'subentry-id to 'definition-id and 'regexp-id
-;;
-;; Version 0.1.1
-;; * set overlay properties straight after creation, rather than leaving it to
-;; `auto-overlay-update', in case matching causes exclusive reparsing, for
-;; which properties are already required
-;;
-;; Version 0.1
-;; * initial version
-
-
-
-;;; Code:
-
-
-(require 'auto-overlays)
-(provide 'auto-overlay-flat)
-
-
-;; set nest overlay parsing and suicide functions, and indicate class requires
-;; separate start and end regexps
-(put 'flat 'auto-overlay-parse-function 'auto-o-parse-flat-match)
-(put 'flat 'auto-overlay-suicide-function 'auto-o-flat-suicide)
-(put 'flat 'auto-overlay-complex-class t)
-
-
-
-(defun auto-o-parse-flat-match (o-match)
- ;; Perform any necessary updates of auto overlays due to a match for a flat
- ;; regexp.
-
- (let (o-parent)
- (cond
-
- ;; if match is for a start regexp...
- ((eq (auto-o-edge o-match) 'start)
- ;; if match is within an existing overlay, ignore match
- (unless (auto-overlays-at-point
- (overlay-get o-match 'delim-end) ; FIXME: is this right?
- `((identity auto-overlay)
- (eq set-id ,(overlay-get o-match 'set-id))
- (eq definition-id ,(overlay-get o-match 'definition-id))))
-
- ;; otherwise, look for next end-match...
- (let ((o-end (auto-o-next-flat-match o-match 'end)))
- (cond
- ;; if there is one that has a parent, steal start of the parent
- ;; overlay
- ((and o-end (overlay-get o-end 'parent))
- (auto-o-match-overlay (overlay-get o-end 'parent) o-match)
- nil) ; return nil since haven't created any overlays
-
- ;; if there is one but it's parentless, make a new overlay, match
- ;; it with O-MATCH and the next end-match, and return it
- (o-end
- (let ((pos (overlay-get o-match 'delim-end)))
- (setq o-parent (make-overlay pos pos nil nil 'rear-advance)))
- (overlay-put o-parent 'auto-overlay t)
- (overlay-put o-parent 'set-id (overlay-get o-match 'set-id))
- (overlay-put o-parent 'definition-id (overlay-get o-match
'definition-id))
- (auto-o-match-overlay o-parent o-match o-end)
- o-parent)
-
- (t ;; otherwise, make a new, end-unmatched overlay and return it
- (let ((pos (overlay-get o-match 'delim-end)))
- (setq o-parent (make-overlay pos pos nil nil 'read-advance))
- (overlay-put o-parent 'auto-overlay t)
- (overlay-put o-parent 'set-id (overlay-get o-match 'set-id))
- (overlay-put o-parent 'definition-id (overlay-get o-match
'definition-id))
- (auto-o-match-overlay o-parent o-match 'unmatched)
- o-parent))
- ))))
-
-
- (t ;; if match is for an end regexp...
- ;; if match is within existing overlay with same set-d and
definition-id...
- (when (setq o-parent
- (car ; FIXME: is this right?
- (auto-overlays-at-point
- (overlay-get o-match 'delim-start) ; FIXME: is this right?
- `((identity auto-overlay)
- (eq set-id ,(overlay-get o-match 'set-id))
- (eq definition-id ,(overlay-get o-match 'definition-id))))))
-
- ;; if overlay can simply be re-matched with new end-match, do so
- (let ((o-end (overlay-get o-parent 'end))
- (o-start (auto-o-next-flat-match o-match 'start)))
- (if (not (and o-end o-start
- (<= (overlay-get o-start 'delim-end)
- (overlay-get o-end 'delim-start))))
- (progn (auto-o-match-overlay o-parent nil o-match) nil)
-
- ;; if overlay was end-matched, and there's a start match within
- ;; existing overlay that will be "unmasked" when end is stolen,
- ;; create a new overlay between that start match and the end match
- ;; we're stealing from
- (auto-o-match-overlay o-parent nil o-match)
- (let ((pos (overlay-get o-start 'delim-end)))
- (setq o-parent (make-overlay pos pos nil nil 'read-advance))
- (overlay-put o-parent 'auto-overlay t)
- (overlay-put o-parent 'set-id (overlay-get o-match 'set-id))
- (overlay-put o-parent 'definition-id (overlay-get o-match
'definition-id))
- (auto-o-match-overlay o-parent o-start o-end))
- o-parent)) ; return newly created overlay
- ))))
-)
-
-
-
-(defun auto-o-flat-suicide (o-self)
- ;; Called when match no longer matches. Unmatch the match overlay O-SELF,
- ;; re-matching or deleting its parent overlay as necessary.
-
- (let ((o-parent (overlay-get o-self 'parent)))
- (cond
- ;; if we have no parent, don't need to do anything
- ((null o-parent))
-
- ;; if we're a start-match...
- ((eq (auto-o-edge o-self) 'start)
- ;; if parent is end-unmatched, delete parent
- (if (null (overlay-get o-parent 'end))
- (auto-o-delete-overlay o-parent)
-
- ;; otherwise, look for next start match...
- (let ((o-start (auto-o-next-flat-match o-self 'start)))
- ;; if there is one, match parent with it
- (if o-start
- (auto-o-match-overlay o-parent o-start)
- ;; otherwise, delete parent
- (auto-o-delete-overlay o-parent)))))
-
-
- (t ;; if we're an end-match, look for next end-match...
- (let ((o-start (overlay-get o-parent 'start))
- (o-end (auto-o-next-flat-match o-self 'end)))
- (cond
- ;; if there is one, match parent with it
- (o-end
- ;; if end-match already has a parent, delete it as its now
- ;; superfluous (note: no need to parse, since parent overlay will be
- ;; extended to cover same region anyway)
- (when (overlay-get o-end 'parent)
- (auto-o-delete-overlay (overlay-get o-end 'parent) 'no-parse))
- (auto-o-match-overlay o-parent nil o-end))
-
- (t ;; otherwise, make parent end-unmatched
- (auto-o-match-overlay o-parent nil 'unmatched)))))
- ))
-)
-
-
-
-(defun auto-o-next-flat-match (o-match edge)
- ;; Find first match overlay for EDGE ('start of 'end) after match overlay
- ;; O-MATCH in buffer, with same set-id and definition-id as O-MATCH.
-
- ;; get sorted list of matching overlays after O-MATCH
- (let ((o-list
- (sort (auto-overlays-in
- (overlay-start o-match) (point-max) ; FIXME: is start right?
- `((identity auto-overlay-match)
- (eq set-id ,(overlay-get o-match 'set-id))
- (eq definition-id ,(overlay-get o-match 'definition-id))
- (,(lambda (set-id definition-id regexp-id edge)
- (eq (auto-o-entry-edge set-id definition-id regexp-id)
- edge))
- (set-id definition-id regexp-id) (,edge))))
- (lambda (a b) (<= (overlay-start a) (overlay-start b))))))
- ;; if searching for same EDGE as O-MATCH, first overlay in list is always
- ;; O-MATCH itself, so we drop it
- (if (eq (auto-o-edge o-match) edge) (nth 1 o-list) (car o-list)))
-)
-
-
-
-;;; auto-overlay-flat.el ends here
+
+;;; auto-overlay-flat.el --- flat start/end-delimited automatic overlays
+
+
+;; Copyright (C) 2006-2008 Toby Cubitt
+
+;; Author: Toby Cubitt <toby-predictive@dr-qubit.org>
+;; Version: 0.1.2
+;; Keywords: automatic, overlays, flat, unnested
+;; URL: http://www.dr-qubit.org/emacs.php
+
+
+;; This file is part of the Emacs Automatic Overlays package.
+;;
+;; This program 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
+;; of the License, or (at your option) any later version.
+;;
+;; This program 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 this program; if not, write to the Free Software
+;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+;; MA 02110-1301, USA.
+
+
+;;; Change Log:
+;;
+;; Version 0.1.2
+;; * added new `auto-overlay-complex-class' property
+;; * renamed 'entry-id and 'subentry-id to 'definition-id and 'regexp-id
+;;
+;; Version 0.1.1
+;; * set overlay properties straight after creation, rather than leaving it to
+;; `auto-overlay-update', in case matching causes exclusive reparsing, for
+;; which properties are already required
+;;
+;; Version 0.1
+;; * initial version
+
+
+
+;;; Code:
+
+
+(require 'auto-overlays)
+(provide 'auto-overlay-flat)
+
+
+;; set flat overlay parsing and suicide functions, and indicate class requires
+;; separate start and end regexps
+(put 'flat 'auto-overlay-parse-function 'auto-o-parse-flat-match)
+(put 'flat 'auto-overlay-suicide-function 'auto-o-flat-suicide)
+(put 'flat 'auto-overlay-complex-class t)
+
+
+
+(defun auto-o-parse-flat-match (o-match)
+ ;; Perform any necessary updates of auto overlays due to a match for a flat
+ ;; regexp.
+
+ (let (o-parent)
+ (cond
+
+ ;; if match is for a start regexp...
+ ((eq (auto-o-edge o-match) 'start)
+ ;; if match is within an existing overlay, ignore match
+ (unless (auto-overlays-at-point
+ (overlay-get o-match 'delim-end) ; FIXME: is this right?
+ `((identity auto-overlay)
+ (eq set-id ,(overlay-get o-match 'set-id))
+ (eq definition-id ,(overlay-get o-match 'definition-id))))
+
+ ;; otherwise, look for next end-match...
+ (let ((o-end (auto-o-next-flat-match o-match 'end)))
+ (cond
+ ;; if there is one that has a parent, steal start of the parent
+ ;; overlay
+ ((and o-end (overlay-get o-end 'parent))
+ (auto-o-match-overlay (overlay-get o-end 'parent) o-match)
+ nil) ; return nil since haven't created any overlays
+
+ ;; if there is one but it's parentless, make a new overlay, match
+ ;; it with O-MATCH and the next end-match, and return it
+ (o-end
+ (let ((pos (overlay-get o-match 'delim-end)))
+ (setq o-parent (make-overlay pos pos nil nil 'rear-advance)))
+ (overlay-put o-parent 'auto-overlay t)
+ (overlay-put o-parent 'set-id (overlay-get o-match 'set-id))
+ (overlay-put o-parent 'definition-id
+ (overlay-get o-match 'definition-id))
+ (auto-o-match-overlay o-parent o-match o-end)
+ o-parent)
+
+ (t ;; otherwise, make a new, end-unmatched overlay and return it
+ (let ((pos (overlay-get o-match 'delim-end)))
+ (setq o-parent (make-overlay pos pos nil nil 'read-advance))
+ (overlay-put o-parent 'auto-overlay t)
+ (overlay-put o-parent 'set-id (overlay-get o-match 'set-id))
+ (overlay-put o-parent 'definition-id
+ (overlay-get o-match 'definition-id))
+ (auto-o-match-overlay o-parent o-match 'unmatched)
+ o-parent))
+ ))))
+
+
+ (t ;; if match is for an end regexp...
+ ;; if match is within existing overlay with same set-d and
definition-id...
+ (when (setq o-parent
+ (car ; FIXME: is this right?
+ (auto-overlays-at-point
+ (overlay-get o-match 'delim-start) ; FIXME: is this right?
+ `((identity auto-overlay)
+ (eq set-id ,(overlay-get o-match 'set-id))
+ (eq definition-id ,(overlay-get o-match 'definition-id))))))
+
+ ;; if overlay can simply be re-matched with new end-match, do so
+ (let ((o-end (overlay-get o-parent 'end))
+ (o-start (auto-o-next-flat-match o-match 'start)))
+ (if (not (and o-end o-start
+ (<= (overlay-get o-start 'delim-end)
+ (overlay-get o-end 'delim-start))))
+ (progn (auto-o-match-overlay o-parent nil o-match) nil)
+
+ ;; if overlay was end-matched, and there's a start match within
+ ;; existing overlay that will be "unmasked" when end is stolen,
+ ;; create a new overlay between that start match and the end match
+ ;; we're stealing from
+ (auto-o-match-overlay o-parent nil o-match)
+ (let ((pos (overlay-get o-start 'delim-end)))
+ (setq o-parent (make-overlay pos pos nil nil 'read-advance))
+ (overlay-put o-parent 'auto-overlay t)
+ (overlay-put o-parent 'set-id (overlay-get o-match 'set-id))
+ (overlay-put o-parent 'definition-id
+ (overlay-get o-match 'definition-id))
+ (auto-o-match-overlay o-parent o-start o-end))
+ o-parent)) ; return newly created overlay
+ ))))
+)
+
+
+
+(defun auto-o-flat-suicide (o-self)
+ ;; Called when match no longer matches. Unmatch the match overlay O-SELF,
+ ;; re-matching or deleting its parent overlay as necessary.
+
+ (let ((o-parent (overlay-get o-self 'parent)))
+ (cond
+ ;; if we have no parent, don't need to do anything
+ ((null o-parent))
+
+ ;; if we're a start-match...
+ ((eq (auto-o-edge o-self) 'start)
+ ;; if parent is end-unmatched, delete parent
+ (if (null (overlay-get o-parent 'end))
+ (auto-o-delete-overlay o-parent)
+
+ ;; otherwise, look for next start match...
+ (let ((o-start (auto-o-next-flat-match o-self 'start)))
+ ;; if there is one, match parent with it
+ (if o-start
+ (auto-o-match-overlay o-parent o-start)
+ ;; otherwise, delete parent
+ (auto-o-delete-overlay o-parent)))))
+
+
+ (t ;; if we're an end-match, look for next end-match...
+ (let ((o-start (overlay-get o-parent 'start))
+ (o-end (auto-o-next-flat-match o-self 'end)))
+ (cond
+ ;; if there is one, match parent with it
+ (o-end
+ ;; if end-match already has a parent, delete it as its now
+ ;; superfluous (note: no need to parse, since parent overlay will be
+ ;; extended to cover same region anyway)
+ (when (overlay-get o-end 'parent)
+ (auto-o-delete-overlay (overlay-get o-end 'parent) 'no-parse))
+ (auto-o-match-overlay o-parent nil o-end))
+
+ (t ;; otherwise, make parent end-unmatched
+ (auto-o-match-overlay o-parent nil 'unmatched)))))
+ ))
+)
+
+
+
+(defun auto-o-next-flat-match (o-match edge)
+ ;; Find first match overlay for EDGE ('start of 'end) after match overlay
+ ;; O-MATCH in buffer, with same set-id and definition-id as O-MATCH.
+
+ ;; get sorted list of matching overlays after O-MATCH
+ (let ((o-list
+ (sort (auto-overlays-in
+ (overlay-start o-match) (point-max) ; FIXME: is start right?
+ `((identity auto-overlay-match)
+ (eq set-id ,(overlay-get o-match 'set-id))
+ (eq definition-id ,(overlay-get o-match 'definition-id))
+ (,(lambda (set-id definition-id regexp-id edge)
+ (eq (auto-o-entry-edge set-id definition-id regexp-id)
+ edge))
+ (set-id definition-id regexp-id) (,edge))))
+ (lambda (a b) (<= (overlay-start a) (overlay-start b))))))
+ ;; if searching for same EDGE as O-MATCH, first overlay in list is always
+ ;; O-MATCH itself, so we drop it
+ (if (eq (auto-o-edge o-match) edge) (nth 1 o-list) (car o-list)))
+)
+
+
+
+;;; auto-overlay-flat.el ends here
- [elpa] externals/auto-overlays b02fbba 79/93: Added general accessor function auto-o-[regexp-]key-value., (continued)
- [elpa] externals/auto-overlays b02fbba 79/93: Added general accessor function auto-o-[regexp-]key-value., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 75c2c75 82/93: Improve auto-overlays-in/at-point docstrings., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays d107a02 84/93: Reparse auto-overlays on loading/unloading regexp definitions., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 033900e 90/93: Fix some quoting problems in doc strings, Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays db9036a 92/93: * packages/auto-overlays/: Activate lexical-binding., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays d66bab4 11/93: Fixed "self" regexp bugs in auto-overlay package., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 86c25df 14/93: Removed auto-overlay-functions variable, and implemented new regexp class interface, Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 622afa4 13/93: Another very similar bug fix to do with updating exclusive overlays., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 1db0b95 22/93: Various minor bug fixes, and changes to bring packages up to date, Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays ea600c4 27/93: Bug fixes to new update scheduling, and to loading overlays from file., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 734371d 43/93: Changed @ignore Texinfo command to flat overlay class.,
Stefan Monnier <=
- [elpa] externals/auto-overlays 55e868d 30/93: auto-o-suicide also needs to remove old properties., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 5d5e09e 45/93: trivial whitespace changes, Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 0936d26 39/93: Work around goto-line bug., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays ff75a63 49/93: Bug-fix in auto-overlay-load-definition, Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 9e8ef72 36/93: Modified interface functions for defining auto-overlay regexps., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 5539596 56/93: Added missing (eval-when-compile (require 'cl))., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 0f02ef9 57/93: Fixed minor spelling errors in docstrings., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays f66e655 66/93: Update package headers for ELPA., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays cdf4e6a 70/93: Fix copyright assignment in auto-overlays manual., Stefan Monnier, 2020/12/14
- [elpa] externals/auto-overlays 464d9ea 77/93: Refactor auto-overlay-regexps format and implement match hooks., Stefan Monnier, 2020/12/14