From 08abd8e23565f634577d9faf6ced66bb78d5006f Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 13 Mar 2014 11:14:30 -0700 Subject: [PATCH] updates --- main.rkt | 22 +++++++++++----------- scribblings/txexpr.scrbl | 16 +++++++--------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/main.rkt b/main.rkt index ada70f3..ba82b6a 100644 --- a/main.rkt +++ b/main.rkt @@ -27,7 +27,7 @@ [else #f])) -(define (validate-txexpr-attrs? x #:context [txexpr-context #f]) +(define (validate-txexpr-attrs x #:context [txexpr-context #f]) ; ((any/c) (#:context (or/c #f txexpr?)) . ->* . txexpr-attrs?) (define (make-reason) (if (not (list? x)) @@ -45,7 +45,7 @@ (define+provide+safe (txexpr-attrs? x) (any/c . -> . boolean?) (with-handlers ([exn:fail? (λ(exn) #f)]) - (and (validate-txexpr-attrs? x) #t))) + (and (validate-txexpr-attrs x) #t))) (define+provide+safe (txexpr-elements? x) @@ -54,7 +54,7 @@ [(list elem ...) (andmap txexpr-element? elem)] [else #f])) -(define (validate-txexpr-element? x #:context [txexpr-context #f]) +(define (validate-txexpr-element x #:context [txexpr-context #f]) ; ((any/c) (#:context (or/c #f txexpr?)) . ->* . txexpr-element?) (cond [(or (string? x) (txexpr? x) (symbol? x) @@ -67,28 +67,28 @@ (define+provide+safe (txexpr-element? x) (any/c . -> . boolean?) (with-handlers ([exn:fail? (λ(exn) #f)]) - (and (validate-txexpr-element? x) #t))) + (and (validate-txexpr-element x) #t))) ;; is it a named x-expression? ;; todo: rewrite this recurively so errors can be pinpointed (for debugging) -(define+provide+safe (validate-txexpr? x) +(define+provide+safe (validate-txexpr x) (any/c . -> . txexpr?) - (define (validate-txexpr-element-with-context? e) (validate-txexpr-element? e #:context x)) - (define (validate-txexpr-attrs-with-context? e) (validate-txexpr-attrs? e #:context x)) + (define (validate-txexpr-element-with-context e) (validate-txexpr-element e #:context x)) + (define (validate-txexpr-attrs-with-context e) (validate-txexpr-attrs e #:context x)) (when (match x [(list (? symbol?)) #t] [(list (? symbol? name) (and attr-list (list (list k v ...) ...)) rest ...) - (and (validate-txexpr-attrs-with-context? attr-list) - (andmap validate-txexpr-element-with-context? rest))] - [(list (? symbol? name) rest ...)(andmap validate-txexpr-element-with-context? rest)] + (and (validate-txexpr-attrs-with-context attr-list) + (andmap validate-txexpr-element-with-context rest))] + [(list (? symbol? name) rest ...)(andmap validate-txexpr-element-with-context rest)] [else (error (format "validate-txexpr: first element is not a symbol in ~v" x))]) x)) (define+provide+safe (txexpr? x) (any/c . -> . boolean?) (with-handlers ([exn:fail? (λ(exn) #f)]) - (and (validate-txexpr? x) #t))) + (and (validate-txexpr x) #t))) diff --git a/scribblings/txexpr.scrbl b/scribblings/txexpr.scrbl index 26ba59c..146d113 100644 --- a/scribblings/txexpr.scrbl +++ b/scribblings/txexpr.scrbl @@ -146,20 +146,18 @@ boolean?] Shorthand for @code{(listof txexpr-attr?)} and @code{(listof txexpr-element?)}. -@deftogether[( @defproc[ -(validate-txexpr? +(validate-txexpr [possible-txexpr any/c]) txexpr?] +Like @racket[txexpr?], but raises a descriptive error if @racket[_possible-txexpr] is invalid, and otherwise returns @racket[_possible-txexpr] itself. - -@defproc[ -(can-be-txexpr-attr-value? -[v any/c]) -boolean?] -)] -Predicates for input arguments that are trivially converted to an attribute @racket[_key] or @racket[_value]… +@examples[#:eval my-eval +(validate-txexpr '(root (mama.html son.html daughter.html) uncle.html)) +(validate-txexpr `(root (,+ son.html daughter.html) uncle.html)) +(validate-txexpr '(root (mama.html son.html son.html) mama.html)) +]