|
@@ -233,62 +233,13 @@ structure of the values.")
|
|
|
"</office:annotation>")
|
|
|
|
|
|
(defun org-e-odt-begin-plain-list (ltype &optional continue-numbering)
|
|
|
- (let* ((style-name (org-e-odt-get-style-name-for-entity 'list ltype))
|
|
|
- (extra (concat
|
|
|
- (if continue-numbering
|
|
|
- " text:continue-numbering=\"true\""
|
|
|
- " text:continue-numbering=\"false\"")
|
|
|
- (when style-name
|
|
|
- (format " text:style-name=\"%s\"" style-name)))))
|
|
|
- (case ltype
|
|
|
- ((ordered unordered descriptive)
|
|
|
- (concat
|
|
|
- ;; (org-e-odt-end-paragraph)
|
|
|
- (format "<text:list%s>" extra)))
|
|
|
- (t (error "Unknown list type: %s" ltype)))))
|
|
|
-
|
|
|
-(defun org-e-odt-end-plain-list (ltype)
|
|
|
- (if ltype "</text:list>"
|
|
|
- (error "Unknown list type: %s" ltype)))
|
|
|
-
|
|
|
-(defun org-e-odt-begin-list-item (ltype &optional arg headline)
|
|
|
- (case ltype
|
|
|
- (ordered
|
|
|
- (assert (not headline) t)
|
|
|
- (let* ((counter arg) (extra ""))
|
|
|
- ;; "<text:list-header>"
|
|
|
- "<text:list-item>"))
|
|
|
- (unordered
|
|
|
- (let* ((id arg) (extra ""))
|
|
|
- (concat
|
|
|
- ;; "<text:list-header>"
|
|
|
- "<text:list-item>"
|
|
|
- (if headline (org-e-odt-format-target headline id)
|
|
|
- (org-e-odt-format-bookmark "" id)))))
|
|
|
- (descriptive
|
|
|
- (assert (not headline) t)
|
|
|
- (let ((term (or arg "(no term)")))
|
|
|
- (concat
|
|
|
- (org-e-odt-format-tags
|
|
|
- '("<text:list-item>" . "</text:list-item>")
|
|
|
- (org-e-odt-format-stylized-paragraph 'definition-term term))
|
|
|
- (org-e-odt-begin-list-item 'unordered)
|
|
|
- (org-e-odt-begin-plain-list 'descriptive)
|
|
|
- (org-e-odt-begin-list-item 'unordered))))
|
|
|
- (t (error "Unknown list type"))))
|
|
|
-
|
|
|
-(defun org-e-odt-end-list-item (ltype)
|
|
|
- (case ltype
|
|
|
- ((ordered unordered)
|
|
|
- ;; "</text:list-header>"
|
|
|
- "</text:list-item>")
|
|
|
- (descriptive
|
|
|
- (concat
|
|
|
- (org-e-odt-end-list-item 'unordered)
|
|
|
- (org-e-odt-end-plain-list 'descriptive)
|
|
|
- (org-e-odt-end-list-item 'unordered)
|
|
|
- ))
|
|
|
- (t (error "Unknown list type"))))
|
|
|
+ (unless (member ltype '(ordered unordered descriptive))
|
|
|
+ (error "Unknown list type: %s" ltype))
|
|
|
+
|
|
|
+ (format "<text:list text:style-name=\"%s\" %s>"
|
|
|
+ (org-e-odt-get-style-name-for-entity 'list ltype)
|
|
|
+ (format "text:continue-numbering=\"%s\""
|
|
|
+ (if continue-numbering "true" "false"))))
|
|
|
|
|
|
(defun org-e-odt-write-automatic-styles ()
|
|
|
"Write automatic styles to \"content.xml\"."
|
|
@@ -2936,17 +2887,18 @@ holding contextual information."
|
|
|
;; Case 2. This is a deep sub-tree: export it as a list item.
|
|
|
;; Also export as items headlines for which no section
|
|
|
;; format has been found.
|
|
|
- ((org-export-low-level-p headline info) ; FIXME (or (not section-fmt))
|
|
|
- ;; Build the real contents of the sub-tree.
|
|
|
- (let* ((type (if numberedp 'unordered 'unordered)) ; FIXME
|
|
|
- (itemized-body (org-e-odt-format-list-item
|
|
|
- contents type nil nil full-text)))
|
|
|
- (concat
|
|
|
- (and (org-export-first-sibling-p headline info)
|
|
|
- (org-e-odt-begin-plain-list type))
|
|
|
- itemized-body
|
|
|
- (and (org-export-last-sibling-p headline info)
|
|
|
- (org-e-odt-end-plain-list type)))))
|
|
|
+ ;; FIXME
|
|
|
+ ;; ((org-export-low-level-p headline info)
|
|
|
+ ;; ;; Build the real contents of the sub-tree.
|
|
|
+ ;; (let* ((type (if numberedp 'unordered 'unordered)) ; FIXME
|
|
|
+ ;; (itemized-body (org-e-odt-format-list-item
|
|
|
+ ;; contents type nil nil full-text)))
|
|
|
+ ;; (concat
|
|
|
+ ;; (and (org-export-first-sibling-p headline info)
|
|
|
+ ;; (org-e-odt-begin-plain-list type))
|
|
|
+ ;; itemized-body
|
|
|
+ ;; (and (org-export-last-sibling-p headline info)
|
|
|
+ ;; "</text:list>"))))
|
|
|
;; Case 3. Standard headline. Export it as a section.
|
|
|
(t
|
|
|
(let* ((extra-ids (list (org-element-property :custom-id headline)
|
|
@@ -3038,21 +2990,6 @@ contextual information."
|
|
|
|
|
|
;;;; Item
|
|
|
|
|
|
-(defun org-e-odt-format-list-item (contents type checkbox
|
|
|
- &optional term-counter-id
|
|
|
- headline)
|
|
|
- (when checkbox
|
|
|
- (setq checkbox
|
|
|
- (org-e-odt-format-fontify (case checkbox
|
|
|
- (on "[X]")
|
|
|
- (off "[ ]")
|
|
|
- (trans "[-]")) 'code)))
|
|
|
- (concat
|
|
|
- (org-e-odt-begin-list-item type term-counter-id headline)
|
|
|
- ;; FIXME checkbox (and checkbox " ")
|
|
|
- contents
|
|
|
- (org-e-odt-end-list-item type)))
|
|
|
-
|
|
|
(defun org-e-odt-item (item contents info)
|
|
|
"Transcode an ITEM element from Org to ODT.
|
|
|
CONTENTS holds the contents of the item. INFO is a plist holding
|
|
@@ -3060,11 +2997,27 @@ contextual information."
|
|
|
(let* ((plain-list (org-export-get-parent item info))
|
|
|
(type (org-element-property :type plain-list))
|
|
|
(counter (org-element-property :counter item))
|
|
|
- (checkbox (org-element-property :checkbox item))
|
|
|
(tag (let ((tag (org-element-property :tag item)))
|
|
|
(and tag (org-export-data tag info)))))
|
|
|
- (org-e-odt-format-list-item
|
|
|
- contents type checkbox (or tag counter))))
|
|
|
+ (case type
|
|
|
+ (ordered
|
|
|
+ (format "\n<text:list-item>\n%s\n</text:list-item>" contents))
|
|
|
+ (unordered
|
|
|
+ (format "\n<text:list-item>\n%s\n</text:list-item>" contents))
|
|
|
+ (descriptive
|
|
|
+ (concat
|
|
|
+ (let ((term (or tag "(no term)")))
|
|
|
+ (concat
|
|
|
+ (format "\n<text:list-item>\n%s\n</text:list-item>"
|
|
|
+ (org-e-odt-format-stylized-paragraph 'definition-term term))
|
|
|
+ (format
|
|
|
+ "\n<text:list-item>\n%s\n</text:list-item>"
|
|
|
+ (format "\n<text:list text:style-name=\"%s\" %s>\n%s\n</text:list>"
|
|
|
+ (org-e-odt-get-style-name-for-entity 'list 'descriptive)
|
|
|
+ "text:continue-numbering=\"false\""
|
|
|
+ (format "\n<text:list-item>\n%s\n</text:list-item>"
|
|
|
+ contents)))))))
|
|
|
+ (t (error "Unknown list type")))))
|
|
|
|
|
|
|
|
|
;;;; Keyword
|
|
@@ -3454,6 +3407,20 @@ the plist used as a communication channel."
|
|
|
(center-block 'center)
|
|
|
(footnote-definition 'footnote)
|
|
|
(t nil))))
|
|
|
+ ;; If this paragraph is a leading paragraph in an item and the
|
|
|
+ ;; item has a checkbox, splice the checkbox and paragraph contents
|
|
|
+ ;; together.
|
|
|
+ (when (and (equal (org-element-type parent) 'item)
|
|
|
+ (= (org-element-property :begin paragraph)
|
|
|
+ (org-element-property :contents-begin parent)))
|
|
|
+ (let* ((item parent)
|
|
|
+ (checkbox (org-element-property :checkbox item))
|
|
|
+ (checkbox (and checkbox (org-e-odt-format-fontify
|
|
|
+ (case checkbox
|
|
|
+ (on "[✓]") ; CHECK MARK
|
|
|
+ (off "[ ]")
|
|
|
+ (trans "[-]")) 'code))))
|
|
|
+ (setq contents (concat checkbox (and checkbox " ") contents))))
|
|
|
(org-e-odt-format-stylized-paragraph style contents)))
|
|
|
|
|
|
|
|
@@ -3471,7 +3438,7 @@ contextual information."
|
|
|
(org-e-odt--wrap-label
|
|
|
plain-list (format "%s\n%s%s"
|
|
|
(org-e-odt-begin-plain-list type)
|
|
|
- contents (org-e-odt-end-plain-list type)))))
|
|
|
+ contents "</text:list>"))))
|
|
|
|
|
|
;;;; Plain Text
|
|
|
|