32 |
32 |
33 |
33 |
34 /* string representation */ |
34 /* string representation */ |
35 |
35 |
36 private def append_text(text: String, s: StringBuilder) { |
36 private def append_text(text: String, s: StringBuilder) { |
37 if (text == null) s ++ text |
37 if (text == null) s ++= text |
38 else { |
38 else { |
39 for (c <- text.iterator) c match { |
39 for (c <- text.iterator) c match { |
40 case '<' => s ++ "<" |
40 case '<' => s ++= "<" |
41 case '>' => s ++ ">" |
41 case '>' => s ++= ">" |
42 case '&' => s ++ "&" |
42 case '&' => s ++= "&" |
43 case '"' => s ++ """ |
43 case '"' => s ++= """ |
44 case '\'' => s ++ "'" |
44 case '\'' => s ++= "'" |
45 case _ => s + c |
45 case _ => s += c |
46 } |
46 } |
47 } |
47 } |
48 } |
48 } |
49 |
49 |
50 private def append_elem(name: String, atts: Attributes, s: StringBuilder) { |
50 private def append_elem(name: String, atts: Attributes, s: StringBuilder) { |
51 s ++ name |
51 s ++= name |
52 for ((a, x) <- atts) { |
52 for ((a, x) <- atts) { |
53 s ++ " "; s ++ a; s ++ "=\""; append_text(x, s); s ++ "\"" |
53 s ++= " "; s ++= a; s ++= "=\""; append_text(x, s); s ++= "\"" |
54 } |
54 } |
55 } |
55 } |
56 |
56 |
57 private def append_tree(tree: Tree, s: StringBuilder) { |
57 private def append_tree(tree: Tree, s: StringBuilder) { |
58 tree match { |
58 tree match { |
59 case Elem(name, atts, Nil) => |
59 case Elem(name, atts, Nil) => |
60 s ++ "<"; append_elem(name, atts, s); s ++ "/>" |
60 s ++= "<"; append_elem(name, atts, s); s ++= "/>" |
61 case Elem(name, atts, ts) => |
61 case Elem(name, atts, ts) => |
62 s ++ "<"; append_elem(name, atts, s); s ++ ">" |
62 s ++= "<"; append_elem(name, atts, s); s ++= ">" |
63 for (t <- ts) append_tree(t, s) |
63 for (t <- ts) append_tree(t, s) |
64 s ++ "</"; s ++ name; s ++ ">" |
64 s ++= "</"; s ++= name; s ++= ">" |
65 case Text(text) => append_text(text, s) |
65 case Text(text) => append_text(text, s) |
66 } |
66 } |
67 } |
67 } |
68 |
68 |
69 |
69 |