emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

XOXO output (was Re: [Emacs-orgmode] Other software development for Org-


From: Nic
Subject: XOXO output (was Re: [Emacs-orgmode] Other software development for Org-mode)
Date: Tue, 14 Mar 2006 11:36:14 +0000

Carsten Dominik <address@hidden> writes:

> I know that a few people are developing add-on software for Org-mode.  
> Maybe it is useful to make a list of these, to avoid duplicate work and 
> allow for feedback.  I myself am aware of the following efforts.
>
>
> XML export, for example XOXO or OPM or OPML.
>      There is already a XOXO exporter by Nic Ferrier, he posted it on 
> Usenet some time ago.

I'm going to post it here because I want some feedback on it.

At the moment it outputs a simple XOXO view of an outline. It does not
handle org-mode content when it breaks away from an outline.

There's a reason for that: XOXO (and OPM and OPML) only specify the
outline format... nothing else.

So the question is: what do people want the non-outline org-mode
content to look like in an XOXO view?

- something like is already in org-mode's HTML output

- simpler XHTML

- something else entirely?


Btw... an XOXO exporter would be better than the current HTML exporter
because it would be more flexible. Using an XML transform (maybe XSLT,
maybe something else) on the exported XOXO could render the existing
HTML as well as any other HTML or XML.


Anyway... the source is at the bottom of this mail.



Nic



;; An org mode extension
;; Copyright (C) 2005 by Tapsell-Ferrier Limited

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.


(defun org-export-as-xoxo-insert-into (buffer &rest output)
  (with-current-buffer buffer
    (apply 'insert output)))

(defun org-export-as-xoxo (&optional buffer)
  "Export the org buffer as XOXO.
The XOXO buffer is named *xoxo-<source buffer name>*"
  (interactive (list (current-buffer)))
  ;; A quickie abstraction

  ;; Output everything as XOXO
  (with-current-buffer (get-buffer buffer)
    (beginning-of-buffer)
    (let ((out (get-buffer-create (concat "*xoxo-" (buffer-name buffer) "*")))
          (last-level 1)
          (hanging-li nil))
      ;; Check the output buffer is empty.
      (with-current-buffer out
        (delete-region (point-min) (point-max)))
      ;; Kick off the output
      (org-export-as-xoxo-insert-into out "<ol class='xoxo'>\n")
      (while (re-search-forward "^\\(\\*+\\) \\(.+\\)" (point-max) 't)
        (let* ((hd (match-string-no-properties 1))
               (level (length hd))
               (text (concat
                      (match-string-no-properties 2)
                      (save-excursion
                        (goto-char (match-end 0))
                        (let ((str ""))
                          (catch 'loop
                            (while 't
                              (forward-line)
                              (if (looking-at "^[ \t]\\(.*\\)")
                                  (setq str (concat str 
(match-string-no-properties 1)))
                                (throw 'loop str)))))))))

          ;; Handle level rendering
          (cond
           ((> level last-level)
            (org-export-as-xoxo-insert-into out "\n<ol>\n"))
           
           ((< level last-level)
            (dotimes (- (- last-level level) 1)
              (if hanging-li
                  (org-export-as-xoxo-insert-into out "</li>\n"))
              (org-export-as-xoxo-insert-into out "</ol>\n"))
            (when hanging-li
              (org-export-as-xoxo-insert-into out "</li>\n")
              (setq hanging-li nil)))

           ((equal level last-level)
            (if hanging-li
                (org-export-as-xoxo-insert-into out "</li>\n")))
           )
          
          (setq last-level level)

          ;; And output the new li
          (setq hanging-li 't)
          (if (equal ?+ (elt text 0))
              (org-export-as-xoxo-insert-into out "<li class='" (substring text 
1) "'>")
            (org-export-as-xoxo-insert-into out "<li>" text))))

      ;; Finally finish off the ol
      (dotimes (- last-level 1)
        (if hanging-li
            (org-export-as-xoxo-insert-into out "</li>\n"))
        (org-export-as-xoxo-insert-into out "</ol>\n"))

      ;; Finish the buffer off and clean it up.
      (switch-to-buffer out)
      (xml-mode)
      (indent-region (point-min) (point-max))
      )))


      





reply via email to

[Prev in Thread] Current Thread [Next in Thread]