(define-interface xml-structures-interface
  (export source-start
	  source-stop
	  make-location location? location-line location-char location-offset
	  make-document document? document-prolog document-element document-misc
	  make-prolog prolog? prolog-misc prolog-dtd prolog-misc2 
	  make-document-type document-type-name document-type-external 
	  external-dtd-system external-dtd/system?
	  make-external-dtd/public external-dtd/public? external-dtd/public-public 
	  make-external-dtd/system 
	  make-element element? element-name element-attributes element-content
	  make-attribute attribute? attribute-name attribute-value
	  make-pcdata pcdata? pcdata-string
	  make-entity entity? entity-text
	  make-pi pi? pi-target-name pi-instruction
	  make-comment comment? comment-text
	  content?
	  make-start-tag start-tag? start-tag-name start-tag-attrs
	  make-end-tag end-tag? end-tag-name))

(define-structure xml-structures xml-structures-interface
  (open scheme
	signals
	extended-ports
	define-record-types)
  (files structures))
   
(define-interface plt-compat-interface
  (export let-values
	  let*-values
	  add1 sub1
	  when unless
	  begin0
	  void
	  andmap
	  quicksort
	  make-parameter
	  let/ec call/ec
	  list* null
	  format
	  fprintf
	  regexp regexp-replace*
	  foldr
	  compose
	  open-output-string get-output-string
	  ))

(define-structure plt-compat plt-compat-interface
  (open scsh
	scheme
	string-lib
	structure-refs)
  (access big-scheme  ;; format
	  list-lib)       ;; fold
  (files plt))

(define-interface reader-interface
  (export read-xml
	  read-comments
	  collapse-whitespace))

(define-structure reader reader-interface
  (open scsh ;read-string
	scheme
	xml-structures
	i/o
	i/o-internal
	ports
	plt-compat
	byte-vectors
	signals)
  (files reader))

(define-interface writer-interface
  (export write-xml 
	  display-xml 
	  write-xml/content 
	  display-xml/content 
	  empty-tag-shorthand 
	  html-empty-tags))
   
(define-structure writer writer-interface
  (open scheme
	xml-structures
	signals
	plt-compat)
  (files writer))


(define-interface space-interface
  (export eliminate-whitespace))

(define-structure space space-interface
  (open scheme
	plt-compat
	signals
	list-lib
	xml-structures)
  (files space))

(define-interface xexpr-interface
  (export xml->xexpr 
	  xexpr->xml 
	  xexpr->string 
	  xexpr-drop-empty-attributes))

(define-structure xexpr xexpr-interface
  (open scheme
	plt-compat
	writer
	signals
	xml-structures)
  (files xexpr))

(define-structure xml (compound-interface xml-structures-interface
					  reader-interface
					  writer-interface
					  xexpr-interface
					  space-interface)
  (open scheme
	plt-compat
	xml-structures
	reader
	writer
	xexpr
	space))