hikidoc 0.0.4 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,81 +1,93 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: hikidoc
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Kazuhiko
8
+ - SHIBATA Hiroshi
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
-
12
- date: 2009-08-17 00:00:00 +09:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: hoe
12
+ date: 2013-02-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
17
21
  type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 1.7.0
24
- version:
25
- description: |-
26
- 'HikiDoc' is a text-to-HTML conversion tool for web writers. HikiDoc
27
- allows you to write using an easy-to-read, easy-to-write plain text
28
- format, then convert it to structurally valid HTML (or XHTML).
29
- email:
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ description: '''HikiDoc'' is a text-to-HTML conversion tool for web writers.'
43
+ email:
30
44
  - kazuhiko@fdiary.net
31
- executables:
45
+ - shibata.hiroshi@gmail.com
46
+ executables:
32
47
  - hikidoc
33
48
  extensions: []
34
-
35
49
  extra_rdoc_files: []
36
-
37
- files:
50
+ files:
51
+ - .gitignore
38
52
  - COPYING
53
+ - Gemfile
54
+ - NEWS
55
+ - NEWS.ja
39
56
  - README
40
57
  - README.ja
41
58
  - Rakefile
42
59
  - TextFormattingRules
43
60
  - TextFormattingRules.ja
44
61
  - bin/hikidoc
45
- - coverage/index.html
46
- - coverage/lib-hikidoc_rb.html
62
+ - hikidoc.gemspec
47
63
  - lib/hikidoc.rb
48
64
  - setup.rb
49
- - test/run-test.rb
50
- - test/test_hikidoc.rb
51
- has_rdoc: true
52
- homepage: http://rubyforge.org/projects/hikidoc/
53
- licenses: []
54
-
65
+ - test/hikidoc_test.rb
66
+ homepage: https://github.com/hiki/hikidoc
67
+ licenses:
68
+ - MIT
69
+ metadata: {}
55
70
  post_install_message:
56
- rdoc_options:
57
- - --main
58
- - lib/hikidoc.rb
59
- require_paths:
71
+ rdoc_options: []
72
+ require_paths:
60
73
  - lib
61
- required_ruby_version: !ruby/object:Gem::Requirement
62
- requirements:
63
- - - ">="
64
- - !ruby/object:Gem::Version
65
- version: "0"
66
- version:
67
- required_rubygems_version: !ruby/object:Gem::Requirement
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- version: "0"
72
- version:
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
73
84
  requirements: []
74
-
75
- rubyforge_project: hikidoc
76
- rubygems_version: 1.3.4
85
+ rubyforge_project:
86
+ rubygems_version: 2.0.0
77
87
  signing_key:
78
- specification_version: 3
79
- summary: "'HikiDoc' is a text-to-HTML conversion tool for web writers."
80
- test_files:
81
- - test/test_hikidoc.rb
88
+ specification_version: 4
89
+ summary: '''HikiDoc'' is a text-to-HTML conversion tool for web writers. HikiDoc allows
90
+ you to write using an easy-to-read, easy-to-write plain text format, then convert
91
+ it to structurally valid HTML (or XHTML).'
92
+ test_files:
93
+ - test/hikidoc_test.rb
@@ -1,100 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
3
- <head>
4
- <title>
5
- C0 code coverage information
6
- </title>
7
- <style type='text/css'>
8
- body { background-color: rgb(240, 240, 245); }
9
- </style>
10
- <style type='text/css'>
11
- span.cross-ref-title { font-size: 140%; } span.cross-ref a {
12
- text-decoration: none; } span.cross-ref { background-color:#f3f7fa;
13
- border: 1px dashed #333; margin: 1em; padding: 0.5em; overflow: hidden; }
14
- a.crossref-toggle { text-decoration: none; } span.marked0 {
15
- background-color: rgb(185, 210, 200); display: block; } span.marked1 {
16
- background-color: rgb(190, 215, 205); display: block; } span.inferred0 {
17
- background-color: rgb(175, 200, 200); display: block; } span.inferred1 {
18
- background-color: rgb(180, 205, 205); display: block; } span.uncovered0 {
19
- background-color: rgb(225, 110, 110); display: block; } span.uncovered1 {
20
- background-color: rgb(235, 120, 120); display: block; } span.overview {
21
- border-bottom: 8px solid black; } div.overview { border-bottom: 8px solid
22
- black; } body { font-family: verdana, arial, helvetica; } div.footer {
23
- font-size: 68%; margin-top: 1.5em; } h1, h2, h3, h4, h5, h6 {
24
- margin-bottom: 0.5em; } h5 { margin-top: 0.5em; } .hidden { display: none;
25
- } div.separator { height: 10px; } /* Commented out for better readability,
26
- esp. on IE */ /* table tr td, table tr th { font-size: 68%; } td.value
27
- table tr td { font-size: 11px; } */ table.percent_graph { height: 12px;
28
- border: #808080 1px solid; empty-cells: show; } table.percent_graph
29
- td.covered { height: 10px; background: #00f000; } table.percent_graph
30
- td.uncovered { height: 10px; background: #e00000; } table.percent_graph
31
- td.NA { height: 10px; background: #eaeaea; } table.report {
32
- border-collapse: collapse; width: 100%; } table.report td.heading {
33
- background: #dcecff; border: #d0d0d0 1px solid; font-weight: bold;
34
- text-align: center; } table.report td.heading:hover { background: #c0ffc0;
35
- } table.report td.text { border: #d0d0d0 1px solid; } table.report
36
- td.value, table.report td.lines_total, table.report td.lines_code {
37
- text-align: right; border: #d0d0d0 1px solid; } table.report tr.light {
38
- background-color: rgb(240, 240, 245); } table.report tr.dark {
39
- background-color: rgb(230, 230, 235); }
40
- </style>
41
- <script type='text/javascript'>
42
- // <![CDATA[ function toggleCode( id ) { if ( document.getElementById )
43
- elem = document.getElementById( id ); else if ( document.all ) elem =
44
- eval( "document.all." + id ); else return false; elemStyle = elem.style;
45
- if ( elemStyle.display != "block" ) { elemStyle.display = "block" } else {
46
- elemStyle.display = "none" } return true; } // Make cross-references
47
- hidden by default document.writeln( "<style
48
- type=\"text/css\">span.cross-ref { display: none }</style>" ) // ]]>
49
- </script>
50
- </head>
51
- <body>
52
- <h3>
53
- C0 code coverage information
54
- </h3>
55
- <p>
56
- Generated on Tue Aug 12 00:32:09 +0900 2008 with
57
- <a href='http://eigenclass.org/hiki/rcov'>
58
- rcov 0.8.1.2
59
- </a>
60
- </p>
61
- <hr />
62
- <table class='report'> <thead> <tr> <td class='heading'> Name </td> <td
63
- class='heading'> Total lines </td> <td class='heading'> Lines of code </td>
64
- <td class='heading'> Total coverage </td> <td class='heading'> Code coverage
65
- </td> </tr> </thead> <tbody> <tr class='light'> <td> TOTAL </td> <td
66
- class='lines_total'> <tt> 902 </tt> </td> <td class='lines_code'> <tt> 721
67
- </tt> </td> <td> <table cellspacing='0' align='right' cellpadding='0'> <tr>
68
- <td> <tt class='coverage_total'> 90.2% </tt> &nbsp; </td> <td> <table
69
- class='percent_graph' cellspacing='0' width='100' cellpadding='0'> <tr> <td
70
- class='covered' width='90' /> <td class='uncovered' width='10' /> </tr>
71
- </table> </td> </tr> </table> </td> <td> <table cellspacing='0'
72
- align='right' cellpadding='0'> <tr> <td> <tt class='coverage_code'> 87.8%
73
- </tt> &nbsp; </td> <td> <table class='percent_graph' cellspacing='0'
74
- width='100' cellpadding='0'> <tr> <td class='covered' width='88' /> <td
75
- class='uncovered' width='12' /> </tr> </table> </td> </tr> </table> </td>
76
- </tr> <tr class='dark'> <td> <a href='lib-hikidoc_rb.html'> lib/hikidoc.rb
77
- </a> </td> <td class='lines_total'> <tt> 902 </tt> </td> <td
78
- class='lines_code'> <tt> 721 </tt> </td> <td> <table cellspacing='0'
79
- align='right' cellpadding='0'> <tr> <td> <tt class='coverage_total'> 90.2%
80
- </tt> &nbsp; </td> <td> <table class='percent_graph' cellspacing='0'
81
- width='100' cellpadding='0'> <tr> <td class='covered' width='90' /> <td
82
- class='uncovered' width='10' /> </tr> </table> </td> </tr> </table> </td>
83
- <td> <table cellspacing='0' align='right' cellpadding='0'> <tr> <td> <tt
84
- class='coverage_code'> 87.8% </tt> &nbsp; </td> <td> <table
85
- class='percent_graph' cellspacing='0' width='100' cellpadding='0'> <tr> <td
86
- class='covered' width='88' /> <td class='uncovered' width='12' /> </tr>
87
- </table> </td> </tr> </table> </td> </tr> </tbody> </table>
88
- <hr />
89
- <p> Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'> rcov
90
- code coverage analysis tool for Ruby </a> version 0.8.1.2. </p>
91
- <p>
92
- <a href='http://validator.w3.org/check/referer'>
93
- <img src='http://www.w3.org/Icons/valid-xhtml11' height='31' alt='Valid XHTML 1.1!' width='88' />
94
- </a>
95
- <a href='http://jigsaw.w3.org/css-validator/check/referer'>
96
- <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px' />
97
- </a>
98
- </p>
99
- </body>
100
- </html>
@@ -1,1195 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
3
- <head>
4
- <title>
5
- lib/hikidoc.rb - C0 code coverage information
6
- </title>
7
- <style type='text/css'>
8
- body { background-color: rgb(240, 240, 245); }
9
- </style>
10
- <style type='text/css'>
11
- span.cross-ref-title { font-size: 140%; } span.cross-ref a {
12
- text-decoration: none; } span.cross-ref { background-color:#f3f7fa;
13
- border: 1px dashed #333; margin: 1em; padding: 0.5em; overflow: hidden; }
14
- a.crossref-toggle { text-decoration: none; } span.marked0 {
15
- background-color: rgb(185, 210, 200); display: block; } span.marked1 {
16
- background-color: rgb(190, 215, 205); display: block; } span.inferred0 {
17
- background-color: rgb(175, 200, 200); display: block; } span.inferred1 {
18
- background-color: rgb(180, 205, 205); display: block; } span.uncovered0 {
19
- background-color: rgb(225, 110, 110); display: block; } span.uncovered1 {
20
- background-color: rgb(235, 120, 120); display: block; } span.overview {
21
- border-bottom: 8px solid black; } div.overview { border-bottom: 8px solid
22
- black; } body { font-family: verdana, arial, helvetica; } div.footer {
23
- font-size: 68%; margin-top: 1.5em; } h1, h2, h3, h4, h5, h6 {
24
- margin-bottom: 0.5em; } h5 { margin-top: 0.5em; } .hidden { display: none;
25
- } div.separator { height: 10px; } /* Commented out for better readability,
26
- esp. on IE */ /* table tr td, table tr th { font-size: 68%; } td.value
27
- table tr td { font-size: 11px; } */ table.percent_graph { height: 12px;
28
- border: #808080 1px solid; empty-cells: show; } table.percent_graph
29
- td.covered { height: 10px; background: #00f000; } table.percent_graph
30
- td.uncovered { height: 10px; background: #e00000; } table.percent_graph
31
- td.NA { height: 10px; background: #eaeaea; } table.report {
32
- border-collapse: collapse; width: 100%; } table.report td.heading {
33
- background: #dcecff; border: #d0d0d0 1px solid; font-weight: bold;
34
- text-align: center; } table.report td.heading:hover { background: #c0ffc0;
35
- } table.report td.text { border: #d0d0d0 1px solid; } table.report
36
- td.value, table.report td.lines_total, table.report td.lines_code {
37
- text-align: right; border: #d0d0d0 1px solid; } table.report tr.light {
38
- background-color: rgb(240, 240, 245); } table.report tr.dark {
39
- background-color: rgb(230, 230, 235); }
40
- </style>
41
- <script type='text/javascript'>
42
- // <![CDATA[ function toggleCode( id ) { if ( document.getElementById )
43
- elem = document.getElementById( id ); else if ( document.all ) elem =
44
- eval( "document.all." + id ); else return false; elemStyle = elem.style;
45
- if ( elemStyle.display != "block" ) { elemStyle.display = "block" } else {
46
- elemStyle.display = "none" } return true; } // Make cross-references
47
- hidden by default document.writeln( "<style
48
- type=\"text/css\">span.cross-ref { display: none }</style>" ) // ]]>
49
- </script>
50
- <style type='text/css'>
51
- span.run0 { background-color: rgb(178, 204, 255); display: block; }
52
- span.run1 { background-color: rgb(178, 206, 255); display: block; }
53
- span.run2 { background-color: rgb(178, 209, 255); display: block; }
54
- span.run3 { background-color: rgb(178, 211, 255); display: block; }
55
- span.run4 { background-color: rgb(178, 214, 255); display: block; }
56
- span.run5 { background-color: rgb(178, 218, 255); display: block; }
57
- span.run6 { background-color: rgb(178, 220, 255); display: block; }
58
- span.run7 { background-color: rgb(178, 223, 255); display: block; }
59
- span.run8 { background-color: rgb(178, 225, 255); display: block; }
60
- span.run9 { background-color: rgb(178, 228, 255); display: block; }
61
- span.run10 { background-color: rgb(178, 232, 255); display: block; }
62
- span.run11 { background-color: rgb(178, 234, 255); display: block; }
63
- span.run12 { background-color: rgb(178, 237, 255); display: block; }
64
- span.run13 { background-color: rgb(178, 239, 255); display: block; }
65
- span.run14 { background-color: rgb(178, 242, 255); display: block; }
66
- span.run15 { background-color: rgb(178, 246, 255); display: block; }
67
- span.run16 { background-color: rgb(178, 248, 255); display: block; }
68
- span.run17 { background-color: rgb(178, 251, 255); display: block; }
69
- span.run18 { background-color: rgb(178, 253, 255); display: block; }
70
- span.run19 { background-color: rgb(178, 255, 253); display: block; }
71
- span.run20 { background-color: rgb(178, 255, 249); display: block; }
72
- span.run21 { background-color: rgb(178, 255, 247); display: block; }
73
- span.run22 { background-color: rgb(178, 255, 244); display: block; }
74
- span.run23 { background-color: rgb(178, 255, 242); display: block; }
75
- span.run24 { background-color: rgb(178, 255, 239); display: block; }
76
- span.run25 { background-color: rgb(178, 255, 235); display: block; }
77
- span.run26 { background-color: rgb(178, 255, 233); display: block; }
78
- span.run27 { background-color: rgb(178, 255, 230); display: block; }
79
- span.run28 { background-color: rgb(178, 255, 228); display: block; }
80
- span.run29 { background-color: rgb(178, 255, 225); display: block; }
81
- span.run30 { background-color: rgb(178, 255, 221); display: block; }
82
- span.run31 { background-color: rgb(178, 255, 219); display: block; }
83
- span.run32 { background-color: rgb(178, 255, 216); display: block; }
84
- span.run33 { background-color: rgb(178, 255, 214); display: block; }
85
- span.run34 { background-color: rgb(178, 255, 211); display: block; }
86
- span.run35 { background-color: rgb(178, 255, 207); display: block; }
87
- span.run36 { background-color: rgb(178, 255, 205); display: block; }
88
- span.run37 { background-color: rgb(178, 255, 202); display: block; }
89
- span.run38 { background-color: rgb(178, 255, 200); display: block; }
90
- span.run39 { background-color: rgb(178, 255, 197); display: block; }
91
- span.run40 { background-color: rgb(178, 255, 193); display: block; }
92
- span.run41 { background-color: rgb(178, 255, 191); display: block; }
93
- span.run42 { background-color: rgb(178, 255, 188); display: block; }
94
- span.run43 { background-color: rgb(178, 255, 186); display: block; }
95
- span.run44 { background-color: rgb(178, 255, 183); display: block; }
96
- span.run45 { background-color: rgb(178, 255, 179); display: block; }
97
- span.run46 { background-color: rgb(179, 255, 178); display: block; }
98
- span.run47 { background-color: rgb(182, 255, 178); display: block; }
99
- span.run48 { background-color: rgb(184, 255, 178); display: block; }
100
- span.run49 { background-color: rgb(187, 255, 178); display: block; }
101
- span.run50 { background-color: rgb(191, 255, 178); display: block; }
102
- span.run51 { background-color: rgb(193, 255, 178); display: block; }
103
- span.run52 { background-color: rgb(196, 255, 178); display: block; }
104
- span.run53 { background-color: rgb(198, 255, 178); display: block; }
105
- span.run54 { background-color: rgb(201, 255, 178); display: block; }
106
- span.run55 { background-color: rgb(205, 255, 178); display: block; }
107
- span.run56 { background-color: rgb(207, 255, 178); display: block; }
108
- span.run57 { background-color: rgb(210, 255, 178); display: block; }
109
- span.run58 { background-color: rgb(212, 255, 178); display: block; }
110
- span.run59 { background-color: rgb(215, 255, 178); display: block; }
111
- span.run60 { background-color: rgb(219, 255, 178); display: block; }
112
- span.run61 { background-color: rgb(221, 255, 178); display: block; }
113
- span.run62 { background-color: rgb(224, 255, 178); display: block; }
114
- span.run63 { background-color: rgb(226, 255, 178); display: block; }
115
- span.run64 { background-color: rgb(229, 255, 178); display: block; }
116
- span.run65 { background-color: rgb(233, 255, 178); display: block; }
117
- span.run66 { background-color: rgb(235, 255, 178); display: block; }
118
- span.run67 { background-color: rgb(238, 255, 178); display: block; }
119
- span.run68 { background-color: rgb(240, 255, 178); display: block; }
120
- span.run69 { background-color: rgb(243, 255, 178); display: block; }
121
- span.run70 { background-color: rgb(247, 255, 178); display: block; }
122
- span.run71 { background-color: rgb(249, 255, 178); display: block; }
123
- span.run72 { background-color: rgb(252, 255, 178); display: block; }
124
- span.run73 { background-color: rgb(255, 255, 178); display: block; }
125
- span.run74 { background-color: rgb(255, 252, 178); display: block; }
126
- span.run75 { background-color: rgb(255, 248, 178); display: block; }
127
- span.run76 { background-color: rgb(255, 246, 178); display: block; }
128
- span.run77 { background-color: rgb(255, 243, 178); display: block; }
129
- span.run78 { background-color: rgb(255, 240, 178); display: block; }
130
- span.run79 { background-color: rgb(255, 238, 178); display: block; }
131
- span.run80 { background-color: rgb(255, 234, 178); display: block; }
132
- span.run81 { background-color: rgb(255, 232, 178); display: block; }
133
- span.run82 { background-color: rgb(255, 229, 178); display: block; }
134
- span.run83 { background-color: rgb(255, 226, 178); display: block; }
135
- span.run84 { background-color: rgb(255, 224, 178); display: block; }
136
- span.run85 { background-color: rgb(255, 220, 178); display: block; }
137
- span.run86 { background-color: rgb(255, 218, 178); display: block; }
138
- span.run87 { background-color: rgb(255, 215, 178); display: block; }
139
- span.run88 { background-color: rgb(255, 212, 178); display: block; }
140
- span.run89 { background-color: rgb(255, 210, 178); display: block; }
141
- span.run90 { background-color: rgb(255, 206, 178); display: block; }
142
- span.run91 { background-color: rgb(255, 204, 178); display: block; }
143
- span.run92 { background-color: rgb(255, 201, 178); display: block; }
144
- span.run93 { background-color: rgb(255, 198, 178); display: block; }
145
- span.run94 { background-color: rgb(255, 196, 178); display: block; }
146
- span.run95 { background-color: rgb(255, 192, 178); display: block; }
147
- span.run96 { background-color: rgb(255, 189, 178); display: block; }
148
- span.run97 { background-color: rgb(255, 187, 178); display: block; }
149
- span.run98 { background-color: rgb(255, 184, 178); display: block; }
150
- span.run99 { background-color: rgb(255, 182, 178); display: block; }
151
- span.run100 { background-color: rgb(255, 178, 178); display: block; }
152
- </style>
153
- </head>
154
- <body>
155
- <h3>
156
- C0 code coverage information
157
- </h3>
158
- <p>
159
- Generated on Tue Aug 12 00:32:09 +0900 2008 with
160
- <a href='http://eigenclass.org/hiki/rcov'>
161
- rcov 0.8.1.2
162
- </a>
163
- </p>
164
- <hr />
165
- <pre><span class='marked0'>Code reported as executed by Ruby looks like
166
- this... </span><span class='marked1'>and this: this line is also marked as
167
- covered. </span><span class='inferred0'>Lines considered as run by rcov, but
168
- not reported by Ruby, look like this, </span><span class='inferred1'>and
169
- this: these lines were inferred by rcov (using simple heuristics).
170
- </span><span class='uncovered0'>Finally, here&apos;s a line marked as not
171
- executed. </span></pre>
172
- <table class='report'> <thead> <tr> <td class='heading'> Name </td> <td
173
- class='heading'> Total lines </td> <td class='heading'> Lines of code </td>
174
- <td class='heading'> Total coverage </td> <td class='heading'> Code coverage
175
- </td> </tr> </thead> <tbody> <tr class='light'> <td> <a
176
- href='lib-hikidoc_rb.html'> lib/hikidoc.rb </a> </td> <td
177
- class='lines_total'> <tt> 902 </tt> </td> <td class='lines_code'> <tt> 721
178
- </tt> </td> <td> <table cellspacing='0' align='right' cellpadding='0'> <tr>
179
- <td> <tt class='coverage_total'> 90.2% </tt> &nbsp; </td> <td> <table
180
- class='percent_graph' cellspacing='0' width='100' cellpadding='0'> <tr> <td
181
- class='covered' width='90' /> <td class='uncovered' width='10' /> </tr>
182
- </table> </td> </tr> </table> </td> <td> <table cellspacing='0'
183
- align='right' cellpadding='0'> <tr> <td> <tt class='coverage_code'> 87.8%
184
- </tt> &nbsp; </td> <td> <table class='percent_graph' cellspacing='0'
185
- width='100' cellpadding='0'> <tr> <td class='covered' width='88' /> <td
186
- class='uncovered' width='12' /> </tr> </table> </td> </tr> </table> </td>
187
- </tr> </tbody> </table><pre><span class="inferred1"><a name="line1"></a> 1 #
188
- Copyright (c) 2005, Kazuhiko &lt;kazuhiko@fdiary.net&gt; </span><span
189
- class="inferred0"><a name="line2"></a> 2 # Copyright (c) 2007 Minero Aoki
190
- </span><span class="inferred1"><a name="line3"></a> 3 # All rights reserved.
191
- </span><span class="inferred0"><a name="line4"></a> 4 # </span><span
192
- class="inferred1"><a name="line5"></a> 5 # Redistribution and use in source
193
- and binary forms, with or without </span><span class="inferred0"><a
194
- name="line6"></a> 6 # modification, are permitted provided that the
195
- following conditions are </span><span class="inferred1"><a name="line7"></a>
196
- 7 # met: </span><span class="inferred0"><a name="line8"></a> 8 #
197
- </span><span class="inferred1"><a name="line9"></a> 9 # * Redistributions of
198
- source code must retain the above copyright </span><span
199
- class="inferred0"><a name="line10"></a> 10 # notice, this list of conditions
200
- and the following disclaimer. </span><span class="inferred1"><a
201
- name="line11"></a> 11 # * Redistributions in binary form must reproduce the
202
- above </span><span class="inferred0"><a name="line12"></a> 12 # copyright
203
- notice, this list of conditions and the following </span><span
204
- class="inferred1"><a name="line13"></a> 13 # disclaimer in the documentation
205
- and/or other materials provided </span><span class="inferred0"><a
206
- name="line14"></a> 14 # with the distribution. </span><span
207
- class="inferred1"><a name="line15"></a> 15 # * Neither the name of the
208
- HikiDoc nor the names of its </span><span class="inferred0"><a
209
- name="line16"></a> 16 # contributors may be used to endorse or promote
210
- products derived </span><span class="inferred1"><a name="line17"></a> 17 #
211
- from this software without specific prior written permission. </span><span
212
- class="inferred0"><a name="line18"></a> 18 # </span><span
213
- class="inferred1"><a name="line19"></a> 19 # THIS SOFTWARE IS PROVIDED BY
214
- THE COPYRIGHT HOLDERS AND CONTRIBUTORS </span><span class="inferred0"><a
215
- name="line20"></a> 20 # &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED
216
- WARRANTIES, INCLUDING, BUT NOT </span><span class="inferred1"><a
217
- name="line21"></a> 21 # LIMITED TO, THE IMPLIED WARRANTIES OF
218
- MERCHANTABILITY AND FITNESS FOR </span><span class="inferred0"><a
219
- name="line22"></a> 22 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
220
- SHALL THE COPYRIGHT </span><span class="inferred1"><a name="line23"></a> 23
221
- # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
222
- </span><span class="inferred0"><a name="line24"></a> 24 # SPECIAL,
223
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT </span><span
224
- class="inferred1"><a name="line25"></a> 25 # LIMITED TO, PROCUREMENT OF
225
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, </span><span class="inferred0"><a
226
- name="line26"></a> 26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
227
- CAUSED AND ON ANY </span><span class="inferred1"><a name="line27"></a> 27 #
228
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
229
- </span><span class="inferred0"><a name="line28"></a> 28 # (INCLUDING
230
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE </span><span
231
- class="inferred1"><a name="line29"></a> 29 # OF THIS SOFTWARE, EVEN IF
232
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. </span><span class="inferred0"><a
233
- name="line30"></a> 30 </span><span class="marked1"><a name="line31"></a> 31
234
- require &quot;stringio&quot; </span><span class="marked0"><a
235
- name="line32"></a> 32 require &quot;strscan&quot; </span><span
236
- class="marked1"><a name="line33"></a> 33 require &quot;uri&quot;
237
- </span><span class="marked0"><a name="line34"></a> 34 begin </span><span
238
- class="marked1"><a name="line35"></a> 35 require
239
- &quot;syntax/convertors/html&quot; </span><span class="uncovered0"><a
240
- name="line36"></a> 36 rescue LoadError </span><span class="uncovered1"><a
241
- name="line37"></a> 37 end </span><span class="inferred0"><a
242
- name="line38"></a> 38 </span><span class="marked1"><a name="line39"></a> 39
243
- class HikiDoc </span><span class="marked0"><a name="line40"></a> 40 VERSION
244
- = &quot;0.0.2&quot; # FIXME </span><span class="inferred1"><a
245
- name="line41"></a> 41 </span><span class="marked0"><a name="line42"></a> 42
246
- class Error &lt; StandardError </span><span class="inferred1"><a
247
- name="line43"></a> 43 end </span><span class="inferred0"><a
248
- name="line44"></a> 44 </span><span class="marked1"><a name="line45"></a> 45
249
- class UnexpectedError &lt; Error </span><span class="inferred0"><a
250
- name="line46"></a> 46 end </span><span class="inferred1"><a
251
- name="line47"></a> 47 </span><span class="marked0"><a name="line48"></a> 48
252
- def HikiDoc.to_html(src, options = {}) </span><span class="uncovered1"><a
253
- name="line49"></a> 49 new(HTMLOutput.new(&quot;&gt;&quot;),
254
- options).compile(src) </span><span class="uncovered0"><a name="line50"></a>
255
- 50 end </span><span class="inferred1"><a name="line51"></a> 51 </span><span
256
- class="marked0"><a name="line52"></a> 52 def HikiDoc.to_xhtml(src, options =
257
- {}) </span><span class="marked1"><a name="line53"></a> 53
258
- new(HTMLOutput.new(&quot; /&gt;&quot;), options).compile(src) </span><span
259
- class="inferred0"><a name="line54"></a> 54 end </span><span
260
- class="inferred1"><a name="line55"></a> 55 </span><span class="marked0"><a
261
- name="line56"></a> 56 def initialize(output, options = {}) </span><span
262
- class="marked1"><a name="line57"></a> 57 @output = output </span><span
263
- class="marked0"><a name="line58"></a> 58 @options =
264
- default_options.merge(options) </span><span class="marked1"><a
265
- name="line59"></a> 59 @header_re = nil </span><span class="marked0"><a
266
- name="line60"></a> 60 @level = options[:level] || 1 </span><span
267
- class="marked1"><a name="line61"></a> 61 @plugin_syntax =
268
- options[:plugin_syntax] || method(:valid_plugin_syntax?) </span><span
269
- class="inferred0"><a name="line62"></a> 62 end </span><span
270
- class="inferred1"><a name="line63"></a> 63 </span><span class="marked0"><a
271
- name="line64"></a> 64 def compile(src) </span><span class="marked1"><a
272
- name="line65"></a> 65 @output.reset </span><span class="marked0"><a
273
- name="line66"></a> 66 escape_plugin_blocks(src) {|escaped| </span><span
274
- class="marked1"><a name="line67"></a> 67 compile_blocks escaped </span><span
275
- class="marked0"><a name="line68"></a> 68 @output.finish </span><span
276
- class="inferred1"><a name="line69"></a> 69 } </span><span
277
- class="inferred0"><a name="line70"></a> 70 end </span><span
278
- class="inferred1"><a name="line71"></a> 71 </span><span class="inferred0"><a
279
- name="line72"></a> 72 # for backward compatibility </span><span
280
- class="marked1"><a name="line73"></a> 73 def to_html </span><span
281
- class="uncovered0"><a name="line74"></a> 74 $stderr.puts(&quot;warning:
282
- HikiDoc#to_html is deprecated. Please use HikiDoc.to_html or
283
- HikiDoc.to_xhtml instead.&quot;) </span><span class="uncovered1"><a
284
- name="line75"></a> 75 self.class.to_html(@output, @options) </span><span
285
- class="uncovered0"><a name="line76"></a> 76 end </span><span
286
- class="inferred1"><a name="line77"></a> 77 </span><span class="marked0"><a
287
- name="line78"></a> 78 private </span><span class="inferred1"><a
288
- name="line79"></a> 79 </span><span class="marked0"><a name="line80"></a> 80
289
- def default_options </span><span class="inferred1"><a name="line81"></a> 81
290
- { </span><span class="inferred0"><a name="line82"></a> 82
291
- :allow_bracket_inline_image =&gt; true, </span><span class="inferred1"><a
292
- name="line83"></a> 83 :use_wiki_name =&gt; true, </span><span
293
- class="marked0"><a name="line84"></a> 84 :use_not_wiki_name =&gt; true,
294
- </span><span class="marked1"><a name="line85"></a> 85 } </span><span
295
- class="inferred0"><a name="line86"></a> 86 end </span><span
296
- class="inferred1"><a name="line87"></a> 87 </span><span class="inferred0"><a
297
- name="line88"></a> 88 # </span><span class="inferred1"><a name="line89"></a>
298
- 89 # Plugin </span><span class="inferred0"><a name="line90"></a> 90 #
299
- </span><span class="inferred1"><a name="line91"></a> 91 </span><span
300
- class="marked0"><a name="line92"></a> 92 def valid_plugin_syntax?(code)
301
- </span><span class="marked1"><a name="line93"></a> 93 /['&quot;]/ !~
302
- code.gsub(/'(?:[^\\']+|\\.)*'|&quot;(?:[^\\&quot;]+|\\.)*&quot;/m,
303
- &quot;&quot;) </span><span class="inferred0"><a name="line94"></a> 94 end
304
- </span><span class="inferred1"><a name="line95"></a> 95 </span><span
305
- class="marked0"><a name="line96"></a> 96 def escape_plugin_blocks(text)
306
- </span><span class="marked1"><a name="line97"></a> 97 s =
307
- StringScanner.new(text) </span><span class="marked0"><a name="line98"></a>
308
- 98 buf = &quot;&quot; </span><span class="marked1"><a name="line99"></a> 99
309
- @plugin_blocks = [] </span><span class="marked0"><a name="line100"></a>100
310
- while chunk = s.scan_until(/\{\{/) </span><span class="marked1"><a
311
- name="line101"></a>101 tail = chunk[-2, 2] </span><span class="marked0"><a
312
- name="line102"></a>102 chunk[-2, 2] = &quot;&quot; </span><span
313
- class="marked1"><a name="line103"></a>103 buf &lt;&lt; chunk </span><span
314
- class="inferred0"><a name="line104"></a>104 # plugin </span><span
315
- class="marked1"><a name="line105"></a>105 if block = extract_plugin_block(s)
316
- </span><span class="marked0"><a name="line106"></a>106 @plugin_blocks.push
317
- block </span><span class="marked1"><a name="line107"></a>107 buf &lt;&lt;
318
- &quot;\0#{@plugin_blocks.size - 1}\0&quot; </span><span class="inferred0"><a
319
- name="line108"></a>108 else </span><span class="marked1"><a
320
- name="line109"></a>109 buf &lt;&lt; &quot;{{&quot; </span><span
321
- class="inferred0"><a name="line110"></a>110 end </span><span
322
- class="inferred1"><a name="line111"></a>111 end </span><span
323
- class="marked0"><a name="line112"></a>112 buf &lt;&lt; s.rest </span><span
324
- class="marked1"><a name="line113"></a>113 yield(buf) </span><span
325
- class="inferred0"><a name="line114"></a>114 end </span><span
326
- class="inferred1"><a name="line115"></a>115 </span><span class="marked0"><a
327
- name="line116"></a>116 def restore_plugin_block(str) </span><span
328
- class="marked1"><a name="line117"></a>117 str.gsub(/\0(\d+)\0/) {
329
- </span><span class="marked0"><a name="line118"></a>118 &quot;{{&quot; +
330
- plugin_block($1.to_i) + &quot;}}&quot; </span><span class="inferred1"><a
331
- name="line119"></a>119 } </span><span class="inferred0"><a
332
- name="line120"></a>120 end </span><span class="inferred1"><a
333
- name="line121"></a>121 </span><span class="marked0"><a
334
- name="line122"></a>122 def evaluate_plugin_block(str, buf = nil)
335
- </span><span class="marked1"><a name="line123"></a>123 buf ||=
336
- @output.container </span><span class="marked0"><a name="line124"></a>124
337
- str.split(/(\0\d+\0)/).each do |s| </span><span class="marked1"><a
338
- name="line125"></a>125 if s[0, 1] == &quot;\0&quot; and s[-1, 1] ==
339
- &quot;\0&quot; </span><span class="marked0"><a name="line126"></a>126 buf
340
- &lt;&lt; @output.inline_plugin(plugin_block(s[1..-2].to_i)) </span><span
341
- class="inferred1"><a name="line127"></a>127 else </span><span
342
- class="marked0"><a name="line128"></a>128 buf &lt;&lt; @output.text(s)
343
- </span><span class="inferred1"><a name="line129"></a>129 end </span><span
344
- class="inferred0"><a name="line130"></a>130 end </span><span
345
- class="marked1"><a name="line131"></a>131 buf </span><span
346
- class="inferred0"><a name="line132"></a>132 end </span><span
347
- class="inferred1"><a name="line133"></a>133 </span><span class="marked0"><a
348
- name="line134"></a>134 def plugin_block(id) </span><span class="marked1"><a
349
- name="line135"></a>135 @plugin_blocks[id] or raise UnexpectedError,
350
- &quot;must not happen: #{id.inspect}&quot; </span><span class="inferred0"><a
351
- name="line136"></a>136 end </span><span class="inferred1"><a
352
- name="line137"></a>137 </span><span class="marked0"><a
353
- name="line138"></a>138 def extract_plugin_block(s) </span><span
354
- class="marked1"><a name="line139"></a>139 pos = s.pos </span><span
355
- class="marked0"><a name="line140"></a>140 buf = &quot;&quot; </span><span
356
- class="marked1"><a name="line141"></a>141 while chunk = s.scan_until(/\}\}/)
357
- </span><span class="marked0"><a name="line142"></a>142 buf &lt;&lt; chunk
358
- </span><span class="marked1"><a name="line143"></a>143
359
- buf.chomp!(&quot;}}&quot;) </span><span class="marked0"><a
360
- name="line144"></a>144 if @plugin_syntax.call(buf) </span><span
361
- class="marked1"><a name="line145"></a>145 return buf </span><span
362
- class="inferred0"><a name="line146"></a>146 end </span><span
363
- class="marked1"><a name="line147"></a>147 buf &lt;&lt; &quot;}}&quot;
364
- </span><span class="inferred0"><a name="line148"></a>148 end </span><span
365
- class="marked1"><a name="line149"></a>149 s.pos = pos </span><span
366
- class="marked0"><a name="line150"></a>150 nil </span><span
367
- class="inferred1"><a name="line151"></a>151 end </span><span
368
- class="inferred0"><a name="line152"></a>152 </span><span
369
- class="inferred1"><a name="line153"></a>153 # </span><span
370
- class="inferred0"><a name="line154"></a>154 # Block Level </span><span
371
- class="inferred1"><a name="line155"></a>155 # </span><span
372
- class="inferred0"><a name="line156"></a>156 </span><span class="marked1"><a
373
- name="line157"></a>157 def compile_blocks(src) </span><span
374
- class="marked0"><a name="line158"></a>158 f =
375
- LineInput.new(StringIO.new(src)) </span><span class="marked1"><a
376
- name="line159"></a>159 while line = f.peek </span><span class="marked0"><a
377
- name="line160"></a>160 case line </span><span class="marked1"><a
378
- name="line161"></a>161 when COMMENT_RE </span><span class="marked0"><a
379
- name="line162"></a>162 f.gets </span><span class="marked1"><a
380
- name="line163"></a>163 when HEADER_RE </span><span class="marked0"><a
381
- name="line164"></a>164 compile_header f.gets </span><span class="marked1"><a
382
- name="line165"></a>165 when HRULE_RE </span><span class="marked0"><a
383
- name="line166"></a>166 f.gets </span><span class="marked1"><a
384
- name="line167"></a>167 compile_hrule </span><span class="marked0"><a
385
- name="line168"></a>168 when LIST_RE </span><span class="marked1"><a
386
- name="line169"></a>169 compile_list f </span><span class="marked0"><a
387
- name="line170"></a>170 when DLIST_RE </span><span class="marked1"><a
388
- name="line171"></a>171 compile_dlist f </span><span class="marked0"><a
389
- name="line172"></a>172 when TABLE_RE </span><span class="marked1"><a
390
- name="line173"></a>173 compile_table f </span><span class="marked0"><a
391
- name="line174"></a>174 when BLOCKQUOTE_RE </span><span class="marked1"><a
392
- name="line175"></a>175 compile_blockquote f </span><span class="marked0"><a
393
- name="line176"></a>176 when INDENTED_PRE_RE </span><span class="marked1"><a
394
- name="line177"></a>177 compile_indented_pre f </span><span
395
- class="marked0"><a name="line178"></a>178 when BLOCK_PRE_OPEN_RE
396
- </span><span class="marked1"><a name="line179"></a>179 compile_block_pre f
397
- </span><span class="inferred0"><a name="line180"></a>180 else </span><span
398
- class="marked1"><a name="line181"></a>181 if /^$/ =~ line </span><span
399
- class="marked0"><a name="line182"></a>182 f.gets </span><span
400
- class="marked1"><a name="line183"></a>183 next </span><span
401
- class="inferred0"><a name="line184"></a>184 end </span><span
402
- class="marked1"><a name="line185"></a>185 compile_paragraph f </span><span
403
- class="inferred0"><a name="line186"></a>186 end </span><span
404
- class="inferred1"><a name="line187"></a>187 end </span><span
405
- class="inferred0"><a name="line188"></a>188 end </span><span
406
- class="inferred1"><a name="line189"></a>189 </span><span class="marked0"><a
407
- name="line190"></a>190 COMMENT_RE = %r&lt;\A//&gt; </span><span
408
- class="inferred1"><a name="line191"></a>191 </span><span class="marked0"><a
409
- name="line192"></a>192 def skip_comments(f) </span><span class="marked1"><a
410
- name="line193"></a>193 f.while_match(COMMENT_RE) do |line| </span><span
411
- class="inferred0"><a name="line194"></a>194 end </span><span
412
- class="inferred1"><a name="line195"></a>195 end </span><span
413
- class="inferred0"><a name="line196"></a>196 </span><span class="marked1"><a
414
- name="line197"></a>197 HEADER_RE = /\A!+/ </span><span class="inferred0"><a
415
- name="line198"></a>198 </span><span class="marked1"><a
416
- name="line199"></a>199 def compile_header(line) </span><span
417
- class="marked0"><a name="line200"></a>200 @header_re ||= /\A!{1,#{7 -
418
- @level}}/ </span><span class="marked1"><a name="line201"></a>201 level =
419
- @level + (line.slice!(@header_re).size - 1) </span><span class="marked0"><a
420
- name="line202"></a>202 title = strip(line) </span><span class="marked1"><a
421
- name="line203"></a>203 @output.headline level, compile_inline(title)
422
- </span><span class="inferred0"><a name="line204"></a>204 end </span><span
423
- class="inferred1"><a name="line205"></a>205 </span><span class="marked0"><a
424
- name="line206"></a>206 HRULE_RE = /\A----$/ </span><span
425
- class="inferred1"><a name="line207"></a>207 </span><span class="marked0"><a
426
- name="line208"></a>208 def compile_hrule </span><span class="marked1"><a
427
- name="line209"></a>209 @output.hrule </span><span class="inferred0"><a
428
- name="line210"></a>210 end </span><span class="inferred1"><a
429
- name="line211"></a>211 </span><span class="marked0"><a
430
- name="line212"></a>212 ULIST = &quot;*&quot; </span><span class="marked1"><a
431
- name="line213"></a>213 OLIST = &quot;#&quot; </span><span class="marked0"><a
432
- name="line214"></a>214 LIST_RE = /\A#{Regexp.union(ULIST, OLIST)}+/
433
- </span><span class="inferred1"><a name="line215"></a>215 </span><span
434
- class="marked0"><a name="line216"></a>216 def compile_list(f) </span><span
435
- class="marked1"><a name="line217"></a>217 typestack = [] </span><span
436
- class="marked0"><a name="line218"></a>218 level = 0 </span><span
437
- class="marked1"><a name="line219"></a>219 @output.list_begin </span><span
438
- class="marked0"><a name="line220"></a>220 f.while_match(LIST_RE) do |line|
439
- </span><span class="marked1"><a name="line221"></a>221 list_type =
440
- (line[0,1] == ULIST ? &quot;ul&quot; : &quot;ol&quot;) </span><span
441
- class="marked0"><a name="line222"></a>222 new_level =
442
- line.slice(LIST_RE).size </span><span class="marked1"><a
443
- name="line223"></a>223 item = strip(line.sub(LIST_RE, &quot;&quot;))
444
- </span><span class="marked0"><a name="line224"></a>224 if new_level &gt;
445
- level </span><span class="marked1"><a name="line225"></a>225 (new_level -
446
- level).times do </span><span class="marked0"><a name="line226"></a>226
447
- typestack.push list_type </span><span class="marked1"><a
448
- name="line227"></a>227 @output.list_open list_type </span><span
449
- class="marked0"><a name="line228"></a>228 @output.listitem_open </span><span
450
- class="inferred1"><a name="line229"></a>229 end </span><span
451
- class="marked0"><a name="line230"></a>230 @output.listitem
452
- compile_inline(item) </span><span class="marked1"><a name="line231"></a>231
453
- elsif new_level &lt; level </span><span class="marked0"><a
454
- name="line232"></a>232 (level - new_level).times do </span><span
455
- class="marked1"><a name="line233"></a>233 @output.listitem_close
456
- </span><span class="marked0"><a name="line234"></a>234 @output.list_close
457
- typestack.pop </span><span class="inferred1"><a name="line235"></a>235 end
458
- </span><span class="marked0"><a name="line236"></a>236
459
- @output.listitem_close </span><span class="marked1"><a
460
- name="line237"></a>237 @output.listitem_open </span><span class="marked0"><a
461
- name="line238"></a>238 @output.listitem compile_inline(item) </span><span
462
- class="marked1"><a name="line239"></a>239 elsif list_type == typestack.last
463
- </span><span class="marked0"><a name="line240"></a>240
464
- @output.listitem_close </span><span class="marked1"><a
465
- name="line241"></a>241 @output.listitem_open </span><span class="marked0"><a
466
- name="line242"></a>242 @output.listitem compile_inline(item) </span><span
467
- class="inferred1"><a name="line243"></a>243 else </span><span
468
- class="marked0"><a name="line244"></a>244 @output.listitem_close
469
- </span><span class="marked1"><a name="line245"></a>245 @output.list_close
470
- typestack.pop </span><span class="marked0"><a name="line246"></a>246
471
- @output.list_open list_type </span><span class="marked1"><a
472
- name="line247"></a>247 @output.listitem_open </span><span class="marked0"><a
473
- name="line248"></a>248 @output.listitem compile_inline(item) </span><span
474
- class="marked1"><a name="line249"></a>249 typestack.push list_type
475
- </span><span class="inferred0"><a name="line250"></a>250 end </span><span
476
- class="marked1"><a name="line251"></a>251 level = new_level </span><span
477
- class="marked0"><a name="line252"></a>252 skip_comments f </span><span
478
- class="inferred1"><a name="line253"></a>253 end </span><span
479
- class="marked0"><a name="line254"></a>254 level.times do </span><span
480
- class="marked1"><a name="line255"></a>255 @output.listitem_close
481
- </span><span class="marked0"><a name="line256"></a>256 @output.list_close
482
- typestack.pop </span><span class="inferred1"><a name="line257"></a>257 end
483
- </span><span class="marked0"><a name="line258"></a>258 @output.list_end
484
- </span><span class="inferred1"><a name="line259"></a>259 end </span><span
485
- class="inferred0"><a name="line260"></a>260 </span><span class="marked1"><a
486
- name="line261"></a>261 DLIST_RE = /\A:/ </span><span class="inferred0"><a
487
- name="line262"></a>262 </span><span class="marked1"><a
488
- name="line263"></a>263 def compile_dlist(f) </span><span class="marked0"><a
489
- name="line264"></a>264 @output.dlist_open </span><span class="marked1"><a
490
- name="line265"></a>265 f.while_match(DLIST_RE) do |line| </span><span
491
- class="marked0"><a name="line266"></a>266 dt, dd =
492
- split_dlitem(line.sub(DLIST_RE, &quot;&quot;)) </span><span
493
- class="marked1"><a name="line267"></a>267 @output.dlist_item
494
- compile_inline(dt), compile_inline(dd) </span><span class="marked0"><a
495
- name="line268"></a>268 skip_comments f </span><span class="inferred1"><a
496
- name="line269"></a>269 end </span><span class="marked0"><a
497
- name="line270"></a>270 @output.dlist_close </span><span class="inferred1"><a
498
- name="line271"></a>271 end </span><span class="inferred0"><a
499
- name="line272"></a>272 </span><span class="marked1"><a
500
- name="line273"></a>273 def split_dlitem(line) </span><span
501
- class="marked0"><a name="line274"></a>274 re =
502
- /\A((?:#{BRACKET_LINK_RE}|.)*?):/o </span><span class="marked1"><a
503
- name="line275"></a>275 if m = re.match(line) </span><span class="marked0"><a
504
- name="line276"></a>276 return m[1], m.post_match </span><span
505
- class="uncovered1"><a name="line277"></a>277 else </span><span
506
- class="uncovered0"><a name="line278"></a>278 return line, &quot;&quot;
507
- </span><span class="uncovered1"><a name="line279"></a>279 end </span><span
508
- class="uncovered0"><a name="line280"></a>280 end </span><span
509
- class="inferred1"><a name="line281"></a>281 </span><span class="marked0"><a
510
- name="line282"></a>282 TABLE_RE = /\A\|\|/ </span><span class="inferred1"><a
511
- name="line283"></a>283 </span><span class="marked0"><a
512
- name="line284"></a>284 def compile_table(f) </span><span class="marked1"><a
513
- name="line285"></a>285 lines = [] </span><span class="marked0"><a
514
- name="line286"></a>286 f.while_match(TABLE_RE) do |line| </span><span
515
- class="marked1"><a name="line287"></a>287 lines.push line </span><span
516
- class="marked0"><a name="line288"></a>288 skip_comments f </span><span
517
- class="inferred1"><a name="line289"></a>289 end </span><span
518
- class="marked0"><a name="line290"></a>290 @output.table_open </span><span
519
- class="marked1"><a name="line291"></a>291 lines.each do |line| </span><span
520
- class="marked0"><a name="line292"></a>292 @output.table_record_open
521
- </span><span class="marked1"><a name="line293"></a>293
522
- split_columns(line.sub(TABLE_RE, &quot;&quot;)).each do |col| </span><span
523
- class="marked0"><a name="line294"></a>294 mid = col.sub!(/\A!/,
524
- &quot;&quot;) ? &quot;table_head&quot; : &quot;table_data&quot; </span><span
525
- class="marked1"><a name="line295"></a>295 span = col.slice!(/\A[\^&gt;]*/)
526
- </span><span class="marked0"><a name="line296"></a>296 rs = span_count(span,
527
- &quot;^&quot;) </span><span class="marked1"><a name="line297"></a>297 cs =
528
- span_count(span, &quot;&gt;&quot;) </span><span class="marked0"><a
529
- name="line298"></a>298 @output.__send__(mid, compile_inline(col), rs, cs)
530
- </span><span class="inferred1"><a name="line299"></a>299 end </span><span
531
- class="marked0"><a name="line300"></a>300 @output.table_record_close
532
- </span><span class="inferred1"><a name="line301"></a>301 end </span><span
533
- class="marked0"><a name="line302"></a>302 @output.table_close </span><span
534
- class="inferred1"><a name="line303"></a>303 end </span><span
535
- class="inferred0"><a name="line304"></a>304 </span><span class="marked1"><a
536
- name="line305"></a>305 def split_columns(str) </span><span
537
- class="marked0"><a name="line306"></a>306 cols = str.split(/\|\|/)
538
- </span><span class="marked1"><a name="line307"></a>307 cols.pop if
539
- cols.last.chomp.empty? </span><span class="marked0"><a
540
- name="line308"></a>308 cols </span><span class="inferred1"><a
541
- name="line309"></a>309 end </span><span class="inferred0"><a
542
- name="line310"></a>310 </span><span class="marked1"><a
543
- name="line311"></a>311 def span_count(str, ch) </span><span
544
- class="marked0"><a name="line312"></a>312 c = str.count(ch) </span><span
545
- class="marked1"><a name="line313"></a>313 c == 0 ? nil : c + 1 </span><span
546
- class="inferred0"><a name="line314"></a>314 end </span><span
547
- class="inferred1"><a name="line315"></a>315 </span><span class="marked0"><a
548
- name="line316"></a>316 BLOCKQUOTE_RE = /\A&quot;&quot;[ \t]?/ </span><span
549
- class="inferred1"><a name="line317"></a>317 </span><span class="marked0"><a
550
- name="line318"></a>318 def compile_blockquote(f) </span><span
551
- class="marked1"><a name="line319"></a>319 @output.blockquote_open
552
- </span><span class="marked0"><a name="line320"></a>320 lines = []
553
- </span><span class="marked1"><a name="line321"></a>321
554
- f.while_match(BLOCKQUOTE_RE) do |line| </span><span class="marked0"><a
555
- name="line322"></a>322 lines.push line.sub(BLOCKQUOTE_RE, &quot;&quot;)
556
- </span><span class="marked1"><a name="line323"></a>323 skip_comments f
557
- </span><span class="inferred0"><a name="line324"></a>324 end </span><span
558
- class="marked1"><a name="line325"></a>325 compile_blocks
559
- lines.join(&quot;&quot;) </span><span class="marked0"><a
560
- name="line326"></a>326 @output.blockquote_close </span><span
561
- class="inferred1"><a name="line327"></a>327 end </span><span
562
- class="inferred0"><a name="line328"></a>328 </span><span class="marked1"><a
563
- name="line329"></a>329 INDENTED_PRE_RE = /\A[ \t]/ </span><span
564
- class="inferred0"><a name="line330"></a>330 </span><span class="marked1"><a
565
- name="line331"></a>331 def compile_indented_pre(f) </span><span
566
- class="marked0"><a name="line332"></a>332 lines = f.span(INDENTED_PRE_RE)\
567
- </span><span class="marked1"><a name="line333"></a>333 .map {|line|
568
- rstrip(line.sub(INDENTED_PRE_RE, &quot;&quot;)) } </span><span
569
- class="marked0"><a name="line334"></a>334 text =
570
- restore_plugin_block(lines.join(&quot;\n&quot;)) </span><span
571
- class="marked1"><a name="line335"></a>335
572
- @output.preformatted(@output.text(text)) </span><span class="inferred0"><a
573
- name="line336"></a>336 end </span><span class="inferred1"><a
574
- name="line337"></a>337 </span><span class="marked0"><a
575
- name="line338"></a>338 BLOCK_PRE_OPEN_RE = /\A&lt;&lt;&lt;\s*(\w+)?/
576
- </span><span class="marked1"><a name="line339"></a>339 BLOCK_PRE_CLOSE_RE =
577
- /\A&gt;&gt;&gt;/ </span><span class="inferred0"><a name="line340"></a>340
578
- </span><span class="marked1"><a name="line341"></a>341 def
579
- compile_block_pre(f) </span><span class="marked0"><a name="line342"></a>342
580
- m = BLOCK_PRE_OPEN_RE.match(f.gets) or raise UnexpectedError, &quot;must not
581
- happen&quot; </span><span class="marked1"><a name="line343"></a>343 str =
582
- restore_plugin_block(f.break(BLOCK_PRE_CLOSE_RE).join.chomp) </span><span
583
- class="marked0"><a name="line344"></a>344 f.gets </span><span
584
- class="marked1"><a name="line345"></a>345 @output.block_preformatted(str,
585
- m[1]) </span><span class="inferred0"><a name="line346"></a>346 end
586
- </span><span class="inferred1"><a name="line347"></a>347 </span><span
587
- class="marked0"><a name="line348"></a>348 BLANK = /\A$/ </span><span
588
- class="marked1"><a name="line349"></a>349 PARAGRAPH_END_RE =
589
- Regexp.union(BLANK, </span><span class="inferred0"><a name="line350"></a>350
590
- HEADER_RE, HRULE_RE, LIST_RE, DLIST_RE, </span><span class="inferred1"><a
591
- name="line351"></a>351 BLOCKQUOTE_RE, TABLE_RE, </span><span
592
- class="inferred0"><a name="line352"></a>352 INDENTED_PRE_RE,
593
- BLOCK_PRE_OPEN_RE) </span><span class="inferred1"><a name="line353"></a>353
594
- </span><span class="marked0"><a name="line354"></a>354 def
595
- compile_paragraph(f) </span><span class="marked1"><a name="line355"></a>355
596
- lines = f.break(PARAGRAPH_END_RE)\ </span><span class="marked0"><a
597
- name="line356"></a>356 .reject {|line| COMMENT_RE =~ line } </span><span
598
- class="marked1"><a name="line357"></a>357 if lines.size == 1 and
599
- /\A\0(\d+)\0\z/ =~ strip(lines[0]) </span><span class="marked0"><a
600
- name="line358"></a>358 @output.block_plugin plugin_block($1.to_i)
601
- </span><span class="inferred1"><a name="line359"></a>359 else </span><span
602
- class="marked0"><a name="line360"></a>360 line_buffer =
603
- @output.container(:paragraph) </span><span class="marked1"><a
604
- name="line361"></a>361 lines.each_with_index do |line, i| </span><span
605
- class="marked0"><a name="line362"></a>362 buffer = @output.container
606
- </span><span class="marked1"><a name="line363"></a>363 line_buffer &lt;&lt;
607
- buffer </span><span class="marked0"><a name="line364"></a>364
608
- compile_inline(lstrip(line).chomp, buffer) </span><span class="inferred1"><a
609
- name="line365"></a>365 end </span><span class="marked0"><a
610
- name="line366"></a>366 @output.paragraph(line_buffer) </span><span
611
- class="inferred1"><a name="line367"></a>367 end </span><span
612
- class="inferred0"><a name="line368"></a>368 end </span><span
613
- class="inferred1"><a name="line369"></a>369 </span><span
614
- class="inferred0"><a name="line370"></a>370 # </span><span
615
- class="inferred1"><a name="line371"></a>371 # Inline Level </span><span
616
- class="inferred0"><a name="line372"></a>372 # </span><span
617
- class="inferred1"><a name="line373"></a>373 </span><span class="marked0"><a
618
- name="line374"></a>374 BRACKET_LINK_RE = /\[\[.+?\]\]/ </span><span
619
- class="marked1"><a name="line375"></a>375 URI_RE =
620
- /(?:https?|ftp|file|mailto):[A-Za-z0-9;\/?:@&amp;=+$,\-_.!~*\'()#%]+/
621
- </span><span class="marked0"><a name="line376"></a>376 WIKI_NAME_RE =
622
- /\b(?:[A-Z]+[a-z\d]+){2,}\b/ </span><span class="inferred1"><a
623
- name="line377"></a>377 </span><span class="marked0"><a
624
- name="line378"></a>378 def inline_syntax_re </span><span class="marked1"><a
625
- name="line379"></a>379 if @options[:use_wiki_name] </span><span
626
- class="marked0"><a name="line380"></a>380 if @options[:use_not_wiki_name]
627
- </span><span class="marked1"><a name="line381"></a>381 /
628
- (#{BRACKET_LINK_RE}) </span><span class="uncovered0"><a
629
- name="line382"></a>382 | (#{URI_RE}) </span><span class="uncovered1"><a
630
- name="line383"></a>383 | (#{MODIFIER_RE}) </span><span class="marked0"><a
631
- name="line384"></a>384 | (\^?#{WIKI_NAME_RE}) </span><span
632
- class="uncovered1"><a name="line385"></a>385 /xo </span><span
633
- class="inferred0"><a name="line386"></a>386 else </span><span
634
- class="marked1"><a name="line387"></a>387 / (#{BRACKET_LINK_RE})
635
- </span><span class="uncovered0"><a name="line388"></a>388 | (#{URI_RE})
636
- </span><span class="uncovered1"><a name="line389"></a>389 | (#{MODIFIER_RE})
637
- </span><span class="marked0"><a name="line390"></a>390 | (#{WIKI_NAME_RE})
638
- </span><span class="uncovered1"><a name="line391"></a>391 /xo </span><span
639
- class="uncovered0"><a name="line392"></a>392 end </span><span
640
- class="inferred1"><a name="line393"></a>393 else </span><span
641
- class="marked0"><a name="line394"></a>394 / (#{BRACKET_LINK_RE})
642
- </span><span class="uncovered1"><a name="line395"></a>395 | (#{URI_RE})
643
- </span><span class="marked0"><a name="line396"></a>396 | (#{MODIFIER_RE})
644
- </span><span class="uncovered1"><a name="line397"></a>397 /xo </span><span
645
- class="uncovered0"><a name="line398"></a>398 end </span><span
646
- class="uncovered1"><a name="line399"></a>399 end </span><span
647
- class="inferred0"><a name="line400"></a>400 </span><span class="marked1"><a
648
- name="line401"></a>401 def compile_inline(str, buf = nil) </span><span
649
- class="marked0"><a name="line402"></a>402 buf ||= @output.container
650
- </span><span class="marked1"><a name="line403"></a>403 re = inline_syntax_re
651
- </span><span class="marked0"><a name="line404"></a>404 pending_str = nil
652
- </span><span class="marked1"><a name="line405"></a>405 while m =
653
- re.match(str) </span><span class="marked0"><a name="line406"></a>406 str =
654
- m.post_match </span><span class="inferred1"><a name="line407"></a>407
655
- </span><span class="marked0"><a name="line408"></a>408 link, uri, mod,
656
- wiki_name = m[1, 4] </span><span class="marked1"><a name="line409"></a>409
657
- if wiki_name and wiki_name[0, 1] == &quot;^&quot; </span><span
658
- class="marked0"><a name="line410"></a>410 pending_str = m.pre_match +
659
- wiki_name[1..-1] </span><span class="marked1"><a name="line411"></a>411 next
660
- </span><span class="inferred0"><a name="line412"></a>412 end </span><span
661
- class="inferred1"><a name="line413"></a>413 </span><span class="marked0"><a
662
- name="line414"></a>414 pre_str = &quot;#{pending_str}#{m.pre_match}&quot;
663
- </span><span class="marked1"><a name="line415"></a>415 pending_str = nil
664
- </span><span class="marked0"><a name="line416"></a>416
665
- evaluate_plugin_block(pre_str, buf) </span><span class="marked1"><a
666
- name="line417"></a>417 compile_inline_markup(buf, link, uri, mod, wiki_name)
667
- </span><span class="inferred0"><a name="line418"></a>418 end </span><span
668
- class="marked1"><a name="line419"></a>419 evaluate_plugin_block(pending_str
669
- || str, buf) </span><span class="marked0"><a name="line420"></a>420 buf
670
- </span><span class="inferred1"><a name="line421"></a>421 end </span><span
671
- class="inferred0"><a name="line422"></a>422 </span><span class="marked1"><a
672
- name="line423"></a>423 def compile_inline_markup(buf, link, uri, mod,
673
- wiki_name) </span><span class="inferred0"><a name="line424"></a>424 case
674
- </span><span class="marked1"><a name="line425"></a>425 when link
675
- </span><span class="marked0"><a name="line426"></a>426 buf &lt;&lt;
676
- compile_bracket_link(link[2...-2]) </span><span class="marked1"><a
677
- name="line427"></a>427 when uri </span><span class="marked0"><a
678
- name="line428"></a>428 buf &lt;&lt; compile_uri_autolink(uri) </span><span
679
- class="marked1"><a name="line429"></a>429 when mod </span><span
680
- class="marked0"><a name="line430"></a>430 buf &lt;&lt; compile_modifier(mod)
681
- </span><span class="marked1"><a name="line431"></a>431 when wiki_name
682
- </span><span class="marked0"><a name="line432"></a>432 buf &lt;&lt;
683
- @output.wiki_name(wiki_name) </span><span class="uncovered1"><a
684
- name="line433"></a>433 else </span><span class="uncovered0"><a
685
- name="line434"></a>434 raise UnexpectedError, &quot;must not happen&quot;
686
- </span><span class="marked1"><a name="line435"></a>435 end </span><span
687
- class="inferred0"><a name="line436"></a>436 end </span><span
688
- class="inferred1"><a name="line437"></a>437 </span><span class="marked0"><a
689
- name="line438"></a>438 def compile_bracket_link(link) </span><span
690
- class="marked1"><a name="line439"></a>439 if m =
691
- /\A(?&gt;[^|\\]+|\\.)*\|/.match(link) </span><span class="marked0"><a
692
- name="line440"></a>440 title = m[0].chop </span><span class="marked1"><a
693
- name="line441"></a>441 uri = m.post_match </span><span class="marked0"><a
694
- name="line442"></a>442 fixed_uri = fix_uri(uri) </span><span
695
- class="marked1"><a name="line443"></a>443 if can_image_link?(uri)
696
- </span><span class="marked0"><a name="line444"></a>444
697
- @output.image_hyperlink(fixed_uri, title) </span><span class="inferred1"><a
698
- name="line445"></a>445 else </span><span class="marked0"><a
699
- name="line446"></a>446 @output.hyperlink(fixed_uri, compile_modifier(title))
700
- </span><span class="inferred1"><a name="line447"></a>447 end </span><span
701
- class="inferred0"><a name="line448"></a>448 else </span><span
702
- class="marked1"><a name="line449"></a>449 fixed_link = fix_uri(link)
703
- </span><span class="marked0"><a name="line450"></a>450 if
704
- can_image_link?(link) </span><span class="marked1"><a name="line451"></a>451
705
- @output.image_hyperlink(fixed_link) </span><span class="inferred0"><a
706
- name="line452"></a>452 else </span><span class="marked1"><a
707
- name="line453"></a>453 @output.hyperlink(fixed_link, @output.text(link))
708
- </span><span class="inferred0"><a name="line454"></a>454 end </span><span
709
- class="inferred1"><a name="line455"></a>455 end </span><span
710
- class="inferred0"><a name="line456"></a>456 end </span><span
711
- class="inferred1"><a name="line457"></a>457 </span><span class="marked0"><a
712
- name="line458"></a>458 def can_image_link?(uri) </span><span
713
- class="marked1"><a name="line459"></a>459 image?(uri) and
714
- @options[:allow_bracket_inline_image] </span><span class="inferred0"><a
715
- name="line460"></a>460 end </span><span class="inferred1"><a
716
- name="line461"></a>461 </span><span class="marked0"><a
717
- name="line462"></a>462 def compile_uri_autolink(uri) </span><span
718
- class="marked1"><a name="line463"></a>463 if image?(uri) </span><span
719
- class="marked0"><a name="line464"></a>464
720
- @output.image_hyperlink(fix_uri(uri)) </span><span class="inferred1"><a
721
- name="line465"></a>465 else </span><span class="marked0"><a
722
- name="line466"></a>466 @output.hyperlink(fix_uri(uri), @output.text(uri))
723
- </span><span class="inferred1"><a name="line467"></a>467 end </span><span
724
- class="inferred0"><a name="line468"></a>468 end </span><span
725
- class="inferred1"><a name="line469"></a>469 </span><span class="marked0"><a
726
- name="line470"></a>470 def fix_uri(uri) </span><span class="marked1"><a
727
- name="line471"></a>471 if /\A(?:https?|ftp|file):(?!\/\/)/ =~ uri
728
- </span><span class="marked0"><a name="line472"></a>472 uri.sub(/\A\w+:/,
729
- &quot;&quot;) </span><span class="inferred1"><a name="line473"></a>473 else
730
- </span><span class="marked0"><a name="line474"></a>474 uri </span><span
731
- class="inferred1"><a name="line475"></a>475 end </span><span
732
- class="inferred0"><a name="line476"></a>476 end </span><span
733
- class="inferred1"><a name="line477"></a>477 </span><span class="marked0"><a
734
- name="line478"></a>478 IMAGE_EXTS = %w(.jpg .jpeg .gif .png) </span><span
735
- class="inferred1"><a name="line479"></a>479 </span><span class="marked0"><a
736
- name="line480"></a>480 def image?(uri) </span><span class="marked1"><a
737
- name="line481"></a>481 IMAGE_EXTS.include?(File.extname(uri).downcase)
738
- </span><span class="inferred0"><a name="line482"></a>482 end </span><span
739
- class="inferred1"><a name="line483"></a>483 </span><span class="marked0"><a
740
- name="line484"></a>484 STRONG = &quot;'''&quot; </span><span
741
- class="marked1"><a name="line485"></a>485 EM = &quot;''&quot; </span><span
742
- class="marked0"><a name="line486"></a>486 DEL = &quot;==&quot; </span><span
743
- class="inferred1"><a name="line487"></a>487 </span><span class="marked0"><a
744
- name="line488"></a>488 STRONG_RE = /'''.+?'''/ </span><span
745
- class="marked1"><a name="line489"></a>489 EM_RE = /''.+?''/ </span><span
746
- class="marked0"><a name="line490"></a>490 DEL_RE = /==.+?==/ </span><span
747
- class="inferred1"><a name="line491"></a>491 </span><span class="marked0"><a
748
- name="line492"></a>492 MODIFIER_RE = Regexp.union(STRONG_RE, EM_RE, DEL_RE)
749
- </span><span class="inferred1"><a name="line493"></a>493 </span><span
750
- class="marked0"><a name="line494"></a>494 MODTAG = { </span><span
751
- class="inferred1"><a name="line495"></a>495 STRONG =&gt; &quot;strong&quot;,
752
- </span><span class="inferred0"><a name="line496"></a>496 EM =&gt;
753
- &quot;em&quot;, </span><span class="inferred1"><a name="line497"></a>497 DEL
754
- =&gt; &quot;del&quot; </span><span class="inferred0"><a
755
- name="line498"></a>498 } </span><span class="inferred1"><a
756
- name="line499"></a>499 </span><span class="marked0"><a
757
- name="line500"></a>500 def compile_modifier(str) </span><span
758
- class="marked1"><a name="line501"></a>501 buf = @output.container
759
- </span><span class="marked0"><a name="line502"></a>502 while m = /
760
- (#{MODIFIER_RE}) </span><span class="uncovered1"><a name="line503"></a>503
761
- /xo.match(str) </span><span class="marked0"><a name="line504"></a>504
762
- evaluate_plugin_block(m.pre_match, buf) </span><span class="inferred1"><a
763
- name="line505"></a>505 case </span><span class="marked0"><a
764
- name="line506"></a>506 when chunk = m[1] </span><span class="marked1"><a
765
- name="line507"></a>507 mod, s = split_mod(chunk) </span><span
766
- class="marked0"><a name="line508"></a>508 mid = MODTAG[mod] </span><span
767
- class="marked1"><a name="line509"></a>509 buf &lt;&lt; @output.__send__(mid,
768
- compile_inline(s)) </span><span class="uncovered0"><a name="line510"></a>510
769
- else </span><span class="uncovered1"><a name="line511"></a>511 raise
770
- UnexpectedError, &quot;must not happen&quot; </span><span class="marked0"><a
771
- name="line512"></a>512 end </span><span class="marked1"><a
772
- name="line513"></a>513 str = m.post_match </span><span class="inferred0"><a
773
- name="line514"></a>514 end </span><span class="marked1"><a
774
- name="line515"></a>515 evaluate_plugin_block(str, buf) </span><span
775
- class="marked0"><a name="line516"></a>516 buf </span><span
776
- class="inferred1"><a name="line517"></a>517 end </span><span
777
- class="inferred0"><a name="line518"></a>518 </span><span class="marked1"><a
778
- name="line519"></a>519 def split_mod(str) </span><span class="marked0"><a
779
- name="line520"></a>520 case str </span><span class="marked1"><a
780
- name="line521"></a>521 when /\A'''/ </span><span class="marked0"><a
781
- name="line522"></a>522 return str[0, 3], str[3...-3] </span><span
782
- class="marked1"><a name="line523"></a>523 when /\A''/ </span><span
783
- class="marked0"><a name="line524"></a>524 return str[0, 2], str[2...-2]
784
- </span><span class="marked1"><a name="line525"></a>525 when /\A==/
785
- </span><span class="marked0"><a name="line526"></a>526 return str[0, 2],
786
- str[2...-2] </span><span class="uncovered1"><a name="line527"></a>527 else
787
- </span><span class="uncovered0"><a name="line528"></a>528 raise
788
- UnexpectedError, &quot;must not happen: #{str.inspect}&quot; </span><span
789
- class="uncovered1"><a name="line529"></a>529 end </span><span
790
- class="uncovered0"><a name="line530"></a>530 end </span><span
791
- class="inferred1"><a name="line531"></a>531 </span><span class="marked0"><a
792
- name="line532"></a>532 def strip(str) </span><span class="marked1"><a
793
- name="line533"></a>533 rstrip(lstrip(str)) </span><span class="inferred0"><a
794
- name="line534"></a>534 end </span><span class="inferred1"><a
795
- name="line535"></a>535 </span><span class="marked0"><a
796
- name="line536"></a>536 def rstrip(str) </span><span class="marked1"><a
797
- name="line537"></a>537 str.sub(/[ \t\r\n\v\f]+\z/, &quot;&quot;)
798
- </span><span class="inferred0"><a name="line538"></a>538 end </span><span
799
- class="inferred1"><a name="line539"></a>539 </span><span class="marked0"><a
800
- name="line540"></a>540 def lstrip(str) </span><span class="marked1"><a
801
- name="line541"></a>541 str.sub(/\A[ \t\r\n\v\f]+/, &quot;&quot;)
802
- </span><span class="inferred0"><a name="line542"></a>542 end </span><span
803
- class="inferred1"><a name="line543"></a>543 </span><span
804
- class="inferred0"><a name="line544"></a>544 </span><span class="marked1"><a
805
- name="line545"></a>545 class HTMLOutput </span><span class="marked0"><a
806
- name="line546"></a>546 def initialize(suffix = &quot; /&gt;&quot;)
807
- </span><span class="marked1"><a name="line547"></a>547 @suffix = suffix
808
- </span><span class="marked0"><a name="line548"></a>548 @f = nil </span><span
809
- class="inferred1"><a name="line549"></a>549 end </span><span
810
- class="inferred0"><a name="line550"></a>550 </span><span class="marked1"><a
811
- name="line551"></a>551 def reset </span><span class="marked0"><a
812
- name="line552"></a>552 @f = StringIO.new </span><span class="inferred1"><a
813
- name="line553"></a>553 end </span><span class="inferred0"><a
814
- name="line554"></a>554 </span><span class="marked1"><a
815
- name="line555"></a>555 def finish </span><span class="marked0"><a
816
- name="line556"></a>556 @f.string </span><span class="inferred1"><a
817
- name="line557"></a>557 end </span><span class="inferred0"><a
818
- name="line558"></a>558 </span><span class="marked1"><a
819
- name="line559"></a>559 def container(_for=nil) </span><span
820
- class="marked0"><a name="line560"></a>560 case _for </span><span
821
- class="marked1"><a name="line561"></a>561 when :paragraph </span><span
822
- class="marked0"><a name="line562"></a>562 [] </span><span
823
- class="inferred1"><a name="line563"></a>563 else </span><span
824
- class="marked0"><a name="line564"></a>564 &quot;&quot; </span><span
825
- class="inferred1"><a name="line565"></a>565 end </span><span
826
- class="inferred0"><a name="line566"></a>566 end </span><span
827
- class="inferred1"><a name="line567"></a>567 </span><span
828
- class="inferred0"><a name="line568"></a>568 # </span><span
829
- class="inferred1"><a name="line569"></a>569 # Procedures </span><span
830
- class="inferred0"><a name="line570"></a>570 # </span><span
831
- class="inferred1"><a name="line571"></a>571 </span><span class="marked0"><a
832
- name="line572"></a>572 def headline(level, title) </span><span
833
- class="marked1"><a name="line573"></a>573 @f.puts
834
- &quot;&lt;h#{level}&gt;#{title}&lt;/h#{level}&gt;&quot; </span><span
835
- class="inferred0"><a name="line574"></a>574 end </span><span
836
- class="inferred1"><a name="line575"></a>575 </span><span class="marked0"><a
837
- name="line576"></a>576 def hrule </span><span class="marked1"><a
838
- name="line577"></a>577 @f.puts &quot;&lt;hr#{@suffix}&quot; </span><span
839
- class="inferred0"><a name="line578"></a>578 end </span><span
840
- class="inferred1"><a name="line579"></a>579 </span><span class="marked0"><a
841
- name="line580"></a>580 def list_begin </span><span class="marked1"><a
842
- name="line581"></a>581 end </span><span class="inferred0"><a
843
- name="line582"></a>582 </span><span class="marked1"><a
844
- name="line583"></a>583 def list_end </span><span class="marked0"><a
845
- name="line584"></a>584 @f.puts </span><span class="inferred1"><a
846
- name="line585"></a>585 end </span><span class="inferred0"><a
847
- name="line586"></a>586 </span><span class="marked1"><a
848
- name="line587"></a>587 def list_open(type) </span><span class="marked0"><a
849
- name="line588"></a>588 @f.puts &quot;&lt;#{type}&gt;&quot; </span><span
850
- class="inferred1"><a name="line589"></a>589 end </span><span
851
- class="inferred0"><a name="line590"></a>590 </span><span class="marked1"><a
852
- name="line591"></a>591 def list_close(type) </span><span class="marked0"><a
853
- name="line592"></a>592 @f.print &quot;&lt;/#{type}&gt;&quot; </span><span
854
- class="inferred1"><a name="line593"></a>593 end </span><span
855
- class="inferred0"><a name="line594"></a>594 </span><span class="marked1"><a
856
- name="line595"></a>595 def listitem_open </span><span class="marked0"><a
857
- name="line596"></a>596 @f.print &quot;&lt;li&gt;&quot; </span><span
858
- class="inferred1"><a name="line597"></a>597 end </span><span
859
- class="inferred0"><a name="line598"></a>598 </span><span class="marked1"><a
860
- name="line599"></a>599 def listitem_close </span><span class="marked0"><a
861
- name="line600"></a>600 @f.puts &quot;&lt;/li&gt;&quot; </span><span
862
- class="inferred1"><a name="line601"></a>601 end </span><span
863
- class="inferred0"><a name="line602"></a>602 </span><span class="marked1"><a
864
- name="line603"></a>603 def listitem(item) </span><span class="marked0"><a
865
- name="line604"></a>604 @f.print item </span><span class="inferred1"><a
866
- name="line605"></a>605 end </span><span class="inferred0"><a
867
- name="line606"></a>606 </span><span class="marked1"><a
868
- name="line607"></a>607 def dlist_open </span><span class="marked0"><a
869
- name="line608"></a>608 @f.puts &quot;&lt;dl&gt;&quot; </span><span
870
- class="inferred1"><a name="line609"></a>609 end </span><span
871
- class="inferred0"><a name="line610"></a>610 </span><span class="marked1"><a
872
- name="line611"></a>611 def dlist_close </span><span class="marked0"><a
873
- name="line612"></a>612 @f.puts &quot;&lt;/dl&gt;&quot; </span><span
874
- class="inferred1"><a name="line613"></a>613 end </span><span
875
- class="inferred0"><a name="line614"></a>614 </span><span class="marked1"><a
876
- name="line615"></a>615 def dlist_item(dt, dd) </span><span
877
- class="inferred0"><a name="line616"></a>616 case </span><span
878
- class="marked1"><a name="line617"></a>617 when dd.empty? </span><span
879
- class="marked0"><a name="line618"></a>618 @f.puts
880
- &quot;&lt;dt&gt;#{dt}&lt;/dt&gt;&quot; </span><span class="marked1"><a
881
- name="line619"></a>619 when dt.empty? </span><span class="marked0"><a
882
- name="line620"></a>620 @f.puts &quot;&lt;dd&gt;#{dd}&lt;/dd&gt;&quot;
883
- </span><span class="inferred1"><a name="line621"></a>621 else </span><span
884
- class="marked0"><a name="line622"></a>622 @f.puts
885
- &quot;&lt;dt&gt;#{dt}&lt;/dt&gt;&quot; </span><span class="marked1"><a
886
- name="line623"></a>623 @f.puts &quot;&lt;dd&gt;#{dd}&lt;/dd&gt;&quot;
887
- </span><span class="marked0"><a name="line624"></a>624 end </span><span
888
- class="inferred1"><a name="line625"></a>625 end </span><span
889
- class="inferred0"><a name="line626"></a>626 </span><span class="marked1"><a
890
- name="line627"></a>627 def table_open </span><span class="marked0"><a
891
- name="line628"></a>628 @f.puts %Q(&lt;table border=&quot;1&quot;&gt;)
892
- </span><span class="inferred1"><a name="line629"></a>629 end </span><span
893
- class="inferred0"><a name="line630"></a>630 </span><span class="marked1"><a
894
- name="line631"></a>631 def table_close </span><span class="marked0"><a
895
- name="line632"></a>632 @f.puts &quot;&lt;/table&gt;&quot; </span><span
896
- class="inferred1"><a name="line633"></a>633 end </span><span
897
- class="inferred0"><a name="line634"></a>634 </span><span class="marked1"><a
898
- name="line635"></a>635 def table_record_open </span><span class="marked0"><a
899
- name="line636"></a>636 @f.print &quot;&lt;tr&gt;&quot; </span><span
900
- class="inferred1"><a name="line637"></a>637 end </span><span
901
- class="inferred0"><a name="line638"></a>638 </span><span class="marked1"><a
902
- name="line639"></a>639 def table_record_close </span><span
903
- class="marked0"><a name="line640"></a>640 @f.puts &quot;&lt;/tr&gt;&quot;
904
- </span><span class="inferred1"><a name="line641"></a>641 end </span><span
905
- class="inferred0"><a name="line642"></a>642 </span><span class="marked1"><a
906
- name="line643"></a>643 def table_head(item, rs, cs) </span><span
907
- class="marked0"><a name="line644"></a>644 @f.print &quot;&lt;th#{tdattr(rs,
908
- cs)}&gt;#{item}&lt;/th&gt;&quot; </span><span class="inferred1"><a
909
- name="line645"></a>645 end </span><span class="inferred0"><a
910
- name="line646"></a>646 </span><span class="marked1"><a
911
- name="line647"></a>647 def table_data(item, rs, cs) </span><span
912
- class="marked0"><a name="line648"></a>648 @f.print &quot;&lt;td#{tdattr(rs,
913
- cs)}&gt;#{item}&lt;/td&gt;&quot; </span><span class="inferred1"><a
914
- name="line649"></a>649 end </span><span class="inferred0"><a
915
- name="line650"></a>650 </span><span class="marked1"><a
916
- name="line651"></a>651 def tdattr(rs, cs) </span><span class="marked0"><a
917
- name="line652"></a>652 buf = &quot;&quot; </span><span class="marked1"><a
918
- name="line653"></a>653 buf &lt;&lt; %Q( rowspan=&quot;#{rs}&quot;) if rs
919
- </span><span class="marked0"><a name="line654"></a>654 buf &lt;&lt; %Q(
920
- colspan=&quot;#{cs}&quot;) if cs </span><span class="marked1"><a
921
- name="line655"></a>655 buf </span><span class="inferred0"><a
922
- name="line656"></a>656 end </span><span class="marked1"><a
923
- name="line657"></a>657 private :tdattr </span><span class="inferred0"><a
924
- name="line658"></a>658 </span><span class="marked1"><a
925
- name="line659"></a>659 def blockquote_open </span><span class="marked0"><a
926
- name="line660"></a>660 @f.print &quot;&lt;blockquote&gt;&quot; </span><span
927
- class="inferred1"><a name="line661"></a>661 end </span><span
928
- class="inferred0"><a name="line662"></a>662 </span><span class="marked1"><a
929
- name="line663"></a>663 def blockquote_close </span><span class="marked0"><a
930
- name="line664"></a>664 @f.puts &quot;&lt;/blockquote&gt;&quot; </span><span
931
- class="inferred1"><a name="line665"></a>665 end </span><span
932
- class="inferred0"><a name="line666"></a>666 </span><span class="marked1"><a
933
- name="line667"></a>667 def block_preformatted(str, info) </span><span
934
- class="marked0"><a name="line668"></a>668 syntax = info ? info.downcase :
935
- nil </span><span class="marked1"><a name="line669"></a>669 if syntax
936
- </span><span class="marked0"><a name="line670"></a>670 begin </span><span
937
- class="marked1"><a name="line671"></a>671 convertor =
938
- Syntax::Convertors::HTML.for_syntax(syntax) </span><span class="marked0"><a
939
- name="line672"></a>672 @f.puts convertor.convert(str) </span><span
940
- class="marked1"><a name="line673"></a>673 return </span><span
941
- class="uncovered0"><a name="line674"></a>674 rescue NameError, RuntimeError
942
- </span><span class="uncovered1"><a name="line675"></a>675 end </span><span
943
- class="uncovered0"><a name="line676"></a>676 end </span><span
944
- class="marked1"><a name="line677"></a>677 preformatted(text(str))
945
- </span><span class="inferred0"><a name="line678"></a>678 end </span><span
946
- class="inferred1"><a name="line679"></a>679 </span><span class="marked0"><a
947
- name="line680"></a>680 def preformatted(str) </span><span class="marked1"><a
948
- name="line681"></a>681 @f.print &quot;&lt;pre&gt;&quot; </span><span
949
- class="marked0"><a name="line682"></a>682 @f.print str </span><span
950
- class="marked1"><a name="line683"></a>683 @f.puts &quot;&lt;/pre&gt;&quot;
951
- </span><span class="inferred0"><a name="line684"></a>684 end </span><span
952
- class="inferred1"><a name="line685"></a>685 </span><span class="marked0"><a
953
- name="line686"></a>686 def paragraph(lines) </span><span class="marked1"><a
954
- name="line687"></a>687 @f.puts
955
- &quot;&lt;p&gt;#{lines.join(&quot;\n&quot;)}&lt;/p&gt;&quot; </span><span
956
- class="inferred0"><a name="line688"></a>688 end </span><span
957
- class="inferred1"><a name="line689"></a>689 </span><span class="marked0"><a
958
- name="line690"></a>690 def block_plugin(str) </span><span class="marked1"><a
959
- name="line691"></a>691 @f.puts %Q(&lt;div
960
- class=&quot;plugin&quot;&gt;{{#{escape_html(str)}}}&lt;/div&gt;)
961
- </span><span class="inferred0"><a name="line692"></a>692 end </span><span
962
- class="inferred1"><a name="line693"></a>693 </span><span
963
- class="inferred0"><a name="line694"></a>694 # </span><span
964
- class="inferred1"><a name="line695"></a>695 # Functions </span><span
965
- class="inferred0"><a name="line696"></a>696 # </span><span
966
- class="inferred1"><a name="line697"></a>697 </span><span class="marked0"><a
967
- name="line698"></a>698 def hyperlink(uri, title) </span><span
968
- class="marked1"><a name="line699"></a>699 %Q(&lt;a
969
- href=&quot;#{escape_html_param(uri)}&quot;&gt;#{title}&lt;/a&gt;)
970
- </span><span class="inferred0"><a name="line700"></a>700 end </span><span
971
- class="inferred1"><a name="line701"></a>701 </span><span class="marked0"><a
972
- name="line702"></a>702 def wiki_name(name) </span><span class="marked1"><a
973
- name="line703"></a>703 hyperlink(name, text(name)) </span><span
974
- class="inferred0"><a name="line704"></a>704 end </span><span
975
- class="inferred1"><a name="line705"></a>705 </span><span class="marked0"><a
976
- name="line706"></a>706 def image_hyperlink(uri, alt = nil) </span><span
977
- class="marked1"><a name="line707"></a>707 alt ||= uri.split(/\//).last
978
- </span><span class="marked0"><a name="line708"></a>708 alt =
979
- escape_html(alt) </span><span class="marked1"><a name="line709"></a>709
980
- %Q(&lt;img src=&quot;#{escape_html_param(uri)}&quot;
981
- alt=&quot;#{alt}&quot;#{@suffix}) </span><span class="inferred0"><a
982
- name="line710"></a>710 end </span><span class="inferred1"><a
983
- name="line711"></a>711 </span><span class="marked0"><a
984
- name="line712"></a>712 def strong(item) </span><span class="marked1"><a
985
- name="line713"></a>713 &quot;&lt;strong&gt;#{item}&lt;/strong&gt;&quot;
986
- </span><span class="inferred0"><a name="line714"></a>714 end </span><span
987
- class="inferred1"><a name="line715"></a>715 </span><span class="marked0"><a
988
- name="line716"></a>716 def em(item) </span><span class="marked1"><a
989
- name="line717"></a>717 &quot;&lt;em&gt;#{item}&lt;/em&gt;&quot; </span><span
990
- class="inferred0"><a name="line718"></a>718 end </span><span
991
- class="inferred1"><a name="line719"></a>719 </span><span class="marked0"><a
992
- name="line720"></a>720 def del(item) </span><span class="marked1"><a
993
- name="line721"></a>721 &quot;&lt;del&gt;#{item}&lt;/del&gt;&quot;
994
- </span><span class="inferred0"><a name="line722"></a>722 end </span><span
995
- class="inferred1"><a name="line723"></a>723 </span><span class="marked0"><a
996
- name="line724"></a>724 def text(str) </span><span class="marked1"><a
997
- name="line725"></a>725 escape_html(str) </span><span class="inferred0"><a
998
- name="line726"></a>726 end </span><span class="inferred1"><a
999
- name="line727"></a>727 </span><span class="marked0"><a
1000
- name="line728"></a>728 def inline_plugin(src) </span><span
1001
- class="marked1"><a name="line729"></a>729 %Q(&lt;span
1002
- class=&quot;plugin&quot;&gt;{{#{src}}}&lt;/span&gt;) </span><span
1003
- class="inferred0"><a name="line730"></a>730 end </span><span
1004
- class="inferred1"><a name="line731"></a>731 </span><span
1005
- class="inferred0"><a name="line732"></a>732 # </span><span
1006
- class="inferred1"><a name="line733"></a>733 # Utilities </span><span
1007
- class="inferred0"><a name="line734"></a>734 # </span><span
1008
- class="inferred1"><a name="line735"></a>735 </span><span class="marked0"><a
1009
- name="line736"></a>736 def escape_html_param(str) </span><span
1010
- class="marked1"><a name="line737"></a>737 escape_quote(escape_html(str))
1011
- </span><span class="inferred0"><a name="line738"></a>738 end </span><span
1012
- class="inferred1"><a name="line739"></a>739 </span><span class="marked0"><a
1013
- name="line740"></a>740 def escape_html(text) </span><span class="marked1"><a
1014
- name="line741"></a>741 text.gsub(/&amp;/,
1015
- &quot;&amp;amp;&quot;).gsub(/&lt;/, &quot;&amp;lt;&quot;).gsub(/&gt;/,
1016
- &quot;&amp;gt;&quot;) </span><span class="inferred0"><a
1017
- name="line742"></a>742 end </span><span class="inferred1"><a
1018
- name="line743"></a>743 </span><span class="marked0"><a
1019
- name="line744"></a>744 def unescape_html(text) </span><span
1020
- class="uncovered1"><a name="line745"></a>745 text.gsub(/&amp;gt;/,
1021
- &quot;&gt;&quot;).gsub(/&amp;lt;/, &quot;&lt;&quot;).gsub(/&amp;amp;/,
1022
- &quot;&amp;&quot;) </span><span class="uncovered0"><a name="line746"></a>746
1023
- end </span><span class="inferred1"><a name="line747"></a>747 </span><span
1024
- class="marked0"><a name="line748"></a>748 def escape_quote(text)
1025
- </span><span class="marked1"><a name="line749"></a>749 text.gsub(/&quot;/,
1026
- &quot;&amp;quot;&quot;) </span><span class="inferred0"><a
1027
- name="line750"></a>750 end </span><span class="inferred1"><a
1028
- name="line751"></a>751 end </span><span class="inferred0"><a
1029
- name="line752"></a>752 </span><span class="inferred1"><a
1030
- name="line753"></a>753 </span><span class="marked0"><a
1031
- name="line754"></a>754 class LineInput </span><span class="marked1"><a
1032
- name="line755"></a>755 def initialize(f) </span><span class="marked0"><a
1033
- name="line756"></a>756 @input = f </span><span class="marked1"><a
1034
- name="line757"></a>757 @buf = [] </span><span class="marked0"><a
1035
- name="line758"></a>758 @lineno = 0 </span><span class="marked1"><a
1036
- name="line759"></a>759 @eof_p = false </span><span class="inferred0"><a
1037
- name="line760"></a>760 end </span><span class="inferred1"><a
1038
- name="line761"></a>761 </span><span class="marked0"><a
1039
- name="line762"></a>762 def inspect </span><span class="uncovered1"><a
1040
- name="line763"></a>763 &quot;\#&lt;#{self.class} file=#{@input.inspect}
1041
- line=#{lineno()}&gt;&quot; </span><span class="uncovered0"><a
1042
- name="line764"></a>764 end </span><span class="inferred1"><a
1043
- name="line765"></a>765 </span><span class="marked0"><a
1044
- name="line766"></a>766 def eof? </span><span class="uncovered1"><a
1045
- name="line767"></a>767 @eof_p </span><span class="uncovered0"><a
1046
- name="line768"></a>768 end </span><span class="inferred1"><a
1047
- name="line769"></a>769 </span><span class="marked0"><a
1048
- name="line770"></a>770 def lineno </span><span class="uncovered1"><a
1049
- name="line771"></a>771 @lineno </span><span class="uncovered0"><a
1050
- name="line772"></a>772 end </span><span class="inferred1"><a
1051
- name="line773"></a>773 </span><span class="marked0"><a
1052
- name="line774"></a>774 def gets </span><span class="marked1"><a
1053
- name="line775"></a>775 unless @buf.empty? </span><span class="marked0"><a
1054
- name="line776"></a>776 @lineno += 1 </span><span class="marked1"><a
1055
- name="line777"></a>777 return @buf.pop </span><span class="inferred0"><a
1056
- name="line778"></a>778 end </span><span class="marked1"><a
1057
- name="line779"></a>779 return nil if @eof_p # to avoid ARGF blocking.
1058
- </span><span class="marked0"><a name="line780"></a>780 line = @input.gets
1059
- </span><span class="marked1"><a name="line781"></a>781 line =
1060
- line.sub(/\r\n/, &quot;\n&quot;) if line </span><span class="marked0"><a
1061
- name="line782"></a>782 @eof_p = line.nil? </span><span class="marked1"><a
1062
- name="line783"></a>783 @lineno += 1 </span><span class="marked0"><a
1063
- name="line784"></a>784 line </span><span class="inferred1"><a
1064
- name="line785"></a>785 end </span><span class="inferred0"><a
1065
- name="line786"></a>786 </span><span class="marked1"><a
1066
- name="line787"></a>787 def ungets(line) </span><span class="marked0"><a
1067
- name="line788"></a>788 return unless line </span><span class="marked1"><a
1068
- name="line789"></a>789 @lineno -= 1 </span><span class="marked0"><a
1069
- name="line790"></a>790 @buf.push line </span><span class="marked1"><a
1070
- name="line791"></a>791 line </span><span class="inferred0"><a
1071
- name="line792"></a>792 end </span><span class="inferred1"><a
1072
- name="line793"></a>793 </span><span class="marked0"><a
1073
- name="line794"></a>794 def peek </span><span class="marked1"><a
1074
- name="line795"></a>795 line = gets() </span><span class="marked0"><a
1075
- name="line796"></a>796 ungets line if line </span><span class="marked1"><a
1076
- name="line797"></a>797 line </span><span class="inferred0"><a
1077
- name="line798"></a>798 end </span><span class="inferred1"><a
1078
- name="line799"></a>799 </span><span class="marked0"><a
1079
- name="line800"></a>800 def next? </span><span class="uncovered1"><a
1080
- name="line801"></a>801 peek() ? true : false </span><span
1081
- class="uncovered0"><a name="line802"></a>802 end </span><span
1082
- class="inferred1"><a name="line803"></a>803 </span><span class="marked0"><a
1083
- name="line804"></a>804 def skip_blank_lines </span><span
1084
- class="uncovered1"><a name="line805"></a>805 n = 0 </span><span
1085
- class="uncovered0"><a name="line806"></a>806 while line = gets()
1086
- </span><span class="uncovered1"><a name="line807"></a>807 unless
1087
- line.strip.empty? </span><span class="uncovered0"><a name="line808"></a>808
1088
- ungets line </span><span class="uncovered1"><a name="line809"></a>809 return
1089
- n </span><span class="uncovered0"><a name="line810"></a>810 end </span><span
1090
- class="uncovered1"><a name="line811"></a>811 n += 1 </span><span
1091
- class="uncovered0"><a name="line812"></a>812 end </span><span
1092
- class="uncovered1"><a name="line813"></a>813 n </span><span
1093
- class="uncovered0"><a name="line814"></a>814 end </span><span
1094
- class="inferred1"><a name="line815"></a>815 </span><span class="marked0"><a
1095
- name="line816"></a>816 def gets_if(re) </span><span class="uncovered1"><a
1096
- name="line817"></a>817 line = gets() </span><span class="uncovered0"><a
1097
- name="line818"></a>818 if not line or not (re =~ line) </span><span
1098
- class="uncovered1"><a name="line819"></a>819 ungets line </span><span
1099
- class="uncovered0"><a name="line820"></a>820 return nil </span><span
1100
- class="uncovered1"><a name="line821"></a>821 end </span><span
1101
- class="uncovered0"><a name="line822"></a>822 line </span><span
1102
- class="uncovered1"><a name="line823"></a>823 end </span><span
1103
- class="inferred0"><a name="line824"></a>824 </span><span class="marked1"><a
1104
- name="line825"></a>825 def gets_unless(re) </span><span
1105
- class="uncovered0"><a name="line826"></a>826 line = gets() </span><span
1106
- class="uncovered1"><a name="line827"></a>827 if not line or re =~ line
1107
- </span><span class="uncovered0"><a name="line828"></a>828 ungets line
1108
- </span><span class="uncovered1"><a name="line829"></a>829 return nil
1109
- </span><span class="uncovered0"><a name="line830"></a>830 end </span><span
1110
- class="uncovered1"><a name="line831"></a>831 line </span><span
1111
- class="uncovered0"><a name="line832"></a>832 end </span><span
1112
- class="inferred1"><a name="line833"></a>833 </span><span class="marked0"><a
1113
- name="line834"></a>834 def each </span><span class="uncovered1"><a
1114
- name="line835"></a>835 while line = gets() </span><span
1115
- class="uncovered0"><a name="line836"></a>836 yield line </span><span
1116
- class="uncovered1"><a name="line837"></a>837 end </span><span
1117
- class="uncovered0"><a name="line838"></a>838 end </span><span
1118
- class="inferred1"><a name="line839"></a>839 </span><span class="marked0"><a
1119
- name="line840"></a>840 def while_match(re) </span><span class="marked1"><a
1120
- name="line841"></a>841 while line = gets() </span><span class="marked0"><a
1121
- name="line842"></a>842 unless re =~ line </span><span class="marked1"><a
1122
- name="line843"></a>843 ungets line </span><span class="marked0"><a
1123
- name="line844"></a>844 return </span><span class="inferred1"><a
1124
- name="line845"></a>845 end </span><span class="marked0"><a
1125
- name="line846"></a>846 yield line </span><span class="inferred1"><a
1126
- name="line847"></a>847 end </span><span class="marked0"><a
1127
- name="line848"></a>848 nil </span><span class="inferred1"><a
1128
- name="line849"></a>849 end </span><span class="inferred0"><a
1129
- name="line850"></a>850 </span><span class="marked1"><a
1130
- name="line851"></a>851 def getlines_while(re) </span><span
1131
- class="marked0"><a name="line852"></a>852 buf = [] </span><span
1132
- class="marked1"><a name="line853"></a>853 while_match(re) do |line|
1133
- </span><span class="marked0"><a name="line854"></a>854 buf.push line
1134
- </span><span class="inferred1"><a name="line855"></a>855 end </span><span
1135
- class="marked0"><a name="line856"></a>856 buf </span><span
1136
- class="inferred1"><a name="line857"></a>857 end </span><span
1137
- class="inferred0"><a name="line858"></a>858 </span><span class="marked1"><a
1138
- name="line859"></a>859 alias span getlines_while # from Haskell </span><span
1139
- class="inferred0"><a name="line860"></a>860 </span><span class="marked1"><a
1140
- name="line861"></a>861 def until_match(re) </span><span class="marked0"><a
1141
- name="line862"></a>862 while line = gets() </span><span class="marked1"><a
1142
- name="line863"></a>863 if re =~ line </span><span class="marked0"><a
1143
- name="line864"></a>864 ungets line </span><span class="marked1"><a
1144
- name="line865"></a>865 return </span><span class="inferred0"><a
1145
- name="line866"></a>866 end </span><span class="marked1"><a
1146
- name="line867"></a>867 yield line </span><span class="inferred0"><a
1147
- name="line868"></a>868 end </span><span class="marked1"><a
1148
- name="line869"></a>869 nil </span><span class="inferred0"><a
1149
- name="line870"></a>870 end </span><span class="inferred1"><a
1150
- name="line871"></a>871 </span><span class="marked0"><a
1151
- name="line872"></a>872 def getlines_until(re) </span><span
1152
- class="marked1"><a name="line873"></a>873 buf = [] </span><span
1153
- class="marked0"><a name="line874"></a>874 until_match(re) do |line|
1154
- </span><span class="marked1"><a name="line875"></a>875 buf.push line
1155
- </span><span class="inferred0"><a name="line876"></a>876 end </span><span
1156
- class="marked1"><a name="line877"></a>877 buf </span><span
1157
- class="inferred0"><a name="line878"></a>878 end </span><span
1158
- class="inferred1"><a name="line879"></a>879 </span><span class="marked0"><a
1159
- name="line880"></a>880 alias break getlines_until # from Haskell
1160
- </span><span class="inferred1"><a name="line881"></a>881 </span><span
1161
- class="marked0"><a name="line882"></a>882 def until_terminator(re)
1162
- </span><span class="uncovered1"><a name="line883"></a>883 while line =
1163
- gets() </span><span class="uncovered0"><a name="line884"></a>884 return if
1164
- re =~ line # discard terminal line </span><span class="uncovered1"><a
1165
- name="line885"></a>885 yield line </span><span class="uncovered0"><a
1166
- name="line886"></a>886 end </span><span class="uncovered1"><a
1167
- name="line887"></a>887 nil </span><span class="uncovered0"><a
1168
- name="line888"></a>888 end </span><span class="inferred1"><a
1169
- name="line889"></a>889 </span><span class="marked0"><a
1170
- name="line890"></a>890 def getblock(term_re) </span><span
1171
- class="uncovered1"><a name="line891"></a>891 buf = [] </span><span
1172
- class="uncovered0"><a name="line892"></a>892 until_terminator(term_re) do
1173
- |line| </span><span class="uncovered1"><a name="line893"></a>893 buf.push
1174
- line </span><span class="uncovered0"><a name="line894"></a>894 end
1175
- </span><span class="uncovered1"><a name="line895"></a>895 buf </span><span
1176
- class="uncovered0"><a name="line896"></a>896 end </span><span
1177
- class="uncovered1"><a name="line897"></a>897 end </span><span
1178
- class="uncovered0"><a name="line898"></a>898 end </span><span
1179
- class="inferred1"><a name="line899"></a>899 </span><span class="marked0"><a
1180
- name="line900"></a>900 if __FILE__ == $0 </span><span class="uncovered1"><a
1181
- name="line901"></a>901 puts HikiDoc.to_html(ARGF.read(nil)) </span><span
1182
- class="uncovered0"><a name="line902"></a>902 end </span></pre>
1183
- <hr />
1184
- <p> Generated using the <a href='http://eigenclass.org/hiki.rb?rcov'> rcov
1185
- code coverage analysis tool for Ruby </a> version 0.8.1.2. </p>
1186
- <p>
1187
- <a href='http://validator.w3.org/check/referer'>
1188
- <img src='http://www.w3.org/Icons/valid-xhtml10' height='31' alt='Valid XHTML 1.0!' width='88' />
1189
- </a>
1190
- <a href='http://jigsaw.w3.org/css-validator/check/referer'>
1191
- <img src='http://jigsaw.w3.org/css-validator/images/vcss' alt='Valid CSS!' style='border:0;width:88px;height:31px' />
1192
- </a>
1193
- </p>
1194
- </body>
1195
- </html>