Просмотр исходного кода

org-e-ascii: Get item number right

* EXPERIMENTAL/org-e-ascii.el (org-e-ascii-item): Use new
  `org-list-get-item-number' function.
* contrib/lisp/org-element.el (org-element-item-interpreter): Use new
  `org-list-get-item-number' function.
Nicolas Goaziou 13 лет назад
Родитель
Сommit
abaeb42a3a
2 измененных файлов с 47 добавлено и 21 удалено
  1. 30 15
      EXPERIMENTAL/org-e-ascii.el
  2. 17 6
      contrib/lisp/org-element.el

+ 30 - 15
EXPERIMENTAL/org-e-ascii.el

@@ -1287,22 +1287,37 @@ contextual information."
   (let ((bullet
 	 ;; First parent of ITEM is always the plain-list.  Get
 	 ;; `:type' property from it.
-	 (let ((type (org-element-get-property
-		      :type (car (plist-get info :genealogy)))))
-	   (if (eq type 'descriptive)
-	       (concat
-		(org-export-secondary-string
-		 (org-element-get-property :tag item) 'e-ascii info) ": ")
-	     (org-element-get-property :bullet item)))))
+	 (org-list-bullet-string
+	  (let ((type (org-element-get-property
+		       :type (car (plist-get info :genealogy)))))
+	    (cond
+	     ((eq type 'descriptive)
+	      (concat
+	       (org-export-secondary-string
+		(org-element-get-property :tag item) 'e-ascii info) ": "))
+	     ((eq type 'ordered)
+	      ;; Return correct number for ITEM, paying attention to
+	      ;; counters.
+	      (let* ((struct (org-element-get-property :structure item))
+		     (bul (org-element-get-property :bullet item))
+		     (num
+		      (number-to-string
+		       (car (last (org-list-get-item-number
+				   (org-element-get-property :begin item)
+				   struct
+				   (org-list-prevs-alist struct)
+				   (org-list-parents-alist struct)))))))
+		(replace-regexp-in-string "[0-9]+" num bul)))
+	     (t (let ((bul (org-element-get-property :bullet item)))
+		  ;; Change bullets into more visible form if UTF-8 is active.
+		  (if (not (eq (plist-get info :ascii-charset) 'utf-8)) bul
+		    (replace-regexp-in-string
+		     "-" "•"
+		     (replace-regexp-in-string
+		      "+" "⁃"
+		      (replace-regexp-in-string "*" "‣" bul)))))))))))
     (concat
-     ;; Change bullets into more visible form if UTF-8 is active.
-     (if (not (eq (plist-get info :ascii-charset) 'utf-8)) bullet
-       (replace-regexp-in-string
-	"-" "•"
-	(replace-regexp-in-string
-	 "+" "⁃"
-	 (replace-regexp-in-string
-	  "*" "‣" bullet))))
+     bullet
      ;; Contents: Pay attention to indentation.  Note: check-boxes are
      ;; already taken care of at the paragraph level so they don't
      ;; interfere with indentation.

+ 17 - 6
contrib/lisp/org-element.el

@@ -621,7 +621,22 @@ Assume point is at the beginning of the item."
 (defun org-element-item-interpreter (item contents)
   "Interpret ITEM element as Org syntax.
 CONTENTS is the contents of the element."
-  (let* ((bullet (org-element-get-property :bullet item))
+  (let* ((bullet
+	  (let* ((beg (org-element-get-property :begin item))
+		 (struct (org-element-get-property :structure item))
+		 (pre (org-list-prevs-alist struct))
+		 (bul (org-element-get-property :bullet item)))
+	    (org-list-bullet-string
+	     (if (not (eq (org-list-get-list-type beg struct pre) 'ordered)) "-"
+	       (let ((num
+		      (car
+		       (last
+			(org-list-get-item-number
+			 beg struct pre (org-list-parents-alist struct))))))
+		 (format "%d%s"
+			 num
+			 (if (eq org-plain-list-ordered-item-terminator ?\)) ")"
+			   ".")))))))
 	 (checkbox (org-element-get-property :checkbox item))
 	 (counter (org-element-get-property :counter item))
 	 (tag (org-element-get-property :raw-tag item))
@@ -630,9 +645,6 @@ CONTENTS is the contents of the element."
     ;; Indent contents.
     (concat
      bullet
-     (when (and org-list-two-spaces-after-bullet-regexp
-		(string-match org-list-two-spaces-after-bullet-regexp bullet))
-       " ")
      (and counter (format "[@%d] " counter))
      (cond
       ((eq checkbox 'on) "[X] ")
@@ -640,8 +652,7 @@ CONTENTS is the contents of the element."
       ((eq checkbox 'trans) "[-] "))
      (and tag (format "%s :: " tag))
      (org-trim
-      (replace-regexp-in-string
-       "\\(^\\)[ \t]*\\S-" ind contents nil nil 1)))))
+      (replace-regexp-in-string "\\(^\\)[ \t]*\\S-" ind contents nil nil 1)))))
 
 
 ;;;; Plain List