summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Panteleev <git@thecybershadow.net>2018-03-19 00:23:12 +0000
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2018-03-20 00:01:05 +0100
commit5b59e16c9ea7ffa04ab71f8d37f8b8677e89f735 (patch)
tree2628fdc105edfe11589931bdc22e650fc4bcfd77
parente1f1acbbfb07ca49f857672a1f0648052753568f (diff)
downloadorg-mode-5b59e16c9ea7ffa04ab71f8d37f8b8677e89f735.tar.gz
ob-table: Fix org-sbe's handling of quotes in cell values
* ob-table.el (org-sbe): org-sbe did the wrong thing when given a reference to a cell containing quotes or backslashes, because it would simply wrap any $-prefixed value in quotes, without any escaping. Fix this by using "%S" (instead of "\"%s\""). * test-ob-table.el: Add test.
-rw-r--r--lisp/ob-table.el2
-rw-r--r--testing/lisp/test-ob-table.el22
2 files changed, 23 insertions, 1 deletions
diff --git a/lisp/ob-table.el b/lisp/ob-table.el
index f6a5c88..105aca5 100644
--- a/lisp/ob-table.el
+++ b/lisp/ob-table.el
@@ -112,7 +112,7 @@ as shown in the example below.
(prog1 nil (setq quote t))
(prog1
(cond
- (quote (format "\"%s\"" el))
+ (quote (format "%S" el))
((stringp el) (org-no-properties el))
(t el))
(setq quote nil))))
diff --git a/testing/lisp/test-ob-table.el b/testing/lisp/test-ob-table.el
index da136cb..3d9b1d1 100644
--- a/testing/lisp/test-ob-table.el
+++ b/testing/lisp/test-ob-table.el
@@ -30,6 +30,28 @@
;; (org-test-at-id "6d2ff4ce-4489-4e2a-9c65-e3f71f77d975"
;; (should (= 2 (sbe take-sqrt (n "4"))))))
+(ert-deftest test-ob-table/sbe-quote ()
+ "Test that `org-sbe' can correctly handle cell values containing quotes."
+ (org-test-table-target-expect
+ "
+#+name: identity
+#+begin_src emacs-lisp :eval yes
+ x
+#+end_src
+
+| a\"b\"c | replace |
+"
+ "
+#+name: identity
+#+begin_src emacs-lisp :eval yes
+ x
+#+end_src
+
+| a\"b\"c | a\"b\"c |
+"
+ 1
+ "#+TBLFM: $2 = '(org-sbe identity (x $$1))"))
+
(provide 'test-ob-table)
;;; test-ob-table.el ends here