Mercurial > hg > xemacs-beta
diff lisp/w3/dsssl-flow.el @ 134:34a5b81f86ba r20-2b1
Import from CVS: tag r20-2b1
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:30:11 +0200 |
parents | |
children | b980b6286996 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/w3/dsssl-flow.el Mon Aug 13 09:30:11 2007 +0200 @@ -0,0 +1,119 @@ +;;; dsssl-flow.el --- DSSSL flow objects +;; Author: wmperry +;; Created: 1997/04/18 13:48:10 +;; Version: 1.2 +;; Keywords: + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Copyright (c) 1996, 1997 by William M. Perry (wmperry@cs.indiana.edu) +;;; Copyright (c) 1997 by Free Software Foundation, Inc. +;;; +;;; This file is part of GNU Emacs. +;;; +;;; GNU Emacs 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. +;;; +;;; GNU Emacs 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. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defstruct flow-object + (type 'unknown :read-only t) ; Name of this flow object + (properties nil) + (children nil) + (parent nil) + ) + +(defstruct dsssl-flow-processor + (name 'unknown :read-only t) ; Name of this processing backend + (init nil) ; initialize the backend + (handler nil) ; handle a single flow object + (sizeof nil) ; get size of a single flow object + (clean nil) ; cleanup instance of backend + ) + +(defun dsssl-flow-display (flows processor) + (let ((handler (dsssl-flow-processor-handler processor)) + (flow-stack (list flows)) + (content nil) + (node nil) + (last-object nil) + ) + (while flow-stack + (setq content (pop flow-stack)) + (dsssl-flow-progress-meter) + ;; Handle the element's content + (while content + (dsssl-flow-progress-meter) + (if (stringp (car content)) + (dsssl-flow-handle-string-content (pop content)) + (setq node (pop content)) + ;; todo: collect all information about this flow object for faster + ;; lookup later. + (push (dsssl-flow-face-for-element node) dsssl-flow-active-faces) + (push (dsssl-flow-voice-for-element node) dsssl-flow-active-voices)) + (case (flow-object-type node) + ;; Core DSSL components basic flow object classes + (sequence ; 12.6.1 + ) + (display-group ; 12.6.2 + ) + (paragraph ; 12.6.6 + ) + (paragraph-break ; 12.6.7 + ) + (external-graphic ; 12.6.15 + ) + ;; DSSSL options required in DSSSL online + ;; Simple page flow object class + (simple-page-sequence ; 12.6.3 + ) + ;; Table flow object classes + (table ; 12.6.27.1 + ) + (table-part ; 12.6.27.2 + ) + (table-column ; 12.6.27.3 + ) + (table-row ; 12.6.27.5 + ) + (table-border ; 12.6.27.7 + ) + (table-cell ; 12.6.27.6 + ;; Do we need to handle table-cell at this level, or is that + ;; something that the display backend needs to handle, and we + ;; just query that in the `table-row' processor? + ) + ;; Online display flow object classes + (vertical-scroll ; 12.6.28.1 + ) + (multi-mode ; 12.6.28.2 + ) + (marginalia ; 12.6.28.4 + ) + ;; Emacs/W3 specific flow objects + (applet ; Wow, Java + ) + (script ; Scripts + (w3-handle-empty-tag)) + (form-element ; Any form element + ) + ;; pinhead, flame, and cookie can now all be handled by + ;; a stud-muffing DSSSL stylesheet - hooray! + + ;; Generic formatting - all things that can be fully specified + ;; by a CSS stylesheet. + (otherwise + ;; handle the content + (dsssl-flow-handle-content node))))))) + +(provide 'dsssl-flow)