emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Nic <nferrier@tapsellferrier.co.uk>
To: emacs-orgmode@gnu.org
Subject: XOXO output (was Re: Other software development for Org-mode)
Date: Tue, 14 Mar 2006 11:36:14 +0000	[thread overview]
Message-ID: <87acbt5kcx.fsf@tapsellferrier.co.uk> (raw)
In-Reply-To: <043b729fad3b50297372c536319cc9c5@science.uva.nl> (Carsten Dominik's message of "Tue, 14 Mar 2006 11:39:25 +0100")

Carsten Dominik <dominik@science.uva.nl> 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	other threads:[~2006-03-14 12:02 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-14 10:39 Other software development for Org-mode Carsten Dominik
2006-03-14 11:36 ` Nic [this message]
2006-04-03  7:35   ` XOXO output (was Re: Other software development for Org-mode) Carsten Dominik
2006-04-03 12:53     ` XOXO output Nic
2006-04-04  7:57       ` Carsten Dominik
     [not found]         ` <871wwdbofv.fsf@tapsellferrier.co.uk>
2006-04-04 11:38           ` Carsten Dominik
     [not found]             ` <87y7yla61c.fsf@tapsellferrier.co.uk>
2006-04-04 12:25               ` Carsten Dominik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87acbt5kcx.fsf@tapsellferrier.co.uk \
    --to=nferrier@tapsellferrier.co.uk \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).