[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/org f63000cca8 075/101: org-element--current-element: U
From: |
ELPA Syncer |
Subject: |
[elpa] externals/org f63000cca8 075/101: org-element--current-element: Use "nogroup" versions of regexps |
Date: |
Sat, 1 Jul 2023 09:59:14 -0400 (EDT) |
branch: externals/org
commit f63000cca82dee01e876818916210b0061be9c19
Author: Ihor Radchenko <yantar92@posteo.net>
Commit: Ihor Radchenko <yantar92@posteo.net>
org-element--current-element: Use "nogroup" versions of regexps
* lisp/org-element.el (org-element-dynamic-block-open-re-nogroup):
(org-element--latex-begin-environment-nogroup): New constants for
internal regexps.
(org-element-comment-parser):
(org-element--current-element-re):
(org-element--current-element): Prefer string constants instead of
repeated plain strings that may be considered different by Emacs
regexp compiler. Also, avoid groups in these regexps as creating
groups makes Emacs regexp matches allocate extra memory. Finally,
avoid using \{N\} constructs in regexps as they are slightly more
costly for regexp engine.
---
lisp/org-element.el | 36 ++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/lisp/org-element.el b/lisp/org-element.el
index 16940d86f3..21b71936fd 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -187,6 +187,11 @@ Drawer's name is located in match group 1.")
Dynamic block's name is located in match group 1.
Parameters are in match group 2.")
+(defconst org-element-dynamic-block-open-re-nogroup
+ (rx line-start (0+ (any ?\s ?\t))
+ "#+BEGIN:" (0+ (any ?\s ?\t)))
+ "Regexp matching the opening line of a dynamic block.")
+
(defconst org-element-headline-re
(rx line-start (1+ "*") " ")
"Regexp matching a headline.")
@@ -2085,14 +2090,14 @@ Return a new syntax node of `comment' type containing
`:begin',
Assume point is at comment beginning."
(save-excursion
(let* ((begin (point))
- (value (prog2 (looking-at "[ \t]*# ?")
+ (value (prog2 (looking-at org-comment-regexp)
(buffer-substring-no-properties
(match-end 0) (line-end-position))
(forward-line)))
(com-end
;; Get comments ending.
(progn
- (while (and (< (point) limit) (looking-at "[ \t]*#\\( \\|$\\)"))
+ (while (and (< (point) limit) (looking-at org-comment-regexp))
;; Accumulate lines without leading hash and first
;; whitespace.
(setq value
@@ -2503,6 +2508,10 @@ The environment is captured by the first group.
See also `org-element--latex-end-environment'.")
+(defconst org-element--latex-begin-environment-nogroup
+ "^[ \t]*\\\\begin{[A-Za-z0-9*]+}"
+ "Regexp matching the beginning of a LaTeX environment.")
+
(defconst org-element--latex-end-environment
"\\\\end{%s}[ \t]*$"
"Format string matching the ending of a LaTeX environment.
@@ -4238,18 +4247,17 @@ Assume point is at the first equal sign marker."
(defconst org-element--current-element-re
(rx
(or
- (group-n 1 (regexp org-element--latex-begin-environment))
+ (group-n 1 (regexp org-element--latex-begin-environment-nogroup))
(group-n 2 (regexp org-element-drawer-re-nogroup))
(group-n 3 (regexp "[ \t]*:\\( \\|$\\)"))
- (group-n 7 (regexp org-element-dynamic-block-open-re))
+ (group-n 7 (regexp org-element-dynamic-block-open-re-nogroup))
(seq (group-n 4 (regexp "[ \t]*#\\+"))
(or
(seq "BEGIN_" (group-n 5 (1+ (not space))))
(group-n 6 "CALL:")
- (group-n 8 (1+ (not space)) ":")
- ))
+ (group-n 8 (1+ (not space)) ":")))
(group-n 9 (regexp org-footnote-definition-re))
- (group-n 10 (regexp "[ \t]*-\\{5,\\}[ \t]*$"))
+ (group-n 10 (regexp "[ \t]*-----+[ \t]*$"))
(group-n 11 "%%(")))
"Bulk regexp matching multiple elements in a single regexp.
This is a bit more efficient compared to invoking regexp search
@@ -4319,13 +4327,13 @@ element it has to parse."
(if org-odd-levels-only
(1- (* org-inlinetask-min-level 2))
org-inlinetask-min-level)))))
- (org-element-headline-parser limit raw-secondary-p))
- ;; Sections (must be checked after headline).
- ((memq mode '(section first-section)) (org-element-section-parser nil))
- ;; Comments.
- ((looking-at-p "^[ \t]*#\\(?: \\|$\\)") (org-element-comment-parser
limit))
- ;; Planning.
- ((and (eq mode 'planning)
+ (org-element-headline-parser limit raw-secondary-p))
+ ;; Sections (must be checked after headline).
+ ((memq mode '(section first-section)) (org-element-section-parser nil))
+ ;; Comments.
+ ((looking-at-p org-comment-regexp) (org-element-comment-parser limit))
+ ;; Planning.
+ ((and (eq mode 'planning)
(eq ?* (char-after (line-beginning-position 0)))
(looking-at-p org-element-planning-line-re))
(org-element-planning-parser limit))
- [elpa] externals/org 01351f3eab 067/101: Restructure file organization, (continued)
- [elpa] externals/org 01351f3eab 067/101: Restructure file organization, ELPA Syncer, 2023/07/01
- [elpa] externals/org 69383dfc24 031/101: org-ascii--current-justification: Use `org-element-lineage-map', ELPA Syncer, 2023/07/01
- [elpa] externals/org 771074ba5e 047/101: org-in-archived-heading-p: Use org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org 5898fcf269 061/101: Remove unused declares, ELPA Syncer, 2023/07/01
- [elpa] externals/org 3ce57e17a0 071/101: org-item-re: Convert into defsubst, ELPA Syncer, 2023/07/01
- [elpa] externals/org 52c63f5cce 095/101: org-lint-export-option-keywords: Small refactoring, ELPA Syncer, 2023/07/01
- [elpa] externals/org 7f337a2b95 098/101: org-fold-core: Fix isearch with `org-fold-core-isearch-open-function', ELPA Syncer, 2023/07/01
- [elpa] externals/org afbbebff3f 097/101: org-fold-core-get-folding-spec: Respect `org-fold-core-style', ELPA Syncer, 2023/07/01
- [elpa] externals/org 80122a1204 008/101: org-element-ast: New function `org-element-property-2', ELPA Syncer, 2023/07/01
- [elpa] externals/org 5c05ac198a 069/101: testing: Test with and without cache in more cases, ELPA Syncer, 2023/07/01
- [elpa] externals/org f63000cca8 075/101: org-element--current-element: Use "nogroup" versions of regexps,
ELPA Syncer <=
- [elpa] externals/org f93d855c51 077/101: Prefer `forward-line' over `beginning-of-line', ELPA Syncer, 2023/07/01
- [elpa] externals/org 924a64da39 013/101: org-element: Use the new org-element-ast library, ELPA Syncer, 2023/07/01
- [elpa] externals/org a7d1dfa171 027/101: Use `org-element-type-p', ELPA Syncer, 2023/07/01
- [elpa] externals/org 607c230d74 041/101: org-with-point-at: Accept syntax node as POM, ELPA Syncer, 2023/07/01
- [elpa] externals/org ec8f359bd6 046/101: org-in-commented-heading-p: Use org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org 06aba04f75 057/101: org-agenda-get-deadlines: Switch to org-element API, ELPA Syncer, 2023/07/01
- [elpa] externals/org 2b96501070 066/101: org-element: Simplify drawer and property drawer regexps, ELPA Syncer, 2023/07/01
- [elpa] externals/org a80efaf460 072/101: org-element-node-property-parser: Remove unnecessary regexp search, ELPA Syncer, 2023/07/01
- [elpa] externals/org 1c7c67b3c6 076/101: org-indent-drawer, org-indent-block: Remove unnecessary checks, ELPA Syncer, 2023/07/01
- [elpa] externals/org 21d3b888c6 087/101: org-element-create: Fix Emacs 28 compatibility, ELPA Syncer, 2023/07/01