Class: Koara::Xml::XmlRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/koara/xml/xmlrenderer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#declaration_tagObject

Returns the value of attribute declaration_tag.



5
6
7
# File 'lib/koara/xml/xmlrenderer.rb', line 5

def declaration_tag
  @declaration_tag
end

#hard_wrapObject

Returns the value of attribute hard_wrap.



6
7
8
# File 'lib/koara/xml/xmlrenderer.rb', line 6

def hard_wrap
  @hard_wrap
end

Instance Method Details

#escape(text) ⇒ Object



200
201
202
203
204
205
# File 'lib/koara/xml/xmlrenderer.rb', line 200

def escape(text)
  text.gsub('&', '&')
      .gsub('<', '&lt;')
      .gsub('>', '&gt;')
      .gsub('"', '&quot;')
end

#escape_url(text) ⇒ Object



182
183
184
185
186
187
188
189
190
191
# File 'lib/koara/xml/xmlrenderer.rb', line 182

def escape_url(text)
  return text.gsub(' ', '%20')
             .gsub("\"", '%22')
             .gsub('`', '%60')
             .gsub('<', '%3C')
             .gsub('>', '%3E')
             .gsub('[', '%5B')
             .gsub(']', '%5D')
             .gsub("\\", '%5C')
end

#indentObject



193
194
195
196
197
198
# File 'lib/koara/xml/xmlrenderer.rb', line 193

def indent
  repeat = @level * 2
  repeat.times {
    @out << ' '
  }
end

#outputObject



207
208
209
# File 'lib/koara/xml/xmlrenderer.rb', line 207

def output
  @out.string
end

#visit_block_element(node) ⇒ Object



116
117
# File 'lib/koara/xml/xmlrenderer.rb', line 116

def visit_block_element(node)
end

#visit_blockquote(node) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/koara/xml/xmlrenderer.rb', line 40

def visit_blockquote(node)
  @level+=1
  indent
  @out << '<blockquote'
  if node.children && node.children.length > 0
    @out << ">\n"
    @level+=1
    node.children_accept(self)
    @level-=1
    indent
    @out << "</blockquote>\n"
    @level-=1
  else
    @out << " />\n"
  end
end

#visit_code(node) ⇒ Object



166
167
168
169
170
171
172
173
174
# File 'lib/koara/xml/xmlrenderer.rb', line 166

def visit_code(node)
  indent
  @out << "<code>\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</code>\n"
end

#visit_codeblock(node) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/koara/xml/xmlrenderer.rb', line 85

def visit_codeblock(node)
  @level += 1
  indent
  @out << "<codeblock"
  if node.language
    @out << " language=\"#{escape(node.language)}\""
  end
  if node.value && node.value.length > 0
    @out << ">"
    @level += 1
    @out << escape(node.value)
    @level -= 1
    @out << "</codeblock>\n"
  else
    @out << " />\n"
  end
  @level -= 1
end

#visit_document(node) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/koara/xml/xmlrenderer.rb', line 8

def visit_document(node)
  @level = 0
  @out = StringIO.new
  if @declaration_tag
    @out << @declaration_tag + "\n"
  end
  if node.children && node.children.length > 0
    @out << "<document>\n"
    node.children_accept(self)
    @out << '</document>'
  else
    @out << '<document />'
  end
end

#visit_em(node) ⇒ Object



156
157
158
159
160
161
162
163
164
# File 'lib/koara/xml/xmlrenderer.rb', line 156

def visit_em(node)
  indent
  @out << "<em>\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</em>\n"
end

#visit_heading(node) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/koara/xml/xmlrenderer.rb', line 23

def visit_heading(node)
  @level += 1
  indent
  @out << "<heading level=\"#{node.value}\""
  if node.children && node.children.length > 0
    @out << ">\n"
    @level += 1
    node.children_accept(self)
    @level -= 1
    indent
    @out << "</heading>\n"
  else
    @out << " />\n"
  end
  @level -= 1
end

#visit_image(node) ⇒ Object



119
120
121
122
123
124
125
126
127
# File 'lib/koara/xml/xmlrenderer.rb', line 119

def visit_image(node)
  indent
  @out << "<image url=\"" + escape_url(node.value) + "\">\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent()
  @out << "</image>\n"
end

#visit_linebreak(node) ⇒ Object



176
177
178
179
180
# File 'lib/koara/xml/xmlrenderer.rb', line 176

def visit_linebreak(node)
  hard = @hard_wrap || node.explicit
  indent
  @out << "<linebreak explicit=\"#{hard}\"/>\n"
end


129
130
131
132
133
134
135
136
137
# File 'lib/koara/xml/xmlrenderer.rb', line 129

def visit_link(node)
  indent
  @out << "<link url=\"#{escape_url(node.value)}\">\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</link>\n"
end

#visit_list_block(node) ⇒ Object



57
58
59
60
61
62
63
64
65
# File 'lib/koara/xml/xmlrenderer.rb', line 57

def visit_list_block(node)
  @level += 1
  indent
  @out << "<list ordered=\"#{node.ordered}\">\n"
  node.children_accept(self)
  indent
  @out << "</list>\n"
  @level -= 1
end

#visit_list_item(node) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/koara/xml/xmlrenderer.rb', line 67

def visit_list_item(node)
  @level += 1
  indent
  @out << "<listitem"
  if node.number
    @out << " number=\"#{node.number}\"";
  end
  if node.children && node.children.length > 0
    @out << ">\n"
    node.children_accept(self)
    indent
    @out << "</listitem>\n"
  else
    @out << " />\n"
  end
  @level -= 1
end

#visit_paragraph(node) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
# File 'lib/koara/xml/xmlrenderer.rb', line 104

def visit_paragraph(node)
  @level += 1
  indent
  @out << "<paragraph>\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</paragraph>\n"
  @level -= 1
end

#visit_strong(node) ⇒ Object



146
147
148
149
150
151
152
153
154
# File 'lib/koara/xml/xmlrenderer.rb', line 146

def visit_strong(node)
  indent
  @out << "<strong>\n"
  @level += 1
  node.children_accept(self)
  @level -= 1
  indent
  @out << "</strong>\n"
end

#visit_text(node) ⇒ Object



139
140
141
142
143
144
# File 'lib/koara/xml/xmlrenderer.rb', line 139

def visit_text(node)
  indent()
  @out << '<text>'
  @out << escape(node.value)
  @out << "</text>\n"
end