@@ -136,7 +136,7 @@ public struct Renderer {
136136 try render ( modifier: modifier, on: & result)
137137
138138 case let value as EnvironmentValue :
139- result += escape ( tainted : . init ( try render ( envvalue : value) , as : . html ( . element ) ) )
139+ result += try render ( envelement : value)
140140
141141 case let statement as Statement :
142142 try render ( statement: statement, on: & result)
@@ -352,9 +352,9 @@ public struct Renderer {
352352 /// - Parameter value: The environment value to resolve
353353 ///
354354 /// - Returns: The string representation
355- private func render( envvalue : EnvironmentValue ) throws -> String {
355+ private func render( envattribute value : EnvironmentValue ) throws -> String {
356356
357- let value = try self . environment. resolve ( value: envvalue )
357+ let value = try self . environment. resolve ( value: value )
358358
359359 switch value {
360360 case let floatValue as Float :
@@ -367,7 +367,43 @@ public struct Renderer {
367367 return String ( doubleValue)
368368
369369 case let stringValue as String :
370- return stringValue
370+ return escape ( tainted: . init( stringValue, as: . html( . attribute) ) )
371+
372+ case let dateValue as Date :
373+
374+ let formatter = DateFormatter ( )
375+ formatter. timeZone = environment. timeZone ?? TimeZone . current
376+ formatter. dateStyle = . medium
377+ formatter. timeStyle = . short
378+
379+ return formatter. string ( from: dateValue)
380+
381+ default :
382+ throw Error . unknownValueType
383+ }
384+ }
385+
386+ /// Renders a environment value
387+ ///
388+ /// - Parameter value: The environment value to resolve
389+ ///
390+ /// - Returns: The string representation
391+ private func render( envelement value: EnvironmentValue ) throws -> String {
392+
393+ let value = try self . environment. resolve ( value: value)
394+
395+ switch value {
396+ case let floatValue as Float :
397+ return String ( floatValue)
398+
399+ case let intValue as Int :
400+ return String ( intValue)
401+
402+ case let doubleValue as Double :
403+ return String ( doubleValue)
404+
405+ case let stringValue as String :
406+ return escape ( tainted: . init( stringValue, as: . html( . element) ) )
371407
372408 case let dateValue as Date :
373409
@@ -433,13 +469,16 @@ public struct Renderer {
433469 result += try render ( localized: string)
434470
435471 case let value as EnvironmentValue :
436- result += escape ( tainted : . init ( try render ( envvalue : value) , as : . html ( . attribute ) ) )
472+ result += try render ( envattribute : value)
437473
438474 case let string as TaintedString :
439475 result += escape ( tainted: string)
440476
477+ case let string as String :
478+ result += escape ( tainted: . init( string, as: . html( . attribute) ) )
479+
441480 default :
442- result += escape ( tainted : . init ( " \( attribute. value) " , as : . html ( . attribute ) ) )
481+ result += " \( attribute. value) "
443482 }
444483
445484 result += " \" "
@@ -536,7 +575,7 @@ public struct Renderer {
536575 result += String ( doubleValue)
537576
538577 case let stringValue as String :
539- result += stringValue
578+ result += escape ( tainted : . init ( stringValue, as : . html ( . element ) ) )
540579
541580 case let dateValue as Date :
542581
0 commit comments