summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2017-11-04 21:51:40 +0100
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2017-11-04 21:51:40 +0100
commit7ba058963ed0076acc5084d944abe3c213eba7ef (patch)
tree168af48bfa37ef2e0705679f79694c414fa2ec0c
parent9bee79a102fdb8887db0328f00cae1bb27c7fceb (diff)
parent6186ed3a222232fe897ad8499bca4736486b75de (diff)
downloadorg-mode-7ba058963ed0076acc5084d944abe3c213eba7ef.tar.gz
Merge branch 'maint'
-rw-r--r--lisp/org-element.el35
-rw-r--r--lisp/ox-texinfo.el32
-rw-r--r--testing/lisp/test-org-element.el28
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)