qipowl 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.document +11 -0
  3. data/.gitignore +17 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +3 -0
  6. data/.yardopts +3 -0
  7. data/Gemfile +17 -0
  8. data/LICENSE +20 -0
  9. data/README.md +345 -0
  10. data/Rakefile +21 -0
  11. data/bin/bowler +44 -0
  12. data/config/bowlers/cmd.yaml +3 -0
  13. data/config/bowlers/html.yaml +128 -0
  14. data/config/bowlers/html_supplemental.yaml +3 -0
  15. data/config/bowlers/markdown2html.yaml +23 -0
  16. data/extras/demo/main.rb +34 -0
  17. data/extras/demo/public/apple-touch-icon-114x114-precomposed.png +0 -0
  18. data/extras/demo/public/apple-touch-icon-144x144-precomposed.png +0 -0
  19. data/extras/demo/public/apple-touch-icon-57x57-precomposed.png +0 -0
  20. data/extras/demo/public/apple-touch-icon-72x72-precomposed.png +0 -0
  21. data/extras/demo/public/apple-touch-icon-precomposed.png +0 -0
  22. data/extras/demo/public/apple-touch-icon.png +0 -0
  23. data/extras/demo/public/css/bootstrap-theme.css +384 -0
  24. data/extras/demo/public/css/bootstrap-theme.min.css +1 -0
  25. data/extras/demo/public/css/bootstrap.css +6805 -0
  26. data/extras/demo/public/css/bootstrap.min.css +9 -0
  27. data/extras/demo/public/css/main.css +22 -0
  28. data/extras/demo/public/favicon.ico +0 -0
  29. data/extras/demo/public/fonts/glyphicons-halflings-regular.eot +0 -0
  30. data/extras/demo/public/fonts/glyphicons-halflings-regular.svg +228 -0
  31. data/extras/demo/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  32. data/extras/demo/public/fonts/glyphicons-halflings-regular.woff +0 -0
  33. data/extras/demo/public/html.html +262 -0
  34. data/extras/demo/public/index.html +110 -0
  35. data/extras/demo/public/js/main.js +1 -0
  36. data/extras/demo/public/js/vendor/bootstrap.js +1999 -0
  37. data/extras/demo/public/js/vendor/bootstrap.min.js +6 -0
  38. data/extras/demo/public/js/vendor/jquery-1.10.1.min.js +6 -0
  39. data/extras/demo/public/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js +11 -0
  40. data/extras/drafts/parsing.md +137 -0
  41. data/extras/support/typo +66 -0
  42. data/features/bowler.feature +8 -0
  43. data/features/html.feature +229 -0
  44. data/features/step_definitions/bowler_steps.rb +39 -0
  45. data/features/step_definitions/html_steps.rb +11 -0
  46. data/features/support/env.rb +7 -0
  47. data/images/owl-old.png +0 -0
  48. data/images/owl-old.xcf +0 -0
  49. data/images/owl.png +0 -0
  50. data/images/owl.xcf +0 -0
  51. data/lib/qipowl/bowlers/cmd.rb +26 -0
  52. data/lib/qipowl/bowlers/html.rb +409 -0
  53. data/lib/qipowl/bowlers/htmldoc.rb +268 -0
  54. data/lib/qipowl/bowlers/yaml.rb +63 -0
  55. data/lib/qipowl/core/bowler.rb +251 -0
  56. data/lib/qipowl/core/mapper.rb +92 -0
  57. data/lib/qipowl/core/monkeypatches.rb +168 -0
  58. data/lib/qipowl/core/ruler.rb +106 -0
  59. data/lib/qipowl/utils/hash_recursive_merge.rb +72 -0
  60. data/lib/qipowl/utils/logging.rb +14 -0
  61. data/lib/qipowl/version.rb +3 -0
  62. data/lib/qipowl.rb +50 -0
  63. data/qipowl.gemspec +42 -0
  64. data/qipowl.komodoproject +4 -0
  65. data/spec/bowler_spec.rb +11 -0
  66. data/spec/spec_helper.rb +15 -0
  67. data/spec/string_spec.rb +32 -0
  68. data/spec/yaml_test.yaml +10 -0
  69. metadata +254 -0
@@ -0,0 +1,229 @@
1
+ # encoding: utf-8
2
+
3
+ Feature: All the possibilities of HTML parser
4
+
5
+ Scenario Outline: Inplace tags
6
+ Given we use "html" bowler
7
+ When the input string is <input>
8
+ And the execute method is called on bowler
9
+ Then the result should equal to <output>
10
+
11
+ Examples:
12
+ | input | output |
13
+ | "here ≈italic≈ goes" | "<p>here <em>italic</em> goes</p>" |
14
+ | "here ≡bold≡ goes" | "<p>here <strong>bold</strong> goes</p>" |
15
+ | "here ↓small↓ goes" | "<p>here <small>small</small> goes</p>" |
16
+ | "here ↑sup↑ goes" | "<p>here <sup>sup</sup> goes</p>" |
17
+ | "here abbr†desc ription† goes" | "<p>here <abbr title='desc ription'>abbr</abbr> goes</p>" |
18
+ | "here ✁del✁ goes" | "<p>here <del>del</del> goes</p>" |
19
+ | "here ✿_span_nobrnobr✿_span_nobr goes" | "<p>here <nobr>nobr</nobr> goes</p>" |
20
+ | "here ÷deleted÷ goes" | "<p>here <del>deleted</del> goes</p>" |
21
+ | "here λcodeλ goes" | "<p>here <code>code</code> goes</p>" |
22
+ | "here ≡λbold codeλ≡ goes" | "<p>here <strong><code>bold code</code></strong> goes</p>" |
23
+ | "here λ≡code bold≡λ goes" | "<p>here <code><strong>code bold</strong></code> goes</p>" |
24
+ | "Hello, ≈World≈!" | "<p>Hello, <em>World</em>!</p>" |
25
+
26
+
27
+ Scenario Outline: Alone tags
28
+ Given we use "html" bowler
29
+ When the input string is <input>
30
+ And the execute method is called on bowler
31
+ Then the result should equal to <output>
32
+
33
+ Examples:
34
+ | input | output |
35
+ | "A ⏎ B" | "<p>A <br/> B</p>" |
36
+ | "A —— B" | "<p>A</p> <hr/> <p>B</p>" |
37
+
38
+ Scenario: Block tag Λ
39
+ Given we use "html" bowler
40
+ When the input string is "Λ ruby @mapping[:block] = ≡bold≡ Λ"
41
+ And the execute method is called on bowler
42
+ Then the result should equal to
43
+ """
44
+
45
+ <pre class='ruby'>@mapping[:block] = ≡bold≡ </pre>
46
+ """
47
+
48
+ Scenario: Block tag ✍
49
+ Given we use "html" bowler
50
+ When the input string is
51
+ """
52
+
53
+ ruby @mapping[:block] = ≡bold≡
54
+
55
+ """
56
+ And the execute method is called on bowler
57
+ Then the result should equal to
58
+ """
59
+
60
+
61
+ """
62
+
63
+ Scenario Outline: Video tags
64
+ Given we use "html" bowler
65
+ When the input string is <input>
66
+ And the execute method is called on bowler
67
+ Then the result should match "<iframe class='youtube' width='560' height='315' src='http://www.youtube.com/embed/gokeLEC8dZc'"
68
+
69
+ Examples:
70
+ | input |
71
+ | "http://www.youtube.com/watch?v=gokeLEC8dZc" |
72
+ | "http://youtu.be/gokeLEC8dZc" |
73
+ | "YouTube http://youtu.be/gokeLEC8dZc inline test." |
74
+
75
+ Scenario Outline: Magnet tags
76
+ Given we use "html" bowler
77
+ When the input string is <input>
78
+ And the execute method is called on bowler
79
+ Then the result should equal to <output>
80
+
81
+ Examples:
82
+ | input | output |
83
+ | "☎ +1(987)5554321" | "<p><span class='phone'>☎ +1(987)5554321</span></p>" |
84
+ | "✉ info_twitter.com" | "<p><span class='email'>✉ info_twitter.com</span></p>" |
85
+ | "✎ mudasobwa" | "<p><span style='white-space: nowrap;'><a href='http://mudasobwa.livejournal.com/profile?mode=full'><img src='http://l-stat.livejournal.com/img/userinfo.gif' alt='[info]' style='border: 0pt none ; vertical-align: bottom; padding-right: 1px;' height='17' width='17'></a><a href='http://mudasobwa.livejournal.com/?style=mine'><b>mudasobwa</b></a></span></p>" |
86
+ | "☇ id001" | "<p><a name='id001'>​</a></p>" |
87
+
88
+ Scenario Outline: Custom tags
89
+ Given we use "html" bowler
90
+ When the input string is <input>
91
+ And the execute method is called on bowler
92
+ Then the result should equal to <output>
93
+
94
+ Examples:
95
+ | input | output |
96
+ | "‒ Wikipedia, http://wikipedia.org" | "<p><br/> <small><a href='http://wikipedia.org'>Wikipedia</a></small></p>" |
97
+ | "Wikipedia¹http://wikipedia.org" | "<p><a href='http://wikipedia.org'>Wikipedia</a></p>" |
98
+ | "Wikipedia†Best knowledge base†" | "<p><abbr title='Best knowledge base'>Wikipedia</abbr></p>" |
99
+ | "Inplace picture¹http://mudasobwa.ru/images/am.jpg goes here." | "<p><img class='inplace' alt='Inplace picture' src='http://mudasobwa.ru/images/am.jpg'/> goes here.</p>" |
100
+ | "http://mudasobwa.ru/images/am.jpg Standalone picture" | " ␍ <figure> ␍ <img src='http://mudasobwa.ru/images/am.jpg'/> ␍ <figcaption> ␍ <p> ␍ Standalone picture ␍ </p> ␍ </figcaption> ␍ </figure> ␍ " |
101
+
102
+ Scenario Outline: Markdown atavisms ⇒ links
103
+ Given we use "html" bowler
104
+ When the input string is <input>
105
+ And the execute method is called on bowler
106
+ Then the result should equal to <output>
107
+
108
+ Examples:
109
+ | input | output |
110
+ | "Here ![Image](http://mudasobwa.ru/images/am.jpg) goes" | "<p>Here <img class='inplace' alt='Image' src='http://mudasobwa.ru/images/am.jpg'/> goes</p>" |
111
+ | "![Figure](http://mudasobwa.ru/images/am.jpg)" | " ␍ <figure> ␍ <img src='http://mudasobwa.ru/images/am.jpg'/> ␍ <figcaption> ␍ <p> ␍ Figure ␍ </p> ␍ </figcaption> ␍ </figure> ␍ " |
112
+ | "Here [Link](http://wikipedia.org/) goes" | "<p>Here <a href='http://wikipedia.org/'>Link</a> goes</p>" |
113
+ | "Here *italic* goes" | "<p>Here <em>italic</em> goes</p>" |
114
+ | "Here inplace*it*alic goes" | "<p>Here inplace<em>it</em>alic goes</p>" |
115
+ | "Here non-italic 5*3 math goes" | "<p>Here non-italic 5*3 math goes</p>" |
116
+ | "Here **bold** goes" | "<p>Here <strong>bold</strong> goes</p>" |
117
+ | "Here ~~del~~ goes" | "<p>Here <del>del</del> goes</p>" |
118
+ | "Here `code` goes" | "<p>Here <code>code</code> goes</p>" |
119
+
120
+
121
+ Scenario Outline: Regular tags
122
+ Given we use "html" bowler
123
+ When the input string is <input>
124
+ And the execute method is called on bowler
125
+ Then the result should equal to <output>
126
+
127
+ Examples:
128
+ | input | output |
129
+ | "List: • li1 • li2" | "<p>List:</p> <ul class='fancy'><li>li1 </li> <li>li2</li></ul>" |
130
+ | "List: • li1  • nested 1  • nested 2 • li2" | "<p>List:</p> <ul class='fancy'><li>li1 </li> <ul class='fancy'><li>nested 1 </li> <li>nested 2 </li></ul> <li>li2</li></ul>" |
131
+ | "Data: ▶ dt — dd ▶ dt — dd" | "<p>Data:</p> <dl> ␍ <dt>dt</dt> ␍ <dd>dd </dd> ␍ ␍ <dt>dt</dt> ␍ <dd>dd</dd> ␍ </dl>" |
132
+ | "§1 Header" | "<h1>Header</h1>" |
133
+ | "〉 Blockquote" | "<blockquote><p class='blockquote'>Blockquote</p></blockquote>" |
134
+
135
+ Scenario: Address tag
136
+ Given we use "html" bowler
137
+ When the input string is "℁ ≡Twitter≡ ⏎ ☎ +1(987)5554321 ⏎ ✉ info@twitter.com"
138
+ And the execute method is called on bowler
139
+ Then the result should equal to "<address><strong>Twitter</strong> <br/> <span class='phone'>☎ +1(987)5554321</span> <br/> <span class='email'>✉ info@twitter.com</span></address>"
140
+
141
+ Scenario: Entity addition
142
+ Given we use "html" bowler
143
+ When the input string is "List: × li1 line item × li2"
144
+ And rule "×" is added to mapping as "li" in "regular" section with "ol" enclosure
145
+ And the execute method is called on bowler
146
+ Then the result should equal to "<p>List:</p> <ol><li>li1 line item </li> <li>li2</li></ol>"
147
+
148
+ Scenario: Entity removal
149
+ Given we use "html" bowler
150
+ When the input string is "List: ◦ li1 ◦ li2"
151
+ And rule "◦" is removed from mapping
152
+ And the execute method is called on bowler
153
+ Then the result should equal to "<p>List: ◦ li1 ◦ li2</p>"
154
+
155
+ Scenario: Standalone images
156
+ Given we use "html" bowler
157
+ When the input string is
158
+ """
159
+
160
+ Preamble: given
161
+
162
+
163
+ 〉 http://mudasobwa.ru/i/self.jpg With caption
164
+ ‒ Wiki, http://wikipedia.ru
165
+
166
+ Nice?
167
+ """
168
+ And the execute method is called on bowler
169
+ Then the result should equal to
170
+ """
171
+
172
+
173
+ <blockquote><p class='blockquote'>http://mudasobwa.ru/i/self.jpg With caption
174
+ <br/> <small><a href='http://wikipedia.ru'>Wiki</a></small> </p></blockquote>
175
+ <p>Nice?</p>
176
+ """
177
+
178
+ Scenario: Comments
179
+ Given we use "html" bowler
180
+ When the input string is
181
+ """
182
+ ---
183
+ This is a comment text
184
+ ---
185
+
186
+ Nice?
187
+ """
188
+ And the execute method is called on bowler
189
+ Then the result should equal to
190
+ """
191
+
192
+
193
+ <p>Nice?</p>
194
+ """
195
+
196
+ Scenario: Blockquotes
197
+ Given we use "html" bowler
198
+ When the input string is
199
+ """
200
+ §2 Blockquotes
201
+
202
+ 〉 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere
203
+ erat a ante.
204
+    〉 Nested blockquote first line
205
+  〉 Nested blockquote second line
206
+ 〉 Lorem ipsum para text 2.
207
+
208
+ Some para text.
209
+
210
+ 〉 Intro 1.
211
+  • list item ≡with bold≡ 1
212
+  • list item ≈emphasized≈
213
+   • nested list item 1
214
+   • nested list item 2
215
+
216
+ 〉 Blockquote standalone.
217
+
218
+ 〉 Intro 2.
219
+  • list item 2.1
220
+  • list item 2.2
221
+ 〉 Continuing intro 2.
222
+
223
+ Blockquote standalone.
224
+ """
225
+ And the execute method is called on bowler
226
+ Then the result should match "<blockquote><blockquote><blockquote><p class='blockquote'>Nested blockquote first"
227
+ And the result should match "</li> <ul class='fancy'><li>nested list item 1"
228
+ And the result should match "<p>Blockquote standalone.</p>"
229
+
@@ -0,0 +1,39 @@
1
+ Given(/^we use "(.*?)" bowler$/) do |f|
2
+ # @f = "config/bowlers/#{f}.yaml"
3
+ @bowler = Qipowl::Ruler.new_bowler f
4
+ end
5
+
6
+ When(/^the input string is "(.*?)"$/) do |input|
7
+ @input = input
8
+ end
9
+
10
+ When(/^the input string is$/) do |input|
11
+ @input = input
12
+ end
13
+
14
+ When(/^the execute method is called on bowler$/) do
15
+ @result = @bowler.execute @input
16
+ end
17
+
18
+ When(/^rule "(.*?)" is added to mapping as "(.*?)" in "(.*?)" section with "(.*?)" enclosure$/) do |key, val, section, encl|
19
+ @bowler.add_entity section, key, val, encl
20
+ end
21
+
22
+ When(/^rule "(.*?)" is removed from mapping$/) do |key|
23
+ @bowler.remove_entity key
24
+ end
25
+
26
+ Then(/^bowler has all the method aliases$/) do
27
+ puts @bowler.class.instance_methods(false)
28
+ puts '='*60
29
+ @bowler.class.constants(false).each { |c|
30
+ puts "Constant: #{c}"
31
+ puts @bowler.class.const_get(c)
32
+ puts '-'*60
33
+ }
34
+ end
35
+
36
+ Then(/^the output is "(.*?)"$/) do |result|
37
+ expect(@result).to eq(result)
38
+ end
39
+
@@ -0,0 +1,11 @@
1
+ Then(/^the result should equal to "(.*?)"$/) do |result|
2
+ expect(@result.carriage).to eq(result)
3
+ end
4
+
5
+ Then(/^the result should equal to$/) do |result|
6
+ expect(@result).to eq(result)
7
+ end
8
+
9
+ Then(/^the result should match "(.*?)"$/) do |result|
10
+ expect(@result).to match(result)
11
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ require 'bundler/setup'
4
+ require 'yaml'
5
+ require 'qipowl'
6
+ require 'rspec/expectations'
7
+
Binary file
Binary file
data/images/owl.png ADDED
Binary file
data/images/owl.xcf ADDED
Binary file
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../core/bowler'
4
+
5
+ module Qipowl::Bowlers
6
+
7
+ # Markup processor for Html output.
8
+ #
9
+ # This class produces HTML from markup as Markdown does.
10
+ class Cmd < Bowler
11
+ def initialize file = nil
12
+ super
13
+ merge_rules file if file
14
+ end
15
+
16
+ def список_файлов *args
17
+ puts `#{@mapping.linewide(__callee__)} #{args.join(SEPARATOR).unbowl}`
18
+ end
19
+
20
+ def self.execute str
21
+ Cmd.new.parse_and_roll str
22
+ end
23
+
24
+ end
25
+
26
+ end