From bafeaf161c2253510b6b759f6400cffa1198e48b Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Mon, 28 Feb 2022 15:25:08 +0100 Subject: [PATCH] element: Fix parsing of inline footnotes * lisp/org-element.el (org-element--pair-round-table): (org-element--pair-square-table): (org-element--pair-curly-table): De-activate all but one pair of parenthesis. * testing/lisp/test-org-element.el (test-org-element/footnote-reference-parser): Add test. Reported-by: Greg Minshall --- lisp/org-element.el | 24 +++++++++--------------- testing/lisp/test-org-element.el | 9 +++++++++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index 795278660..9db1406b3 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -396,31 +396,25 @@ still has an entry since one of its properties (`:title') does.") "Alist between element types and locations of secondary values.") (defconst org-element--pair-round-table - (let ((table (make-syntax-table))) + (let ((table (make-char-table 'syntax-table '(2)))) (modify-syntax-entry ?\( "()" table) (modify-syntax-entry ?\) ")(" table) - (dolist (char '(?\{ ?\} ?\[ ?\] ?\< ?\>) table) - (modify-syntax-entry char " " table))) - "Table used internally to pair only round brackets. -Other brackets are treated as spaces.") + table) + "Table used internally to pair only round brackets.") (defconst org-element--pair-square-table - (let ((table (make-syntax-table))) + (let ((table (make-char-table 'syntax-table '(2)))) (modify-syntax-entry ?\[ "(]" table) (modify-syntax-entry ?\] ")[" table) - (dolist (char '(?\{ ?\} ?\( ?\) ?\< ?\>) table) - (modify-syntax-entry char " " table))) - "Table used internally to pair only square brackets. -Other brackets are treated as spaces.") + table) + "Table used internally to pair only square brackets.") (defconst org-element--pair-curly-table - (let ((table (make-syntax-table))) + (let ((table (make-char-table 'syntax-table '(2)))) (modify-syntax-entry ?\{ "(}" table) (modify-syntax-entry ?\} "){" table) - (dolist (char '(?\[ ?\] ?\( ?\) ?\< ?\>) table) - (modify-syntax-entry char " " table))) - "Table used internally to pair only curly brackets. -Other brackets are treated as spaces.") + table) + "Table used internally to pair only curly brackets.") (defun org-element--parse-paired-brackets (char) "Parse paired brackets at point. diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index ea9f97a64..06bbf7a01 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1161,6 +1161,15 @@ Some other text (org-test-with-temp-text "Text[fn::def]" (org-element-map (org-element-parse-buffer) 'footnote-reference 'identity))) + ;; Parse inline references with syntax loaded characters. + (should + (eq 'footnote-reference + (org-test-with-temp-text "Text[fn::(def]" + (org-element-type (org-element-context))))) + (should + (eq 'footnote-reference + (org-test-with-temp-text "Text[fn::\"def]" + (org-element-type (org-element-context))))) ;; Parse nested footnotes. (should (= 2