summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Ecay <aaronecay@gmail.com>2015-12-05 13:41:33 +0000
committerAaron Ecay <aaronecay@gmail.com>2015-12-05 13:41:33 +0000
commit046310d2739c0354952ecb2b1c52b92d6e497d8e (patch)
tree1efbb370a9e76c8e9cedcc9dbaa1eaa6f77ad19e
parent7c08d5c12faab203fddbda896ca845311439a558 (diff)
downloadorg-mode-046310d2739c0354952ecb2b1c52b92d6e497d8e.tar.gz
Fix a slowdown in footnote parsing.
* lisp/org-footnote.el (org-footnote-in-valid-context-p): Fix slowdown. Apply de Morgan’s law and reorder clauses from (apparently) quickest to slowest. See <http://mid.gmane.org/loom.20151204T081351-244@post.gmane.org>.
-rw-r--r--lisp/org-footnote.el33
1 files changed, 18 insertions, 15 deletions
diff --git a/lisp/org-footnote.el b/lisp/org-footnote.el
index bc874a5..7ed8a1d 100644
--- a/lisp/org-footnote.el
+++ b/lisp/org-footnote.el
@@ -200,21 +200,24 @@ extracted will be filled again."
(defun org-footnote-in-valid-context-p ()
"Is point in a context where footnotes are allowed?"
(save-match-data
- (not (or (org-at-comment-p)
- (org-inside-LaTeX-fragment-p)
- ;; Avoid literal example.
- (org-in-verbatim-emphasis)
- (save-excursion
- (beginning-of-line)
- (looking-at "[ \t]*:[ \t]+"))
- ;; Avoid cited text and headers in message-mode.
- (and (derived-mode-p 'message-mode)
- (or (save-excursion
- (beginning-of-line)
- (looking-at message-cite-prefix-regexp))
- (message-point-in-header-p)))
- ;; Avoid forbidden blocks.
- (org-in-block-p org-footnote-forbidden-blocks)))))
+ (and
+ (not (org-at-comment-p))
+ (not (org-in-verbatim-emphasis))
+ ;; Avoid forbidden blocks.
+ (not (org-in-block-p org-footnote-forbidden-blocks))
+ ;; Avoid literal example.
+ (not (save-excursion
+ (beginning-of-line)
+ (looking-at "[ \t]*:[ \t]+")))
+ ;; The latex fragment check seems expensive, so save it for last.
+ ;; See <http://mid.gmane.org/loom.20151204T081351-244@post.gmane.org>.
+ (not (org-inside-LaTeX-fragment-p))
+ ;; Avoid cited text and headers in message-mode.
+ (not (and (derived-mode-p 'message-mode)
+ (or (save-excursion
+ (beginning-of-line)
+ (looking-at message-cite-prefix-regexp))
+ (message-point-in-header-p)))))))
(defun org-footnote-at-reference-p ()
"Is the cursor at a footnote reference?