Quellcode durchsuchen

Fix inline src and inline babel calls parsing

* lisp/org-element.el (org-element-inline-babel-call-parser):
(org-element-inline-src-block-parser): Tolerate any prefix before the objects.

* testing/lisp/test-ob-exp.el (ob-exp/exports-inline-code):
* testing/lisp/test-org-element.el (test-org-element/inline-src-block-parser):
Update tests.

Reported-by: Greg Minshall <minshall@acm.org>
<http://lists.gnu.org/r/emacs-orgmode/2018-01/msg00489.html>
Nicolas Goaziou vor 7 Jahren
Ursprung
Commit
7efa0f2879
3 geänderte Dateien mit 61 neuen und 52 gelöschten Zeilen
  1. 2 2
      lisp/org-element.el
  2. 55 47
      testing/lisp/test-ob-exp.el
  3. 4 3
      testing/lisp/test-org-element.el

+ 2 - 2
lisp/org-element.el

@@ -2849,7 +2849,7 @@ Assume point is at the beginning of the babel call."
   (save-excursion
     (catch :no-object
       (when (let ((case-fold-search nil))
-	      (looking-at "\\<call_\\([^ \t\n[(]+\\)[([]"))
+	      (looking-at "call_\\([^ \t\n[(]+\\)[([]"))
 	(goto-char (match-end 1))
 	(let* ((begin (match-beginning 0))
 	       (call (match-string-no-properties 1))
@@ -2903,7 +2903,7 @@ Assume point is at the beginning of the inline src block."
   (save-excursion
     (catch :no-object
       (when (let ((case-fold-search nil))
-	      (looking-at "\\<src_\\([^ \t\n[{]+\\)[{[]"))
+	      (looking-at "src_\\([^ \t\n[{]+\\)[{[]"))
 	(goto-char (match-end 1))
 	(let ((begin (match-beginning 0))
 	      (language (match-string-no-properties 1))

+ 55 - 47
testing/lisp/test-ob-exp.el

@@ -201,57 +201,65 @@ Here is one at the end of a line. {{{results(=2=)}}}
 	(org-test-with-expanded-babel-code (buffer-string)))))))
 
 (ert-deftest ob-exp/exports-inline-code ()
-  (let ((org-babel-inline-result-wrap "=%s=")
-	(org-export-use-babel t))
-    (should
-     (string-match "\\`src_emacs-lisp\\(?:\\[]\\)?{(\\+ 1 1)}$"
-		   (org-test-with-temp-text
-		       "src_emacs-lisp[:exports code]{(+ 1 1)}"
-		     (org-babel-exp-process-buffer)
-		     (buffer-string))))
-    (should
-     (string-match "\\`src_emacs-lisp\\(?:\\[]\\)?{(\\+ 1 1)}$"
-		   (org-test-with-temp-text
-		       "src_emacs-lisp[ :exports code ]{(+ 1 1)}"
-		     (org-babel-exp-process-buffer)
-		     (buffer-string))))
-    (should
-     (string-match "\\`src_emacs-lisp\\(?:\\[]\\)?{(\\+ 1 1)} {{{results(=2=)}}}$"
-		   (org-test-with-temp-text
-		       "src_emacs-lisp[:exports both]{(+ 1 1)}"
-		     (org-babel-exp-process-buffer)
-		     (buffer-string))))
-    (should
-     (string-match "\\`{{{results(=2=)}}}$"
+  (should
+   (equal "src_emacs-lisp[]{(+ 1 1)}"
+	  (org-test-with-temp-text "src_emacs-lisp[:exports code]{(+ 1 1)}"
+	    (let ((org-babel-inline-result-wrap "=%s=")
+		  (org-export-use-babel t))
+	      (org-babel-exp-process-buffer))
+	    (buffer-string))))
+  (should
+   (equal "src_emacs-lisp[]{(+ 1 1)}"
+	  (org-test-with-temp-text "src_emacs-lisp[ :exports code ]{(+ 1 1)}"
+	    (let ((org-babel-inline-result-wrap "=%s=")
+		  (org-export-use-babel t))
+	      (org-babel-exp-process-buffer))
+	    (buffer-string))))
+  (should
+   (equal "src_emacs-lisp[]{(+ 1 1)} {{{results(=2=)}}}"
+	  (org-test-with-temp-text "src_emacs-lisp[:exports both]{(+ 1 1)}"
+	    (let ((org-babel-inline-result-wrap "=%s=")
+		  (org-export-use-babel t))
+	      (org-babel-exp-process-buffer))
+	    (buffer-string))))
+  (should
+   (equal "{{{results(=2=)}}}"
+	  (org-test-with-temp-text
+	      "src_emacs-lisp[:exports results :results scalar]{(+ 1 1)}"
+	    (let ((org-babel-inline-result-wrap "=%s=")
+		  (org-export-use-babel t))
+	      (org-babel-exp-process-buffer))
+	    (buffer-string))))
+  (should
+   (equal "foosrc_emacs-lisp[]{(+ 1 1)}"
+	  (org-test-with-temp-text
+	      "foosrc_emacs-lisp[:exports code]{(+ 1 1)}"
+	    (let ((org-babel-inline-result-wrap "=%s=")
+		  (org-export-use-babel t))
+	      (org-babel-exp-process-buffer))
+	    (buffer-string))))
+  (should
+   (let ((text "src_emacs lisp{(+ 1 1)}"))
+     (string-match (regexp-quote text)
 		   (org-test-with-temp-text
-		       "src_emacs-lisp[:exports results :results scalar]{(+ 1 1)}"
-		     (org-babel-exp-process-buffer)
-		     (buffer-string))))
-    (should
-     (let ((text "foosrc_emacs-lisp[:exports code]{(+ 1 1)}"))
-       (string-match (regexp-quote text)
-		     (org-test-with-temp-text
-			 text
-		       (org-babel-exp-process-buffer)
-		       (buffer-string)))))
-    (should
-     (let ((text "src_emacs lisp{(+ 1 1)}"))
-       (string-match (regexp-quote text)
-		     (org-test-with-temp-text
-			 text
-		       (org-babel-exp-process-buffer)
-		       (buffer-string)))))
-    (should
-     (string-match
-      (replace-regexp-in-string
-       "\\\\\\[]{" "\\(?:\\[]\\)?{" ;accept both src_sh[]{...} or src_sh{...}
-       (regexp-quote "Here is one in the middle src_sh[]{echo 1} of a line.
+		       text
+		     (let ((org-babel-inline-result-wrap "=%s=")
+			   (org-export-use-babel t))
+		       (org-babel-exp-process-buffer))
+		     (buffer-string)))))
+  (should
+   (string-match
+    (replace-regexp-in-string
+     "\\\\\\[]{" "\\(?:\\[]\\)?{" ;accept both src_sh[]{...} or src_sh{...}
+     (regexp-quote "Here is one in the middle src_sh[]{echo 1} of a line.
 Here is one at the end of a line. src_sh[]{echo 2}
 src_sh[]{echo 3} Here is one at the beginning of a line.
 Here is one that is also evaluated: src_sh[]{echo 4} {{{results(=4=)}}}")
-       nil t)
-      (org-test-at-id "cd54fc88-1b6b-45b6-8511-4d8fa7fc8076"
-	(org-narrow-to-subtree)
+     nil t)
+    (org-test-at-id "cd54fc88-1b6b-45b6-8511-4d8fa7fc8076"
+      (org-narrow-to-subtree)
+      (let ((org-babel-inline-result-wrap "=%s=")
+	    (org-export-use-babel t))
 	(org-test-with-expanded-babel-code (buffer-string)))))))
 
 (ert-deftest ob-exp/exports-inline-code-double-eval ()

+ 4 - 3
testing/lisp/test-org-element.el

@@ -1210,6 +1210,10 @@ Some other text
   (should
    (org-test-with-temp-text "src_emacs-lisp{(+ 1 1)}"
      (org-element-map (org-element-parse-buffer) 'inline-src-block 'identity)))
+  ;; With prefix.
+  (should
+   (org-test-with-temp-text "foosrc_emacs-lisp[]{(+ 1 1)}"
+     (org-element-map (org-element-parse-buffer) 'inline-src-block 'identity)))
   ;; With switches.
   (should
    (org-test-with-temp-text "src_emacs-lisp[:foo bar]{(+ 1 1)}"
@@ -1222,9 +1226,6 @@ Some other text
    (org-test-with-temp-text "src_emacs-lisp[]{(+ 1 1)}"
      (org-element-map (org-element-parse-buffer) 'inline-src-block 'identity)))
   ;; Invalid syntax.
-  (should-not
-   (org-test-with-temp-text "foosrc_emacs-lisp[]{(+ 1 1)}"
-     (org-element-map (org-element-parse-buffer) 'inline-src-block 'identity)))
   (should-not
    (org-test-with-temp-text "src_emacs-lisp[]foo{(+ 1 1)}"
      (org-element-map (org-element-parse-buffer) 'inline-src-block 'identity)))