diff --git a/lisp/org-odt.el b/lisp/org-odt.el index 87484ffb8..d60b0382f 100644 --- a/lisp/org-odt.el +++ b/lisp/org-odt.el @@ -46,6 +46,18 @@ (goto-char org-lparse-dyn-first-heading-pos))) (insert (org-odt-format-toc))) +(defun org-odt-insert-toc () + (goto-char (point-min)) + (cond + ((re-search-forward + "\\(]*>\\)?\\s-*\\[TABLE-OF-CONTENTS\\]\\s-*\\(\\)?" + nil t) + (goto-char (match-beginning 0)) + (replace-match "")) + (t + (goto-char org-lparse-dyn-first-heading-pos)) + (insert (org-odt-format-toc)))) + (defun org-odt-end-export () (org-odt-insert-toc) (org-odt-fixup-label-references) @@ -2169,6 +2181,7 @@ CATEGORY-HANDLE is used. See (setq org-odt-manifest-file-entries nil org-odt-embedded-images-count 0 org-odt-embedded-formulas-count 0 + org-odt-section-count 0 org-odt-entity-labels-alist nil org-odt-list-stack-stashed nil org-odt-automatic-styles nil diff --git a/testing/lisp/test-ob.el b/testing/lisp/test-ob.el index a39030c6f..b20516426 100644 --- a/testing/lisp/test-ob.el +++ b/testing/lisp/test-ob.el @@ -869,65 +869,194 @@ Line 3\" test-line (forward-char 1) (org-ctrl-c-ctrl-c) - (should (string= (concat test-line " =\"x\"=") - (buffer-substring-no-properties - (point-min) (point-max))))))) + (should (re-search-forward "\\#\\+results:" nil t)) + (forward-line) + (should + (string= + "" + (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))) + (org-test-with-temp-text-in-file " +#+begin_src emacs-lisp +\"some text\";; +#+end_src" -(ert-deftest test-org-babel/inline-src-block-preceded-by-equality () - (let ((test-line "=src_emacs-lisp[ :results verbatim ]{ \"x\" }")) - (org-test-with-temp-text - test-line - (forward-char 1) + (progn + (org-babel-next-src-block) (org-ctrl-c-ctrl-c) - (should (string= (concat test-line " =\"x\"=") - (buffer-substring-no-properties - (point-min) (point-max))))))) + (should (re-search-forward "\\#\\+results:" nil t)) + (forward-line) + (should + (string= + ": some text" + (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))) -(ert-deftest test-org-babel/inline-src-block-enclosed-within-parenthesis () - (let ((test-line "(src_emacs-lisp[ :results verbatim ]{ \"x\" }")) - (org-test-with-temp-text - (concat test-line ")") - (forward-char 1) +(ert-deftest test-ob/commented-last-block-line-with-var () + (org-test-with-temp-text-in-file " +#+begin_src emacs-lisp :var a=1 +;; +#+end_src" + (progn + (org-babel-next-src-block) (org-ctrl-c-ctrl-c) - (should (string= (concat test-line " =\"x\"=)" ) - (buffer-substring-no-properties - (point-min) (point-max))))))) - -(ert-deftest test-org-babel/inline-src-block-enclosed-within-parenthesis () - (let ((test-line "{src_emacs-lisp[ :results verbatim ]{ \"x\" }")) - (org-test-with-temp-text - (concat test-line "}") - (forward-char 1) + (re-search-forward "\\#\\+results:" nil t) + (forward-line) + (should (string= + "" + (buffer-substring-no-properties (point-at-bol) (point-at-eol)))))) + (org-test-with-temp-text-in-file " +#+begin_src emacs-lisp :var a=2 +2;; +#+end_src" + (progn + (org-babel-next-src-block) (org-ctrl-c-ctrl-c) - (should (string= (concat test-line " =\"x\"=}") - (buffer-substring-no-properties - (point-min) (point-max))))))) + (re-search-forward "\\#\\+results:" nil t) + (forward-line) + (should (string= + ": 2" + (buffer-substring-no-properties (point-at-bol) (point-at-eol))))))) -(ert-deftest test-org-babel/inline-src_blk-preceded-by-letter () - "Test inline source block invalid where preceded by letter" +(defun test-ob-verify-result-and-removed-result (result buffer-text) + "Test helper function to test `org-babel-remove-result'. +A temp buffer is populated with BUFFER-TEXT, the first block is executed, +and the result of execution is verified against RESULT. - ;; inline-src-blk preceded by letter +The block is actually executed /twice/ to ensure result +replacement happens correctly." (org-test-with-temp-text - "asrc_emacs-lisp[ :results verbatim ]{ \"x\" }" - (forward-char 1) - (let ((error-result - (should-error - (org-ctrl-c-ctrl-c)))) - (should (equal `(error "C-c C-c can do nothing useful at this location") - error-result))))) + buffer-text + (progn + (org-babel-next-src-block) (org-ctrl-c-ctrl-c) (org-ctrl-c-ctrl-c) + (should (re-search-forward "\\#\\+results:" nil t)) + (forward-line) + (should (string= result + (buffer-substring-no-properties + (point-at-bol) + (- (point-max) 16)))) + (org-babel-previous-src-block) (org-babel-remove-result) + (should (string= buffer-text + (buffer-substring-no-properties + (point-min) (point-max))))))) -(ert-deftest test-org-babel/inline-src_blk-preceded-by-number () - "Test inline source block invalid where preceded by number" +(ert-deftest test-ob/org-babel-remove-result--results-default () + "Test `org-babel-remove-result' with default :results." + (mapcar (lambda (language) + (test-ob-verify-result-and-removed-result + "\n" + (concat +"* org-babel-remove-result +#+begin_src " language " +#+end_src - ;; inline-src-blk preceded by number - (org-test-with-temp-text - "0src_emacs-lisp[ :results verbatim ]{ \"x\" }" - (forward-char 1) - (let ((error-result - (should-error - (org-ctrl-c-ctrl-c)))) - (should (equal `(error "C-c C-c can do nothing useful at this location") - error-result))))) +* next heading"))) + '("sh" "emacs-lisp"))) + +(ert-deftest test-ob/org-babel-remove-result--results-list () + "Test `org-babel-remove-result' with :results list." + (test-ob-verify-result-and-removed-result + "- 1 +- 2 +- 3 +- (quote (4 5))" + +"* org-babel-remove-result +#+begin_src emacs-lisp :results list +'(1 2 3 '(4 5)) +#+end_src + +* next heading")) + +(ert-deftest test-ob/org-babel-remove-result--results-wrap () + "Test `org-babel-remove-result' with :results wrap." + (test-ob-verify-result-and-removed-result + ":RESULTS: +hello there +:END:" + + "* org-babel-remove-result + +#+begin_src emacs-lisp :results wrap +\"hello there\" +#+end_src + +* next heading")) + +(ert-deftest test-ob/org-babel-remove-result--results-org () + "Test `org-babel-remove-result' with :results org." + (test-ob-verify-result-and-removed-result + "#+BEGIN_ORG +* heading +** subheading +content +#+END_ORG" + +"* org-babel-remove-result +#+begin_src emacs-lisp :results org +\"* heading +** subheading +content\" +#+end_src + +* next heading")) + +(ert-deftest test-ob/org-babel-remove-result--results-html () + "Test `org-babel-remove-result' with :results html." + (test-ob-verify-result-and-removed-result + "#+BEGIN_HTML + +#+END_HTML" + +"* org-babel-remove-result +#+begin_src emacs-lisp :results html +\"\" +#+end_src + +* next heading")) + +(ert-deftest test-ob/org-babel-remove-result--results-latex () + "Test `org-babel-remove-result' with :results latex." + (test-ob-verify-result-and-removed-result + "#+BEGIN_LaTeX +Line 1 +Line 2 +Line 3 +#+END_LaTeX" + +"* org-babel-remove-result +#+begin_src emacs-lisp :results latex +\"Line 1 +Line 2 +Line 3\" +#+end_src + +* next heading")) + +(ert-deftest test-ob/org-babel-remove-result--results-code () + "Test `org-babel-remove-result' with :results code." + + (test-ob-verify-result-and-removed-result + "#+BEGIN_SRC emacs-lisp +\"I am working!\" +#+END_SRC" + +"* org-babel-remove-result +#+begin_src emacs-lisp :results code +(message \"I am working!\") +#+end_src + +* next heading")) + +(ert-deftest test-ob/org-babel-remove-result--results-pp () + "Test `org-babel-remove-result' with :results pp." + (test-ob-verify-result-and-removed-result + ": \"I /am/ working!\"" + +"* org-babel-remove-result +#+begin_src emacs-lisp :results pp +\"I /am/ working!\") +#+end_src + +* next heading")) (provide 'test-ob)