|
@@ -100,6 +100,61 @@ When nil, they will not be exported."
|
|
:group 'org-inlinetask
|
|
:group 'org-inlinetask
|
|
:type 'boolean)
|
|
:type 'boolean)
|
|
|
|
|
|
|
|
+(defvar org-inlinetask-export-templates
|
|
|
|
+ '((html "<pre class=\"inlinetask\"><b>%s%s</b><br>%s</pre>"
|
|
|
|
+ '((unless (eq todo "")
|
|
|
|
+ (format "<span class=\"%s %s\">%s%s</span> "
|
|
|
|
+ class todo todo priority))
|
|
|
|
+ heading content))
|
|
|
|
+ (latex "\\begin\{description\}\\item[%s%s]%s\\end\{description\}"
|
|
|
|
+ '((unless (eq todo "") (format "\\textsc\{%s%s\} " todo priority))
|
|
|
|
+ heading content))
|
|
|
|
+ (ascii " -- %s%s%s"
|
|
|
|
+ '((unless (eq todo "") (format "%s%s " todo priority))
|
|
|
|
+ heading
|
|
|
|
+ (unless (eq content "")
|
|
|
|
+ (format "\n ¦ %s"
|
|
|
|
+ (mapconcat 'identity (org-split-string content "\n")
|
|
|
|
+ "\n ¦ ")))))
|
|
|
|
+ (docbook "<variablelist>
|
|
|
|
+<varlistentry>
|
|
|
|
+<term>%s%s</term>
|
|
|
|
+<listitem><para>%s</para></listitem>
|
|
|
|
+</varlistentry>
|
|
|
|
+</variablelist>"
|
|
|
|
+ '((unless (eq todo "") (format "%s%s " todo priority))
|
|
|
|
+ heading content)))
|
|
|
|
+ "Templates for inline tasks in various exporters.
|
|
|
|
+
|
|
|
|
+This variable is an alist in the shape of (BACKEND STRING OBJECTS).
|
|
|
|
+
|
|
|
|
+BACKEND is the name of the backend for the template (ascii, html...).
|
|
|
|
+
|
|
|
|
+STRING is a format control string.
|
|
|
|
+
|
|
|
|
+OBJECTS is a list of elements to be substituted into the format
|
|
|
|
+string. They can be of any type, from a string to a form
|
|
|
|
+returning a value (thus allowing conditional insertion). A nil
|
|
|
|
+object will be substituted as the empty string. Obviously, there
|
|
|
|
+must be at least as many objects as %-sequences in the format
|
|
|
|
+string.
|
|
|
|
+
|
|
|
|
+Moreover, the following special keywords are provided: `todo',
|
|
|
|
+`priority', `heading', `content', `tags'. If some of them are not
|
|
|
|
+defined in an inline task, their value is the empty string.
|
|
|
|
+
|
|
|
|
+As an example, valid associations are:
|
|
|
|
+
|
|
|
|
+(html \"<ul><li>%s <p>%s</p></li></ul>\" (heading content))
|
|
|
|
+
|
|
|
|
+or, in a conditional way,
|
|
|
|
+
|
|
|
|
+(latex \"\\\\begin\{flushright\}%s%s%s\\\\end\{flushright\}\"
|
|
|
|
+ ((unless (eq todo \"\")
|
|
|
|
+ (format \"\\\\textsc\{%s%s: \}\" todo priority))
|
|
|
|
+ heading
|
|
|
|
+ (unless (eq content \"\") (format \"\\n%s\" content))))")
|
|
|
|
+
|
|
(defvar org-odd-levels-only)
|
|
(defvar org-odd-levels-only)
|
|
(defvar org-keyword-time-regexp)
|
|
(defvar org-keyword-time-regexp)
|
|
(defvar org-drawer-regexp)
|
|
(defvar org-drawer-regexp)
|
|
@@ -190,7 +245,7 @@ Either remove headline and meta data, or do special formatting."
|
|
(or org-inlinetask-min-level 200)))
|
|
(or org-inlinetask-min-level 200)))
|
|
(re1 (format "^\\(\\*\\{%d,\\}\\) .*\n" nstars))
|
|
(re1 (format "^\\(\\*\\{%d,\\}\\) .*\n" nstars))
|
|
(re2 (concat "^[ \t]*" org-keyword-time-regexp))
|
|
(re2 (concat "^[ \t]*" org-keyword-time-regexp))
|
|
- headline beg end stars content indent)
|
|
|
|
|
|
+ headline beg end stars content)
|
|
(while (re-search-forward re1 nil t)
|
|
(while (re-search-forward re1 nil t)
|
|
(setq headline (match-string 0)
|
|
(setq headline (match-string 0)
|
|
stars (match-string 1)
|
|
stars (match-string 1)
|
|
@@ -211,38 +266,34 @@ Either remove headline and meta data, or do special formatting."
|
|
(delete-region beg (1+ (match-end 0))))
|
|
(delete-region beg (1+ (match-end 0))))
|
|
(goto-char beg)
|
|
(goto-char beg)
|
|
(when org-inlinetask-export
|
|
(when org-inlinetask-export
|
|
- (when (string-match org-complex-heading-regexp headline)
|
|
|
|
- (setq headline (concat
|
|
|
|
- (if (match-end 2)
|
|
|
|
- (concat
|
|
|
|
- (format
|
|
|
|
- "@<span class=\"%s %s\"> %s@</span>"
|
|
|
|
- (if (member (match-string 2 headline)
|
|
|
|
- org-done-keywords)
|
|
|
|
- "done" "todo")
|
|
|
|
- (match-string 2 headline)
|
|
|
|
- (match-string 2 headline))
|
|
|
|
- " ") "")
|
|
|
|
- (match-string 4 headline)))
|
|
|
|
- (when content
|
|
|
|
|
|
+ ;; content formatting
|
|
|
|
+ (when content
|
|
(if (not (string-match "\\S-" content))
|
|
(if (not (string-match "\\S-" content))
|
|
(setq content nil)
|
|
(setq content nil)
|
|
(if (string-match "[ \t\n]+\\'" content)
|
|
(if (string-match "[ \t\n]+\\'" content)
|
|
(setq content (substring content 0 (match-beginning 0))))
|
|
(setq content (substring content 0 (match-beginning 0))))
|
|
- (setq content (org-remove-indentation content))
|
|
|
|
- (if latexp (setq content (concat "\\nbsp\\\\ \\quad " content)))))
|
|
|
|
- (insert (make-string (org-inlinetask-get-current-indentation) ?\ )
|
|
|
|
- "- ")
|
|
|
|
- (setq indent (make-string (current-column) ?\ ))
|
|
|
|
- (insert headline " :: ")
|
|
|
|
- (if content
|
|
|
|
- (insert (if htmlp " " (concat "\n" indent))
|
|
|
|
- (mapconcat 'identity (org-split-string content "\n")
|
|
|
|
- (concat "\n" indent)) "\n")
|
|
|
|
- (insert "\n"))
|
|
|
|
- (insert indent)
|
|
|
|
- (backward-delete-char 2)
|
|
|
|
- (insert "THISISTHEINLINELISTTEMINATOR\n"))))))
|
|
|
|
|
|
+ (setq content (org-remove-indentation content))))
|
|
|
|
+ (setq content (or content ""))
|
|
|
|
+ ;; grab elements to export
|
|
|
|
+ (when (string-match org-complex-heading-regexp headline)
|
|
|
|
+ (let* ((todo (or (match-string 2 headline) ""))
|
|
|
|
+ (class (or (and (eq "" todo) "")
|
|
|
|
+ (if (member todo org-done-keywords) "done" "todo")))
|
|
|
|
+ (priority (or (match-string 3 headline) ""))
|
|
|
|
+ (heading (or (match-string 4 headline) ""))
|
|
|
|
+ (tags (or (match-string 5 headline) ""))
|
|
|
|
+ (backend-spec (assq backend org-inlinetask-export-templates))
|
|
|
|
+ (format-str (nth 1 backend-spec))
|
|
|
|
+ (tokens (cadr (nth 2 backend-spec)))
|
|
|
|
+ ;; change nil arguments into empty strings
|
|
|
|
+ (nil-to-str (lambda (el) (or (eval el) "")))
|
|
|
|
+ ;; build and protect export string
|
|
|
|
+ (export-str (org-add-props
|
|
|
|
+ (eval (append '(format format-str)
|
|
|
|
+ (mapcar nil-to-str tokens)))
|
|
|
|
+ nil 'org-protected t)))
|
|
|
|
+ ;; eventually insert it
|
|
|
|
+ (insert export-str "\n")))))))
|
|
|
|
|
|
(defun org-inlinetask-get-current-indentation ()
|
|
(defun org-inlinetask-get-current-indentation ()
|
|
"Get the indentation of the last non-while line above this one."
|
|
"Get the indentation of the last non-while line above this one."
|
|
@@ -277,31 +328,11 @@ Either remove headline and meta data, or do special formatting."
|
|
org-inlinetask-min-level))
|
|
org-inlinetask-min-level))
|
|
(replace-match "")))
|
|
(replace-match "")))
|
|
|
|
|
|
-(defun org-inlinetask-remove-terminator ()
|
|
|
|
- (let (beg end)
|
|
|
|
- (save-excursion
|
|
|
|
- (goto-char (point-min))
|
|
|
|
- (while (re-search-forward "THISISTHEINLINELISTTEMINATOR\n" nil t)
|
|
|
|
- (setq beg (match-beginning 0) end (match-end 0))
|
|
|
|
- (save-excursion
|
|
|
|
- (beginning-of-line 1)
|
|
|
|
- (and (looking-at "<p\\(ara\\)?>THISISTHEINLINELISTTEMINATOR[ \t\n]*</p\\(ara\\)?>")
|
|
|
|
- (setq beg (point) end (match-end 0))))
|
|
|
|
- (delete-region beg end)))))
|
|
|
|
-
|
|
|
|
(eval-after-load "org-exp"
|
|
(eval-after-load "org-exp"
|
|
'(add-hook 'org-export-preprocess-after-tree-selection-hook
|
|
'(add-hook 'org-export-preprocess-after-tree-selection-hook
|
|
'org-inlinetask-export-handler))
|
|
'org-inlinetask-export-handler))
|
|
(eval-after-load "org"
|
|
(eval-after-load "org"
|
|
'(add-hook 'org-font-lock-hook 'org-inlinetask-fontify))
|
|
'(add-hook 'org-font-lock-hook 'org-inlinetask-fontify))
|
|
-(eval-after-load "org-html"
|
|
|
|
- '(add-hook 'org-export-html-final-hook 'org-inlinetask-remove-terminator))
|
|
|
|
-(eval-after-load "org-latex"
|
|
|
|
- '(add-hook 'org-export-latex-final-hook 'org-inlinetask-remove-terminator))
|
|
|
|
-(eval-after-load "org-ascii"
|
|
|
|
- '(add-hook 'org-export-ascii-final-hook 'org-inlinetask-remove-terminator))
|
|
|
|
-(eval-after-load "org-docbook"
|
|
|
|
- '(add-hook 'org-export-docbook-final-hook 'org-inlinetask-remove-terminator))
|
|
|
|
|
|
|
|
(provide 'org-inlinetask)
|
|
(provide 'org-inlinetask)
|
|
|
|
|