From 5cb2f3eb58a48c22bd4e56bdfd89e0591232295e Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Wed, 7 Nov 2012 16:03:04 -0700 Subject: [PATCH] Avoid regexp-replace* unless the string really contains escapable characters. --- collects/xml/private/writer.rkt | 8 ++++++++ collects/xml/private/xexpr.rkt | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/collects/xml/private/writer.rkt b/collects/xml/private/writer.rkt index 7443ccf236..4b06e7611f 100644 --- a/collects/xml/private/writer.rkt +++ b/collects/xml/private/writer.rkt @@ -168,7 +168,15 @@ (define (escape x table) (regexp-replace* table x replace-escaped)) +(define (display/escape x table out) + (cond [(regexp-match table x) + (display (escape x table) out)] + [else + (display x out)])) + + (provide escape + display/escape escape-table escape-attribute-table lowercase-symbol diff --git a/collects/xml/private/xexpr.rkt b/collects/xml/private/xexpr.rkt index 67112dbaa2..349a1a60df 100644 --- a/collects/xml/private/xexpr.rkt +++ b/collects/xml/private/xexpr.rkt @@ -141,7 +141,7 @@ (display (car att) out) (display "=" out) (display "\"" out) - (display (escape (cadr att) escape-attribute-table) out) + (display/escape (cadr att) escape-attribute-table out) (display "\"" out)) ; Write end of opening tag (if (and (null? content) @@ -161,7 +161,7 @@ (display ">" out)))] ; PCData [(string? x) - (display (escape x escape-table) out)] + (display/escape x escape-table out)] ; Entities [(symbol? x) (display "&" out)