24 Symbol.bsup -> "<sup>", Symbol.bsup_decoded -> "<sup>", |
24 Symbol.bsup -> "<sup>", Symbol.bsup_decoded -> "<sup>", |
25 Symbol.esup -> "</sup>", Symbol.esup_decoded -> "</sup>") |
25 Symbol.esup -> "</sup>", Symbol.esup_decoded -> "</sup>") |
26 |
26 |
27 def is_control(sym: Symbol.Symbol): Boolean = control.isDefinedAt(sym) |
27 def is_control(sym: Symbol.Symbol): Boolean = control.isDefinedAt(sym) |
28 |
28 |
29 def output(text: String, s: StringBuilder, hidden: Boolean) |
29 def output_char_permissive(c: Char, s: StringBuilder) |
30 { |
30 { |
|
31 c match { |
|
32 case '<' => s ++= "<" |
|
33 case '>' => s ++= ">" |
|
34 case '&' => s ++= "&" |
|
35 case _ => s += c |
|
36 } |
|
37 } |
|
38 |
|
39 def output(text: String, s: StringBuilder, hidden: Boolean, permissive: Boolean) |
|
40 { |
|
41 def output_char(c: Char): Unit = |
|
42 if (permissive) output_char_permissive(c, s) |
|
43 else XML.output_char(c, s) |
|
44 |
|
45 def output_string(str: String): Unit = |
|
46 str.iterator.foreach(output_char) |
|
47 |
31 def output_hidden(body: => Unit): Unit = |
48 def output_hidden(body: => Unit): Unit = |
32 if (hidden) { s ++= "<span class=\"hidden\">"; body; s ++= "</span>" } |
49 if (hidden) { s ++= "<span class=\"hidden\">"; body; s ++= "</span>" } |
33 |
50 |
34 def output_symbol(sym: Symbol.Symbol): Unit = |
51 def output_symbol(sym: Symbol.Symbol): Unit = |
35 if (sym != "") { |
52 if (sym != "") { |
36 control_block.get(sym) match { |
53 control_block.get(sym) match { |
37 case Some(html) if html.startsWith("</") => |
54 case Some(html) if html.startsWith("</") => |
38 s ++= html; output_hidden(XML.output_string(sym, s)) |
55 s ++= html; output_hidden(output_string(sym)) |
39 case Some(html) => |
56 case Some(html) => |
40 output_hidden(XML.output_string(sym, s)); s ++= html |
57 output_hidden(output_string(sym)); s ++= html |
41 case None => |
58 case None => |
42 XML.output_string(sym, s) |
59 output_string(sym) |
43 } |
60 } |
44 } |
61 } |
45 |
62 |
46 var ctrl = "" |
63 var ctrl = "" |
47 for (sym <- Symbol.iterator(text)) { |
64 for (sym <- Symbol.iterator(text)) { |
76 { |
94 { |
77 def elem(markup: Markup) |
95 def elem(markup: Markup) |
78 { |
96 { |
79 s ++= markup.name |
97 s ++= markup.name |
80 for ((a, b) <- markup.properties) { |
98 for ((a, b) <- markup.properties) { |
81 s += ' '; s ++= a; s += '='; s += '"'; output(b, s, hidden); s += '"' |
99 s += ' ' |
|
100 s ++= a |
|
101 s += '=' |
|
102 s += '"' |
|
103 output(b, s, hidden = hidden, permissive = false) |
|
104 s += '"' |
82 } |
105 } |
83 } |
106 } |
84 def tree(t: XML.Tree): Unit = |
107 def tree(t: XML.Tree): Unit = |
85 t match { |
108 t match { |
86 case XML.Elem(markup, Nil) => |
109 case XML.Elem(markup, Nil) => |
90 s += '<'; elem(markup); s += '>' |
113 s += '<'; elem(markup); s += '>' |
91 ts.foreach(tree) |
114 ts.foreach(tree) |
92 s ++= "</"; s ++= markup.name; s += '>' |
115 s ++= "</"; s ++= markup.name; s += '>' |
93 if (structural_elements(markup.name)) s += '\n' |
116 if (structural_elements(markup.name)) s += '\n' |
94 case XML.Text(txt) => |
117 case XML.Text(txt) => |
95 output(txt, s, hidden) |
118 output(txt, s, hidden = hidden, permissive = true) |
96 } |
119 } |
97 body.foreach(tree) |
120 body.foreach(tree) |
98 } |
121 } |
99 |
122 |
100 def output(body: XML.Body, hidden: Boolean): String = |
123 def output(body: XML.Body, hidden: Boolean): String = |