Default SGML/XML browser display

Subject: Default SGML/XML browser display
From: "Didier PH Martin" <martind@xxxxxxxxxxxxx>
Date: Wed, 17 Feb 1999 12:32:00 -0500
HI,

With the help of David Pawson (who gave me the right hint) I debugged the
dsssl script that displays the SGML/XML document.

The following script displays a SGML/XML document showing its structure with
indentation. In the next SGML/XML kit, I'll include it to display a SGML or
XML document by default if no style sheet is associated to the document.
Since then, here is the script. If you have the latest SGML/XML kit just
include the following PI in you SGML/XML document.

SGML:
<?stylesheet href="default.dsl" type="text/dsssl" media="screen">

XML:
<?xml-stylesheet href="default.dsl" type="text/dsssl" media="screen"?>

Note: I gave it the name "default.dsl" to this script, you may change it to
the name you want.

If you have any suggestion to improve it, don't hesitate, make a post.

dsssl Script:
---------------------------------------------------------------------------
<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN">

(define *rgb-color-space*
  (color-space "ISO/IEC 10179:1996//Color-Space Family::Device RGB"))

 (define primary-blue-color
  (color *rgb-color-space* (/ 25 255) (/ 25 255) (/ 255 255)))

(define %single-indent% 20pt)

(define (copy-attributes nd indent)
  (let loop ((atts (named-node-list-names (attributes nd)))
             (resultstr ""))
    (if (null? atts)
        resultstr
        (loop
          (cdr atts)
          (let* ((name (car atts))
                 (value (attribute-string name nd)))
            (if value
              (string-append
                resultstr
                "&#RE;"
                indent
                name
                "=\""
                value
                "\"")
              resultstr))))))

(define (ancestors nl)
  (node-list-map
    (lambda (snl)
      (let loop
        ((cur (parent snl))
         (result (empty-node-list)))
        (if (node-list-empty? cur)
          result
          (loop (parent cur)
                (node-list cur result)))))
    nl))

(root
  (make scroll
    (process-children)))

(default
      (sosofo-append
      (make paragraph
        color: primary-blue-color
	  start-indent: (* (node-list-length(ancestors(current-node)))
%single-indent%)
        (literal
          "<"
          (gi (current-node))
          (copy-attributes (current-node) (string-append "  "))
          ">"))
      (make paragraph
        lines: 'asis
	start-indent: (* (node-list-length(ancestors(current-node)))
%single-indent%)
        (process-children))
      (if (node-property 'must-omit-end-tag?   (current-node))
        (empty-sosofo)
        (make paragraph
          color: primary-blue-color
	    start-indent: (* (node-list-length(ancestors(current-node)))
%single-indent%)
          (literal
            "</"
            (gi (current-node))
            ">")))))



 DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist


Current Thread