37 lines
1.0 KiB
Racket
37 lines
1.0 KiB
Racket
#lang racket/base
|
|
(require racket/contract/base)
|
|
|
|
;; Core structures needed for `xml/xexpr'
|
|
|
|
(provide (all-defined-out))
|
|
|
|
; permissive-xexprs : parameter bool
|
|
(define permissive-xexprs (make-parameter #f))
|
|
|
|
; Source = (make-source Location Location)
|
|
(define-struct source (start stop) #:transparent)
|
|
|
|
; Comment = (make-comment String)
|
|
(define-struct comment (text) #:transparent)
|
|
|
|
; Processing-instruction = (make-p-i Location Location String String)
|
|
; also represents XMLDecl
|
|
(define-struct (p-i source) (target-name instruction) #:transparent)
|
|
|
|
; Pcdata = (make-pcdata Location Location String)
|
|
(define-struct (pcdata source) (string) #:transparent)
|
|
|
|
; Cdata = (make-cdata Location Location String)
|
|
(define-struct (cdata source) (string) #:transparent)
|
|
|
|
; Section 2.2 of XML 1.1
|
|
; (XML 1.0 is slightly different and looks less restrictive)
|
|
(define (valid-char? i)
|
|
(and (exact-nonnegative-integer? i)
|
|
(or (= i #x9)
|
|
(= i #xA)
|
|
(= i #xD)
|
|
(<= #x20 i #xD7FF)
|
|
(<= #xE000 i #xFFFD)
|
|
(<= #x10000 i #x10FFFF))))
|