diff options
author | Aaron Ecay <aaronecay@gmail.com> | 2015-12-05 13:41:33 +0000 |
---|---|---|
committer | Aaron Ecay <aaronecay@gmail.com> | 2015-12-05 13:41:33 +0000 |
commit | 046310d2739c0354952ecb2b1c52b92d6e497d8e (patch) | |
tree | 1efbb370a9e76c8e9cedcc9dbaa1eaa6f77ad19e | |
parent | 7c08d5c12faab203fddbda896ca845311439a558 (diff) | |
download | org-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.el | 33 |
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? |