tiny_xml_builder 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/.gemtest +0 -0
  2. data/History.txt +5 -0
  3. data/Rakefile +3 -1
  4. data/version.txt +1 -1
  5. metadata +39 -7
  6. data/README.html +0 -682
File without changes
@@ -1,3 +1,8 @@
1
+ == 0.0.4 / 2011-02-11
2
+ * very minor release
3
+ * corrected the project url
4
+ * prepared the gem for rubygems-test
5
+
1
6
  == 0.0.3 / 2011-02-04
2
7
  * 2 more enhancements
3
8
  * Using the blankslate gem now for our blankslating needs (instead of embedding it);
data/Rakefile CHANGED
@@ -14,8 +14,10 @@ Bones {
14
14
  version ver
15
15
  authors 'Alexandru Ungur'
16
16
  email 'alexaandru@gmail.com'
17
- url 'http://rubygems.com/gems/tiny_xml_builder'
17
+ url 'http://rubygems.org/gems/tiny_xml_builder'
18
18
  readme_file 'README.asciidoc'
19
19
  ignore_file '.gitignore'
20
20
  depend_on 'blankslate'
21
+ depend_on 'bones', :development => true
22
+ depend_on 'bones-rcov', :development => true
21
23
  }
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_xml_builder
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alexandru Ungur
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-10 00:00:00 +02:00
18
+ date: 2011-02-11 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -41,7 +41,7 @@ dependencies:
41
41
  requirement: &id002 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
- - - ">="
44
+ - - "="
45
45
  - !ruby/object:Gem::Version
46
46
  hash: 27
47
47
  segments:
@@ -51,6 +51,38 @@ dependencies:
51
51
  version: 3.6.2
52
52
  type: :development
53
53
  version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: bones-rcov
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - "="
61
+ - !ruby/object:Gem::Version
62
+ hash: 21
63
+ segments:
64
+ - 1
65
+ - 0
66
+ - 1
67
+ version: 1.0.1
68
+ type: :development
69
+ version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ name: bones
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 27
79
+ segments:
80
+ - 3
81
+ - 6
82
+ - 2
83
+ version: 3.6.2
84
+ type: :development
85
+ version_requirements: *id004
54
86
  description: |-
55
87
  A very simple XML builder class. +
56
88
  I wanted something really simple that I could easily extend myself later on if I needed to. +
@@ -64,16 +96,16 @@ extensions: []
64
96
  extra_rdoc_files:
65
97
  - History.txt
66
98
  files:
99
+ - .gemtest
67
100
  - .gitignore
68
101
  - History.txt
69
102
  - README.asciidoc
70
- - README.html
71
103
  - Rakefile
72
104
  - lib/tiny_xml_builder.rb
73
105
  - test/test_tiny_xml_builder.rb
74
106
  - version.txt
75
107
  has_rdoc: true
76
- homepage: http://rubygems.com/gems/tiny_xml_builder
108
+ homepage: http://rubygems.org/gems/tiny_xml_builder
77
109
  licenses: []
78
110
 
79
111
  post_install_message:
@@ -1,682 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4
- <head>
5
- <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
6
- <meta name="generator" content="AsciiDoc 8.6.3" />
7
- <title>Tiny XML Builder</title>
8
- <style type="text/css">
9
- /* Debug borders */
10
- p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {
11
- /*
12
- border: 1px solid red;
13
- */
14
- }
15
-
16
- body {
17
- margin: 1em 5% 1em 5%;
18
- }
19
-
20
- a {
21
- color: blue;
22
- text-decoration: underline;
23
- }
24
- a:visited {
25
- color: fuchsia;
26
- }
27
-
28
- em {
29
- font-style: italic;
30
- color: navy;
31
- }
32
-
33
- strong {
34
- font-weight: bold;
35
- color: #083194;
36
- }
37
-
38
- tt {
39
- color: navy;
40
- }
41
-
42
- h1, h2, h3, h4, h5, h6 {
43
- color: #527bbd;
44
- font-family: sans-serif;
45
- margin-top: 1.2em;
46
- margin-bottom: 0.5em;
47
- line-height: 1.3;
48
- }
49
-
50
- h1, h2, h3 {
51
- border-bottom: 2px solid silver;
52
- }
53
- h2 {
54
- padding-top: 0.5em;
55
- }
56
- h3 {
57
- float: left;
58
- }
59
- h3 + * {
60
- clear: left;
61
- }
62
-
63
- div.sectionbody {
64
- font-family: serif;
65
- margin-left: 0;
66
- }
67
-
68
- hr {
69
- border: 1px solid silver;
70
- }
71
-
72
- p {
73
- margin-top: 0.5em;
74
- margin-bottom: 0.5em;
75
- }
76
-
77
- ul, ol, li > p {
78
- margin-top: 0;
79
- }
80
-
81
- pre {
82
- padding: 0;
83
- margin: 0;
84
- }
85
-
86
- span#author {
87
- color: #527bbd;
88
- font-family: sans-serif;
89
- font-weight: bold;
90
- font-size: 1.1em;
91
- }
92
- span#email {
93
- }
94
- span#revnumber, span#revdate, span#revremark {
95
- font-family: sans-serif;
96
- }
97
-
98
- div#footer {
99
- font-family: sans-serif;
100
- font-size: small;
101
- border-top: 2px solid silver;
102
- padding-top: 0.5em;
103
- margin-top: 4.0em;
104
- }
105
- div#footer-text {
106
- float: left;
107
- padding-bottom: 0.5em;
108
- }
109
- div#footer-badges {
110
- float: right;
111
- padding-bottom: 0.5em;
112
- }
113
-
114
- div#preamble {
115
- margin-top: 1.5em;
116
- margin-bottom: 1.5em;
117
- }
118
- div.tableblock, div.imageblock, div.exampleblock, div.verseblock,
119
- div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
120
- div.admonitionblock {
121
- margin-top: 0.25em;
122
- margin-bottom: 1.5em;
123
- }
124
- div.admonitionblock {
125
- margin-top: 2.5em;
126
- margin-bottom: 2.5em;
127
- }
128
-
129
- div.content { /* Block element content. */
130
- padding: 0;
131
- }
132
-
133
- /* Block element titles. */
134
- div.title, caption.title {
135
- color: #527bbd;
136
- font-family: sans-serif;
137
- font-weight: bold;
138
- text-align: left;
139
- margin-top: 1.0em;
140
- margin-bottom: 0.5em;
141
- }
142
- div.title + * {
143
- margin-top: 0;
144
- }
145
-
146
- td div.title:first-child {
147
- margin-top: 0.0em;
148
- }
149
- div.content div.title:first-child {
150
- margin-top: 0.0em;
151
- }
152
- div.content + div.title {
153
- margin-top: 0.0em;
154
- }
155
-
156
- div.sidebarblock > div.content {
157
- background: #ffffee;
158
- border: 1px solid silver;
159
- padding: 0.5em;
160
- }
161
-
162
- div.listingblock > div.content {
163
- border: 1px solid silver;
164
- background: #f4f4f4;
165
- padding: 0.5em;
166
- }
167
-
168
- div.quoteblock {
169
- padding-left: 2.0em;
170
- margin-right: 10%;
171
- }
172
- div.quoteblock > div.attribution {
173
- padding-top: 0.5em;
174
- text-align: right;
175
- }
176
-
177
- div.verseblock {
178
- padding-left: 2.0em;
179
- margin-right: 10%;
180
- }
181
- div.verseblock > div.content {
182
- white-space: pre;
183
- }
184
- div.verseblock > div.attribution {
185
- padding-top: 0.75em;
186
- text-align: left;
187
- }
188
- /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
189
- div.verseblock + div.attribution {
190
- text-align: left;
191
- }
192
-
193
- div.admonitionblock .icon {
194
- vertical-align: top;
195
- font-size: 1.1em;
196
- font-weight: bold;
197
- text-decoration: underline;
198
- color: #527bbd;
199
- padding-right: 0.5em;
200
- }
201
- div.admonitionblock td.content {
202
- padding-left: 0.5em;
203
- border-left: 2px solid silver;
204
- }
205
-
206
- div.exampleblock > div.content {
207
- border-left: 2px solid silver;
208
- padding: 0.5em;
209
- }
210
-
211
- div.imageblock div.content { padding-left: 0; }
212
- span.image img { border-style: none; }
213
- a.image:visited { color: white; }
214
-
215
- dl {
216
- margin-top: 0.8em;
217
- margin-bottom: 0.8em;
218
- }
219
- dt {
220
- margin-top: 0.5em;
221
- margin-bottom: 0;
222
- font-style: normal;
223
- color: navy;
224
- }
225
- dd > *:first-child {
226
- margin-top: 0.1em;
227
- }
228
-
229
- ul, ol {
230
- list-style-position: outside;
231
- }
232
- ol.arabic {
233
- list-style-type: decimal;
234
- }
235
- ol.loweralpha {
236
- list-style-type: lower-alpha;
237
- }
238
- ol.upperalpha {
239
- list-style-type: upper-alpha;
240
- }
241
- ol.lowerroman {
242
- list-style-type: lower-roman;
243
- }
244
- ol.upperroman {
245
- list-style-type: upper-roman;
246
- }
247
-
248
- div.compact ul, div.compact ol,
249
- div.compact p, div.compact p,
250
- div.compact div, div.compact div {
251
- margin-top: 0.1em;
252
- margin-bottom: 0.1em;
253
- }
254
-
255
- div.tableblock > table {
256
- border: 3px solid #527bbd;
257
- }
258
- thead {
259
- font-family: sans-serif;
260
- font-weight: bold;
261
- }
262
- tfoot {
263
- font-weight: bold;
264
- }
265
- td > div.verse {
266
- white-space: pre;
267
- }
268
- p.table {
269
- margin-top: 0;
270
- }
271
- /* Because the table frame attribute is overriden by CSS in most browsers. */
272
- div.tableblock > table[frame="void"] {
273
- border-style: none;
274
- }
275
- div.tableblock > table[frame="hsides"] {
276
- border-left-style: none;
277
- border-right-style: none;
278
- }
279
- div.tableblock > table[frame="vsides"] {
280
- border-top-style: none;
281
- border-bottom-style: none;
282
- }
283
-
284
-
285
- div.hdlist {
286
- margin-top: 0.8em;
287
- margin-bottom: 0.8em;
288
- }
289
- div.hdlist tr {
290
- padding-bottom: 15px;
291
- }
292
- dt.hdlist1.strong, td.hdlist1.strong {
293
- font-weight: bold;
294
- }
295
- td.hdlist1 {
296
- vertical-align: top;
297
- font-style: normal;
298
- padding-right: 0.8em;
299
- color: navy;
300
- }
301
- td.hdlist2 {
302
- vertical-align: top;
303
- }
304
- div.hdlist.compact tr {
305
- margin: 0;
306
- padding-bottom: 0;
307
- }
308
-
309
- .comment {
310
- background: yellow;
311
- }
312
-
313
- .footnote, .footnoteref {
314
- font-size: 0.8em;
315
- }
316
-
317
- span.footnote, span.footnoteref {
318
- vertical-align: super;
319
- }
320
-
321
- #footnotes {
322
- margin: 20px 0 20px 0;
323
- padding: 7px 0 0 0;
324
- }
325
-
326
- #footnotes div.footnote {
327
- margin: 0 0 5px 0;
328
- }
329
-
330
- #footnotes hr {
331
- border: none;
332
- border-top: 1px solid silver;
333
- height: 1px;
334
- text-align: left;
335
- margin-left: 0;
336
- width: 20%;
337
- min-width: 100px;
338
- }
339
-
340
-
341
- @media print {
342
- div#footer-badges { display: none; }
343
- }
344
-
345
- div#toctitle {
346
- color: #527bbd;
347
- font-family: sans-serif;
348
- font-size: 1.1em;
349
- font-weight: bold;
350
- margin-top: 1.0em;
351
- margin-bottom: 0.1em;
352
- }
353
-
354
- div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
355
- margin-top: 0;
356
- margin-bottom: 0;
357
- }
358
- div.toclevel2 {
359
- margin-left: 2em;
360
- font-size: 0.9em;
361
- }
362
- div.toclevel3 {
363
- margin-left: 4em;
364
- font-size: 0.9em;
365
- }
366
- div.toclevel4 {
367
- margin-left: 6em;
368
- font-size: 0.9em;
369
- }
370
- </style>
371
- <script type="text/javascript">
372
- /*<![CDATA[*/
373
- window.onload = function(){asciidoc.footnotes(); asciidoc.toc(2);}
374
- var asciidoc = { // Namespace.
375
-
376
- /////////////////////////////////////////////////////////////////////
377
- // Table Of Contents generator
378
- /////////////////////////////////////////////////////////////////////
379
-
380
- /* Author: Mihai Bazon, September 2002
381
- * http://students.infoiasi.ro/~mishoo
382
- *
383
- * Table Of Content generator
384
- * Version: 0.4
385
- *
386
- * Feel free to use this script under the terms of the GNU General Public
387
- * License, as long as you do not remove or alter this notice.
388
- */
389
-
390
- /* modified by Troy D. Hanson, September 2006. License: GPL */
391
- /* modified by Stuart Rackham, 2006, 2009. License: GPL */
392
-
393
- // toclevels = 1..4.
394
- toc: function (toclevels) {
395
-
396
- function getText(el) {
397
- var text = "";
398
- for (var i = el.firstChild; i != null; i = i.nextSibling) {
399
- if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
400
- text += i.data;
401
- else if (i.firstChild != null)
402
- text += getText(i);
403
- }
404
- return text;
405
- }
406
-
407
- function TocEntry(el, text, toclevel) {
408
- this.element = el;
409
- this.text = text;
410
- this.toclevel = toclevel;
411
- }
412
-
413
- function tocEntries(el, toclevels) {
414
- var result = new Array;
415
- var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
416
- // Function that scans the DOM tree for header elements (the DOM2
417
- // nodeIterator API would be a better technique but not supported by all
418
- // browsers).
419
- var iterate = function (el) {
420
- for (var i = el.firstChild; i != null; i = i.nextSibling) {
421
- if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
422
- var mo = re.exec(i.tagName);
423
- if (mo)
424
- result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
425
- iterate(i);
426
- }
427
- }
428
- }
429
- iterate(el);
430
- return result;
431
- }
432
-
433
- var toc = document.getElementById("toc");
434
- var entries = tocEntries(document.getElementById("content"), toclevels);
435
- for (var i = 0; i < entries.length; ++i) {
436
- var entry = entries[i];
437
- if (entry.element.id == "")
438
- entry.element.id = "_toc_" + i;
439
- var a = document.createElement("a");
440
- a.href = "#" + entry.element.id;
441
- a.appendChild(document.createTextNode(entry.text));
442
- var div = document.createElement("div");
443
- div.appendChild(a);
444
- div.className = "toclevel" + entry.toclevel;
445
- toc.appendChild(div);
446
- }
447
- if (entries.length == 0)
448
- toc.parentNode.removeChild(toc);
449
- },
450
-
451
-
452
- /////////////////////////////////////////////////////////////////////
453
- // Footnotes generator
454
- /////////////////////////////////////////////////////////////////////
455
-
456
- /* Based on footnote generation code from:
457
- * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
458
- */
459
-
460
- footnotes: function () {
461
- var cont = document.getElementById("content");
462
- var noteholder = document.getElementById("footnotes");
463
- var spans = cont.getElementsByTagName("span");
464
- var refs = {};
465
- var n = 0;
466
- for (i=0; i<spans.length; i++) {
467
- if (spans[i].className == "footnote") {
468
- n++;
469
- // Use [\s\S] in place of . so multi-line matches work.
470
- // Because JavaScript has no s (dotall) regex flag.
471
- note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
472
- noteholder.innerHTML +=
473
- "<div class='footnote' id='_footnote_" + n + "'>" +
474
- "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
475
- n + "</a>. " + note + "</div>";
476
- spans[i].innerHTML =
477
- "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
478
- "' title='View footnote' class='footnote'>" + n + "</a>]";
479
- var id =spans[i].getAttribute("id");
480
- if (id != null) refs["#"+id] = n;
481
- }
482
- }
483
- if (n == 0)
484
- noteholder.parentNode.removeChild(noteholder);
485
- else {
486
- // Process footnoterefs.
487
- for (i=0; i<spans.length; i++) {
488
- if (spans[i].className == "footnoteref") {
489
- var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
490
- href = href.match(/#.*/)[0]; // Because IE return full URL.
491
- n = refs[href];
492
- spans[i].innerHTML =
493
- "[<a href='#_footnote_" + n +
494
- "' title='View footnote' class='footnote'>" + n + "</a>]";
495
- }
496
- }
497
- }
498
- }
499
-
500
- }
501
- /*]]>*/
502
- </script>
503
- </head>
504
- <body class="article">
505
- <div id="header">
506
- <h1>Tiny XML Builder</h1>
507
- <span id="author">Alexandru Ungur</span><br />
508
- <span id="email"><tt>&lt;<a href="mailto:alexaandru@gmail.com">alexaandru@gmail.com</a>&gt;</tt></span><br />
509
- <div id="toc">
510
- <div id="toctitle">Table of Contents</div>
511
- <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
512
- </div>
513
- </div>
514
- <div id="content">
515
- <div class="sect1">
516
- <h2 id="_description">Description</h2>
517
- <div class="sectionbody">
518
- <div class="paragraph"><p>A very simple XML builder class.<br />
519
- I wanted something really simple that I could easily extend myself later on if I needed to.<br />
520
- Ironically, in four years since I created and used TinyXml, I never needed to extend it :-)
521
- I figured, it may as well work for others in that case, so here it is.</p></div>
522
- </div>
523
- </div>
524
- <div class="sect1">
525
- <h2 id="_acknowledgements">Acknowledgements</h2>
526
- <div class="sectionbody">
527
- <div class="paragraph"><p>A big thanks to Jim Weirich for his great advices on Ruby-talk.<br />
528
- The BlankSlate "mechanism" he describes at: <a href="http://onestepback.org/index.cgi/Tech/Ruby/BlankSlate.rdoc">http://onestepback.org/index.cgi/Tech/Ruby/BlankSlate.rdoc</a>
529
- and which this library depends upon, is one of the first things I&#8217;ve learnt when started to play with Ruby DSLs.</p></div>
530
- </div>
531
- </div>
532
- <div class="sect1">
533
- <h2 id="_features_problems">Features/Problems</h2>
534
- <div class="sectionbody">
535
- <div class="ulist"><ul>
536
- <li>
537
- <p>
538
- You cannot have XML elements named <em>__id__</em>, <em>__send__</em>, <em>method_missing</em>, <em>instance_eval</em> or <em>respond_to</em> as those are NOT undefined (on purpose) by BlankSlate mechanism;
539
- </p>
540
- </li>
541
- <li>
542
- <p>
543
- There are other limitations related to &#8220;implicit receiver&#8221; calls, e.g.:
544
- </p>
545
- </li>
546
- </ul></div>
547
- <div class="listingblock">
548
- <div class="title">Explicit receiver example</div>
549
- <div class="content">
550
- <pre><tt>puts TinyXml::Builder.new.foo {|f| f.p 'bar'}</tt></pre>
551
- </div></div>
552
- <div class="paragraph"><p>will output:</p></div>
553
- <div class="listingblock">
554
- <div class="content">
555
- <pre><tt>&lt;foo&gt;
556
- &lt;p&gt;bar&lt;/p&gt;
557
- &lt;/foo&gt;</tt></pre>
558
- </div></div>
559
- <div class="paragraph"><p>while the following:</p></div>
560
- <div class="listingblock">
561
- <div class="title">Implicit receiver example</div>
562
- <div class="content">
563
- <pre><tt>puts TinyXml::Builder.new.foo { p 'bar' }</tt></pre>
564
- </div></div>
565
- <div class="paragraph"><p>will output:</p></div>
566
- <div class="listingblock">
567
- <div class="content">
568
- <pre><tt>"bar"
569
- &lt;foo&gt;
570
- &lt;/foo&gt;</tt></pre>
571
- </div></div>
572
- <div class="paragraph"><p>as "p" method exists in outer scope and does an entirely different thing than what (missing) methods of TinyXml do.</p></div>
573
- </div>
574
- </div>
575
- <div class="sect1">
576
- <h2 id="_synopsis">Synopsis</h2>
577
- <div class="sectionbody">
578
- <div class="listingblock">
579
- <div class="title">Example Usage</div>
580
- <div class="content">
581
- <pre><tt>builder = TinyXml::Builder.new
582
- builder.html do |xhtml|
583
- xhtml.head do |head|
584
- head.title 'Hello World'
585
- head.meta :name =&gt; :keywords, :content =&gt; 'hello, world'
586
- head.meta :name =&gt; :description, :content =&gt; 'hello world sample usage for XML class'
587
- end
588
- xhtml.body do |body|
589
- body.div :id =&gt; 'main' do |div_main|
590
- div_main.h1 "Hello World"
591
- div_main.p "Hello HTML world", "from XML"
592
- end
593
- end
594
- end
595
-
596
- puts builder</tt></pre>
597
- </div></div>
598
- <div class="listingblock">
599
- <div class="title">Alternate Example Usage</div>
600
- <div class="content">
601
- <pre><tt>puts TinyXml::Builder.new.html {
602
- head {
603
- title 'Hello World'
604
- meta :name =&gt; :keywords, :content =&gt; 'hello, world'
605
- meta :name =&gt; :description, :content =&gt; 'hello world sample usage for XML class'
606
- }
607
-
608
- body {
609
- div(:id =&gt; 'main') { |div|
610
- div.h1 "Hello World"
611
- div.p "Hello HTML world", "from XML"
612
- }
613
- }
614
- }</tt></pre>
615
- </div></div>
616
- <div class="paragraph"><p>both will output:</p></div>
617
- <div class="listingblock">
618
- <div class="content">
619
- <pre><tt>&lt;html&gt;
620
- &lt;head&gt;
621
- &lt;title&gt;Hello World&lt;/title&gt;
622
- &lt;meta name="keywords" content="hello, world" /&gt;
623
- &lt;meta name="description" content="hello world sample usage for XML class" /&gt;
624
- &lt;/head&gt;
625
- &lt;body&gt;
626
- &lt;div id="main"&gt;
627
- &lt;h1&gt;Hello World&lt;/h1&gt;
628
- &lt;p&gt;Hello HTML world&lt;/p&gt;
629
- &lt;p&gt;from XML&lt;/p&gt;
630
- &lt;/div&gt;
631
- &lt;/body&gt;
632
- &lt;/html&gt;</tt></pre>
633
- </div></div>
634
- </div>
635
- </div>
636
- <div class="sect1">
637
- <h2 id="_requirements">Requirements</h2>
638
- <div class="sectionbody">
639
- <div class="paragraph"><p>NONE</p></div>
640
- </div>
641
- </div>
642
- <div class="sect1">
643
- <h2 id="_install">Install</h2>
644
- <div class="sectionbody">
645
- <div class="sidebarblock">
646
- <div class="content">
647
- <div class="paragraph"><p>sudo gem install tiny_xml_builder</p></div>
648
- </div></div>
649
- </div>
650
- </div>
651
- <div class="sect1">
652
- <h2 id="_license">License</h2>
653
- <div class="sectionbody">
654
- <div class="paragraph"><p>(The MIT License)</p></div>
655
- <div class="paragraph"><p>Copyright (c) 2010 Alexandru Ungur</p></div>
656
- <div class="paragraph"><p>Permission is hereby granted, free of charge, to any person obtaining
657
- a copy of this software and associated documentation files (the
658
- <em>Software</em>), to deal in the Software without restriction, including
659
- without limitation the rights to use, copy, modify, merge, publish,
660
- distribute, sublicense, and/or sell copies of the Software, and to
661
- permit persons to whom the Software is furnished to do so, subject to
662
- the following conditions:</p></div>
663
- <div class="paragraph"><p>The above copyright notice and this permission notice shall be
664
- included in all copies or substantial portions of the Software.</p></div>
665
- <div class="paragraph"><p>THE SOFTWARE IS PROVIDED <em>AS IS</em>, WITHOUT WARRANTY OF ANY KIND,
666
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
667
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
668
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
669
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
670
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
671
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p></div>
672
- </div>
673
- </div>
674
- </div>
675
- <div id="footnotes"><hr /></div>
676
- <div id="footer">
677
- <div id="footer-text">
678
- Last updated 2011-02-04 14:02:13 EET
679
- </div>
680
- </div>
681
- </body>
682
- </html>