[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [docbook-apps] Docbook Editors
On date Monday 2007-07-02 22:11:21 +0000, W. Borgert wrote: > On Mon, Jul 02, 2007 at 02:27:52PM +0200, Stefano Sabatini wrote: > > Unfortunately both seem to lack tagging feature, to show up the layout > > of the document displayed, which is fundamental to me while editing a > > complex document, to understand where I am and to easily jump from one > > section to another one > > One could make use of "imenu" and/or "speedbar". imenu and > speedbar are parts of Emacs 21 and 22, AFAIK. Try this: > > (require 'imenu) > (require 'speedbar) > (defvar dbk-imenu-generic-expression nil > "Imenu generic expression for DocBook. See `imenu-generic-expression'.") > (add-hook 'nxml-mode-hook > (lambda () > (speedbar-add-supported-extension ".dbk") > (setq dbk-imenu-generic-expression > '((nil > "^[ \t]*<title>\\(.*\\)</title>" > 1))) > (setq imenu-generic-expression dbk-imenu-generic-expression > imenu-case-fold-search nil) > (imenu-add-to-menubar "DocBook"))) > > Now call M-x speedbar, when you are in nxml-mode. It does not > really reflect the document structure, but maybe it helps a bit > to see all titles in the right order. speedbar lets you jump to > the right place, as does the menu "DocBook". Thank you, it helped much :-). I elaborated a very basic derived mode (attached) with the imenu tagging for the titles. Then I discovered the function: nxml-hide-all-text-content which shows in the editing buffer the outline of the whole document. My ideal solution would be to find a way to use semantic to analyze somehow these tags to show up in the speedbar or in the ECB methods buffer this outline. Kind regards. -- Stefano Sabatini Linux user number 337176 (see http://counter.li.org)
;;; nxml-docbook-mode.el --- Simple major mode for XML Docbook ;; Copyright (C) 2007 Free Software Foundation, Inc. ;; Author: Stefano Sabatini ;; Keywords: XML, docbook ;; This file 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 file 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 GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (defvar nxml-docbook-mode-hook nil "A hook that is run after nxml-docbook-mode is activated in a buffer.") (defvar nxml-docbook-mode-map-prefix "\C-cd" "The prefix to each command defined in the `nxml-docbook-mode-map' keymap.") (defmacro define-key-with-prefix (map key def prefix) `(define-key ,map (concat ,prefix ,key) ,def)) (defvar nxml-docbook-mode-map (let ((map (make-sparse-keymap)) (prefix nxml-docbook-mode-map-prefix)) (define-key-with-prefix map "iv" 'nxml-docbook-insert-variablelist prefix) (define-key-with-prefix map "ie" 'nxml-docbook-insert-varlistentry prefix) (define-key-with-prefix map "ip" 'nxml-docbook-insert-para prefix) map) "Keymap for `nxml-docbook-mode'.") (defmacro nxml-docbook-define-key (key def) `(define-key nxml-docbook-mode-map (concat nxml-docbook-mode-map-prefix ,key) ,def)) (defvar nxml-docbook-imenu-generic-expression '((nil "^[ \t]*<title>\\(.*\\)</title>" 1)) "Imenu generic expression for XML Docbook. It catches only titles, wherever they are placed in the document layout (section, chapters, etc). See `imenu-generic-expression'.") (defvar nxml-docbook-show-menu nil "Tells if to add a menu to the menubar with NXML docbook mode stuff.") ;;;###autoload (define-derived-mode nxml-docbook-mode nxml-mode "NXML Docbook" "A major mode for editing XML Docbook files, derived from NXML mode." (set (make-local-variable 'imenu-generic-expression) nxml-docbook-imenu-generic-expression) (if nxml-docbook-show-menu (imenu-add-to-menubar "NXML Docbook"))) (defmacro read-not-empty-string (body) `(let ((string (read-string ,body))) (if (equal string "") nil string))) (defun nxml-docbook-insert-variablelist (&optional title) "Insert at the current position the skeleton of a docbook variabelist entry. If the title is specified an element with the title will also be inserted." (interactive) (let* ((title (if (null title) (read-not-empty-string "title of the variablelist: "))) (title-skeleton (if title '((concat "<title>" title "</title>") > \n) nil))) (skeleton-insert `(nil "<variablelist>" > \n ,@title-skeleton > _ \n "</variablelist>" > \n \n )))) (defun nxml-docbook-insert-varlistentry() (interactive) (let ((term (read-not-empty-string "term of the varlistentry: "))) (skeleton-insert '(nil "<varlistentry>" \n "<term>" term "</term>" \n "<listitem>" \n "<para>" \n _ \n "</para>" > \n "</listitem>" > \n "</varlistentry>" > \n \n)))) (defun nxml-docbook-insert-para() (interactive) (skeleton-insert '(nil "<para>" > \n > _ \n "</para>" > \n \n ))) ;; (defun nxml-docbook-render () ;; "Renders the current XML document into HTML." ;; (interactive) ;; (if (buffer-modified-p) ;; (error "Buffer has been modified. Save your changes first!")) ;; (message "Rendering document into HTML ...") ;; (my-background-shell-command (format "db2html %s" (buffer-file-name)))) (provide 'nxml-docbook-mode) ;;; nxml-docbook.el ends here
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]