diff options
author | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2017-11-04 21:51:40 +0100 |
---|---|---|
committer | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2017-11-04 21:51:40 +0100 |
commit | 7ba058963ed0076acc5084d944abe3c213eba7ef (patch) | |
tree | 168af48bfa37ef2e0705679f79694c414fa2ec0c | |
parent | 9bee79a102fdb8887db0328f00cae1bb27c7fceb (diff) | |
parent | 6186ed3a222232fe897ad8499bca4736486b75de (diff) | |
download | org-mode-7ba058963ed0076acc5084d944abe3c213eba7ef.tar.gz |
Merge branch 'maint'
-rw-r--r-- | lisp/org-element.el | 35 | ||||
-rw-r--r-- | lisp/ox-texinfo.el | 32 | ||||
-rw-r--r-- | testing/lisp/test-org-element.el | 28 |
3 files changed, 51 insertions, 44 deletions
diff --git a/lisp/org-element.el b/lisp/org-element.el index 315f117..c21b2f9 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -1308,23 +1308,19 @@ CONTENTS is the contents of the element." (inlinetask-re (and (featurep 'org-inlinetask) "^\\*+ ")) items struct) (save-excursion - (catch 'exit + (catch :exit (while t (cond ;; At limit: end all items. ((>= (point) limit) - (throw 'exit - (let ((end (progn (skip-chars-backward " \r\t\n") - (forward-line) - (point)))) - (dolist (item items (sort (nconc items struct) - 'car-less-than-car)) - (setcar (nthcdr 6 item) end))))) + (let ((end (progn (skip-chars-backward " \r\t\n") + (line-beginning-position 2)))) + (dolist (item items) (setcar (nthcdr 6 item) end))) + (throw :exit (sort (nconc items struct) #'car-less-than-car))) ;; At list end: end all items. ((looking-at org-list-end-re) - (throw 'exit (dolist (item items (sort (nconc items struct) - 'car-less-than-car)) - (setcar (nthcdr 6 item) (point))))) + (dolist (item items) (setcar (nthcdr 6 item) (point))) + (throw :exit (sort (nconc items struct) #'car-less-than-car))) ;; At a new item: end previous sibling. ((looking-at item-re) (let ((ind (save-excursion (skip-chars-forward " \t") @@ -1348,7 +1344,7 @@ CONTENTS is the contents of the element." ;; Ending position, unknown so far. nil))) items)) - (forward-line 1)) + (forward-line)) ;; Skip empty lines. ((looking-at "^[ \t]*$") (forward-line)) ;; Skip inline tasks and blank lines along the way. @@ -1360,17 +1356,18 @@ CONTENTS is the contents of the element." (goto-char origin))))) ;; At some text line. Check if it ends any previous item. (t - (let ((ind (save-excursion (skip-chars-forward " \t") - (current-column)))) - (when (<= ind top-ind) - (skip-chars-backward " \r\t\n") - (forward-line)) + (let ((ind (save-excursion + (skip-chars-forward " \t") + (current-column))) + (end (save-excursion + (skip-chars-backward " \r\t\n") + (line-beginning-position 2)))) (while (<= ind (nth 1 (car items))) (let ((item (pop items))) - (setcar (nthcdr 6 item) (line-beginning-position)) + (setcar (nthcdr 6 item) end) (push item struct) (unless items - (throw 'exit (sort struct #'car-less-than-car)))))) + (throw :exit (sort struct #'car-less-than-car)))))) ;; Skip blocks (any type) and drawers contents. (cond ((and (looking-at "[ \t]*#\\+BEGIN\\(:\\|_\\S-+\\)") diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el index 04202e4..2eb60e8 100644 --- a/lisp/ox-texinfo.el +++ b/lisp/ox-texinfo.el @@ -1008,15 +1008,17 @@ CONTENTS is nil. INFO is a plist holding contextual information." (defun org-texinfo--@ref (datum description info) "Return @ref command for element or object DATUM. -DESCRIPTION is the name of the section to print, as a string." +DESCRIPTION is the printed name of the section, as a string, or +nil." (let ((node-name (org-texinfo--get-node datum info)) ;; Sanitize DESCRIPTION for cross-reference use. In - ;; particular, remove colons as they seem to cause (even - ;; within @asis{...} to the Texinfo reader. - (title (replace-regexp-in-string - "[ \t]*:+" "" - (replace-regexp-in-string "," "@comma{}" description)))) - (if (equal title node-name) + ;; particular, remove colons as they seem to cause pain (even + ;; within @asis{...}) to the Texinfo reader. + (title (and description + (replace-regexp-in-string + "[ \t]*:+" "" + (replace-regexp-in-string "," "@comma{}" description))))) + (if (or (not title) (equal title node-name)) (format "@ref{%s}" node-name) (format "@ref{%s, , %s}" node-name title)))) @@ -1064,20 +1066,8 @@ INFO is a plist holding contextual information. See (org-element-type (org-element-property :parent destination)))))) (let ((headline (org-element-lineage destination '(headline) t))) - (org-texinfo--@ref - headline - (or desc (org-texinfo--sanitize-title - (org-element-property :title headline) info)) - info))) - (_ - (org-texinfo--@ref - destination - (or desc - (pcase (org-export-get-ordinal destination info) - ((and (pred integerp) n) (number-to-string n)) - ((and (pred consp) n) (mapconcat #'number-to-string n ".")) - (_ "???"))) ;cannot guess the description - info))))) + (org-texinfo--@ref headline desc info))) + (_ (org-texinfo--@ref destination desc info))))) ((string= type "mailto") (format "@email{%s}" (concat (org-texinfo--sanitize-content path) diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 7d1c55f..7c359aa 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -1444,9 +1444,19 @@ DEADLINE: <2012-03-29 thu.>" 'org-element-contents)))) ;; Block in an item: ignore indentation within the block. (should - (org-test-with-temp-text "- item\n #+begin_src emacs-lisp\n(+ 1 1)\n #+end_src" - (forward-char) - (= (org-element-property :end (org-element-at-point)) (point-max))))) + (org-test-with-temp-text + "-<point> item\n #+begin_src emacs-lisp\n(+ 1 1)\n #+end_src" + (= (org-element-property :end (org-element-at-point)) (point-max)))) + ;; Last item in a list or sub-list has no `:post-blank' lines, since + ;; those belong to the plain-list. + (should + (= 0 + (org-test-with-temp-text "- A\n\n- <point>B\n\nEnd list" + (org-element-property :post-blank (org-element-at-point))))) + (should + (= 0 + (org-test-with-temp-text "- A\n\n - B\n\n<point> - C\n\n End sub-list" + (org-element-property :post-blank (org-element-at-point)))))) ;;;; Keyword @@ -1962,7 +1972,17 @@ e^{i\\pi}+1=0 "Test `plain-list' parser." (org-test-with-temp-text "- item" (should (org-element-map (org-element-parse-buffer) 'plain-list 'identity))) - ;; Blank lines after the list only belong to outer plain list. + ;; Blank lines after a list or sub-list belongs to that list. + (should + (= 1 + (org-test-with-temp-text "- A\n\n- B\n\nEnd list" + (org-element-property :post-blank (org-element-at-point))))) + (should + (= 1 + (org-test-with-temp-text "- A\n\n<point> - B\n\n - C\n\n End sub-list" + (org-element-property :post-blank (org-element-at-point))))) + ;; Blank lines after the list only belong to outer plain list, + ;; however. (should (equal '(t t) |