diff --git a/src/main/scala/scala/xml/Utility.scala b/src/main/scala/scala/xml/Utility.scala index e9aa88de6..dc368d82f 100755 --- a/src/main/scala/scala/xml/Utility.scala +++ b/src/main/scala/scala/xml/Utility.scala @@ -113,25 +113,12 @@ object Utility extends AnyRef with parsing.TokenTests { final def escape(text: String, s: StringBuilder): StringBuilder = { // Implemented per XML spec: // http://www.w3.org/International/questions/qa-controls - // imperative code 3x-4x faster than current implementation - // dpp (David Pollak) 2010/02/03 - val len = text.length - var pos = 0 - while (pos < len) { - text.charAt(pos) match { - case '<' => s.append("<") - case '>' => s.append(">") - case '&' => s.append("&") - case '"' => s.append(""") - case '\n' => s.append('\n') - case '\r' => s.append('\r') - case '\t' => s.append('\t') - case c => if (c >= ' ') s.append(c) + text.iterator.foldLeft(s) { (s, c) => + escMap.get(c) match { + case Some(str) => s ++= str + case _ if c >= ' ' || "\n\r\t".contains(c) => s += c } - - pos += 1 } - s } /**