diff --git a/collects/html/sgml-reader.rkt b/collects/html/sgml-reader.rkt index d5348e0569..c20289cea9 100644 --- a/collects/html/sgml-reader.rkt +++ b/collects/html/sgml-reader.rkt @@ -315,19 +315,24 @@ (list->string data)))) |# - +(define (lex-name* in) + (define os (open-output-string)) + (let loop () + (define ch (peek-char in)) + (when (name-char? ch) + (read-char in) + (display ch os) + (loop))) + (get-output-string os)) ;; lex-name : Input-port -> Symbol (define (lex-name in) - (let ([s (bytes->string/utf-8 (car (regexp-match #rx"^[a-zA-Z_:0-9&.-]*" in)))]) - (string->symbol - ;; Common case: string is already lowercased - (if (regexp-match-positions #rx"[A-Z]" s) - (string-downcase s) - s)))) + (string->symbol + (string-downcase + (lex-name* in)))) ;; lex-name/case-sensitive : Input-port -> Symbol (define (lex-name/case-sensitive in) - (let ([s (bytes->string/utf-8 (car (regexp-match #rx"^[a-zA-Z_:0-9&.-]*" in)))]) - (string->symbol s))) + (string->symbol + (lex-name* in))) #| (define (lex-name in) (string->symbol