diff options
Diffstat (limited to 'emacs.d/elisp/muse/muse-import-xml.el')
-rw-r--r-- | emacs.d/elisp/muse/muse-import-xml.el | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/emacs.d/elisp/muse/muse-import-xml.el b/emacs.d/elisp/muse/muse-import-xml.el new file mode 100644 index 0000000..2579ce8 --- /dev/null +++ b/emacs.d/elisp/muse/muse-import-xml.el @@ -0,0 +1,88 @@ +;;; 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 |