diff --git a/quad/quad/qexpr.rkt b/quad/quad/qexpr.rkt index 1f1cf3cf..ed56f23d 100644 --- a/quad/quad/qexpr.rkt +++ b/quad/quad/qexpr.rkt @@ -4,6 +4,7 @@ racket/string racket/match racket/list + racket/path txexpr "quad.rkt") (provide (all-defined-out)) @@ -62,7 +63,7 @@ (define (hash->qattrs attr-hash) (for/list ([(k v) (in-dict (hash->list attr-hash))]) - (list k (format "~a" v)))) + (list k (format "~a" v)))) (define (quad->qexpr q) (let loop ([x q]) @@ -80,14 +81,14 @@ [(list (? txexpr-attrs? attrs) (? qexpr? elems) ...) (define mheq (make-hasheq)) ; want mutable hash (for ([kv (in-list attrs)]) - (match-define (list k v) kv) - ;; coerce number strings to actual numbers - ;; this misbehaves on a list index like "1." which becomes 1.0 - (hash-set! mheq k (cond - [(equal? v "true") #true] - [(equal? v "false") #false] - [(string->number v)] - [else v]))) + (match-define (list k v) kv) + ;; coerce number strings to actual numbers + ;; this misbehaves on a list index like "1." which becomes 1.0 + (hash-set! mheq k (cond + [(equal? v "true") #true] + [(equal? v "false") #false] + [(string->number v)] + [else v]))) (make-quad #:tag tag #:attrs mheq #:elems (map loop elems))] @@ -102,6 +103,21 @@ (qexpr->quad `(q ((font "charter") (fontsize "12")) (q "Foo bar") ,(make-quad "zzz") (q "Zim Zam"))) (q (hasheq 'font "charter" 'fontsize 12) (q "Foo bar") (q "zzz") (q "Zim Zam"))))) +(define qml-extension #".qml") +(define (qml-path? x) + (and (or (path-string? x) (path-for-some-system? x)) + (for/or ([ext (in-list (list qml-extension + (string->bytes/utf-8 + (string-upcase + (bytes->string/utf-8 qml-extension)))))]) + (path-has-extension? x ext)))) + +(module+ test + (check-true (qml-path? "foo.qml")) + (check-true (qml-path? "foo.QML")) + (check-false (qml-path? "foo.QmL")) + (check-false (qml-path? "foo.qmla"))) + (define (qml->qexpr x) (parameterize ([permissive-xexprs #t] [xexpr-drop-empty-attributes #t])