57366f385a
* Added muse * Added graphviz-dot-mode * Remove all trailing whitespace on save. This is the last commit I'm going to do before throwing it all away again.
88 lines
2.8 KiB
EmacsLisp
88 lines
2.8 KiB
EmacsLisp
;;; muse-import-xml.el --- common to all from-xml converters
|
|
|
|
;; Copyright (C) 2006, 2007, 2008, 2009, 2010
|
|
;; Free Software Foundation, Inc.
|
|
|
|
;; Author: Elena Pomohaci <e.pomohaci@gmail.com>
|
|
|
|
;; This file is part of Emacs Muse. It is not part of GNU Emacs.
|
|
|
|
;; Emacs Muse 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 3, or (at your
|
|
;; option) any later version.
|
|
|
|
;; Emacs Muse 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 Emacs Muse; see the file COPYING. If not, write to the
|
|
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
;; Boston, MA 02110-1301, USA.
|
|
|
|
;;; Commentary:
|
|
|
|
;;; Contributors:
|
|
|
|
;;; Code:
|
|
|
|
(provide 'muse-import-xml)
|
|
|
|
(require 'xml)
|
|
(require 'muse)
|
|
|
|
(defvar muse-import-xml-prefix ""
|
|
"The name prefix for tag functions")
|
|
|
|
(defvar muse-import-xml-generic-function-name "muse-import-xml-generic"
|
|
"The generic function name")
|
|
|
|
(defun muse-import-xml-convert-to-list (buf)
|
|
"Convert xml BUF in a xml-list"
|
|
(with-temp-buffer
|
|
(insert-buffer-substring buf)
|
|
(goto-char (point-min))
|
|
(while (re-search-forward ">[ \n\t]*<" nil t)
|
|
(replace-match "><" nil nil)) ; clean all superfluous blank characters
|
|
(xml-parse-region (point-min)
|
|
(point-max)
|
|
(current-buffer))))
|
|
|
|
|
|
(defun muse-import-xml-generic (node)
|
|
"The generic function called when there is no node specific function."
|
|
(let ((name (xml-node-name node)))
|
|
(insert "<" (symbol-name name) ">")
|
|
(muse-import-xml-node node)
|
|
(insert "</" (symbol-name name) ">")))
|
|
|
|
(defun muse-import-xml-parse-tree (lst)
|
|
"Parse an xml tree list"
|
|
(mapc #'muse-import-xml-parse-node lst))
|
|
|
|
(defun muse-import-xml-parse-node (node)
|
|
"Parse a xml tree node"
|
|
(if (stringp node)
|
|
(insert (muse-replace-regexp-in-string "^[ \t]+" "" node))
|
|
(let ((fname (intern-soft (concat muse-import-xml-prefix
|
|
(symbol-name (xml-node-name node))))))
|
|
(if (functionp fname)
|
|
(funcall fname node)
|
|
(funcall (intern muse-import-xml-generic-function-name) node)))))
|
|
|
|
|
|
(defun muse-import-xml-node (node)
|
|
"Default node function"
|
|
(muse-import-xml-parse-tree (xml-node-children node)))
|
|
|
|
|
|
(defun muse-import-xml (src dest)
|
|
"Convert the xml SRC buffer in a muse DEST buffer"
|
|
(set-buffer (get-buffer-create dest))
|
|
(when (fboundp 'muse-mode)
|
|
(muse-mode))
|
|
(muse-import-xml-parse-tree (muse-import-xml-convert-to-list src)))
|
|
|
|
;;; muse-import-xml.el ends here
|