qipowl 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,72 @@
1
+ #
2
+ # = Hash Recursive Merge
3
+ #
4
+ # Merges a Ruby Hash recursively, Also known as deep merge.
5
+ # Recursive version of Hash#merge and Hash#merge!.
6
+ #
7
+ # Category:: Ruby
8
+ # Package:: Hash
9
+ # Author:: Simone Carletti <weppos@weppos.net>
10
+ # Copyright:: 2007-2008 The Authors
11
+ # License:: MIT License
12
+ # Link:: http://www.simonecarletti.com/
13
+ # Source:: http://gist.github.com/gists/6391/
14
+ #
15
+ module HashRecursiveMerge
16
+ #
17
+ # Recursive version of Hash#merge!
18
+ #
19
+ # Adds the contents of +other_hash+ to +hsh+,
20
+ # merging entries in +hsh+ with duplicate keys with those from +other_hash+.
21
+ #
22
+ # Compared with Hash#merge!, this method supports nested hashes.
23
+ # When both +hsh+ and +other_hash+ contains an entry with the same key,
24
+ # it merges and returns the values from both arrays.
25
+ #
26
+ # h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
27
+ # h2 = {"b" => 254, "c" => 300, "c" => {"c1" => 16, "c3" => 94}}
28
+ # h1.rmerge!(h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
29
+ #
30
+ # Simply using Hash#merge! would return
31
+ #
32
+ # h1.merge!(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
33
+ #
34
+ def rmerge!(other_hash)
35
+ merge!(other_hash) do |key, oldval, newval|
36
+ oldval.class == self.class ? oldval.rmerge!(newval) : newval
37
+ end
38
+ end
39
+
40
+ #
41
+ # Recursive version of Hash#merge
42
+ #
43
+ # Compared with Hash#merge!, this method supports nested hashes.
44
+ # When both +hsh+ and +other_hash+ contains an entry with the same key,
45
+ # it merges and returns the values from both arrays.
46
+ #
47
+ # Compared with Hash#merge, this method provides a different approch
48
+ # for merging nasted hashes.
49
+ # If the value of a given key is an Hash and both +other_hash+ abd +hsh
50
+ # includes the same key, the value is merged instead replaced with
51
+ # +other_hash+ value.
52
+ #
53
+ # h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
54
+ # h2 = {"b" => 254, "c" => 300, "c" => {"c1" => 16, "c3" => 94}}
55
+ # h1.rmerge(h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
56
+ #
57
+ # Simply using Hash#merge would return
58
+ #
59
+ # h1.merge(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
60
+ #
61
+ def rmerge(other_hash)
62
+ r = {}
63
+ merge(other_hash) do |key, oldval, newval|
64
+ r[key] = oldval.class == self.class ? oldval.rmerge(newval) : newval
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ class Hash
71
+ include HashRecursiveMerge
72
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+
3
+ require 'logger'
4
+
5
+ module TypoLogging
6
+ def logger
7
+ TypoLogging.logger
8
+ end
9
+
10
+ # Global, memoized, lazy initialized instance of a logger
11
+ def self.logger
12
+ @logger ||= Logger.new(STDOUT)
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module Qipowl
2
+ VERSION = "0.9.0"
3
+ end
data/lib/qipowl.rb ADDED
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "qipowl/version"
4
+ require_relative "qipowl/core/mapper"
5
+ require_relative "qipowl/core/ruler"
6
+ require_relative "qipowl/core/bowler"
7
+ require_relative "qipowl/bowlers/html"
8
+ #require_relative "qipowl/bowlers/cmd"
9
+ #require_relative "qipowl/bowlers/yaml"
10
+
11
+ Encoding.default_external = Encoding::UTF_8
12
+ Encoding.default_internal = Encoding::UTF_8
13
+
14
+ module Qipowl
15
+ extend self
16
+
17
+ # Basic single-method DSL with .parameter method
18
+ # being used to define a set of available settings.
19
+ # This method takes one or more symbols, with each one being
20
+ # a name of the configuration option.
21
+ def params *names
22
+ names.each do |name|
23
+ attr_accessor name
24
+ define_method name do |*values|
25
+ value = values.first
26
+ value ? self.send("#{name}=", value) : instance_variable_get("@#{name}")
27
+ end
28
+ end
29
+ end
30
+
31
+ # A wrapper for the configuration block
32
+ def config &block
33
+ instance_eval(&block)
34
+ end
35
+
36
+ def self.tg__html
37
+ Html.new
38
+ end
39
+
40
+ def self.tg_md__html
41
+ result = tg__html
42
+ result.merge_rules "#{File.dirname(__FILE__)}/tagmaps/markdown2html.yaml"
43
+ result
44
+ end
45
+ end
46
+
47
+ Qipowl::config do
48
+ params :bowlers_dir
49
+ bowlers_dir File.expand_path(File.join(__dir__, '..', 'config', 'bowlers'))
50
+ end
data/qipowl.gemspec ADDED
@@ -0,0 +1,42 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require 'qipowl/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'qipowl'
6
+ s.version = Qipowl::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.license = 'MIT'
9
+ s.date = '2013-09-08'
10
+ s.authors = ['Alexei Matyushkin']
11
+ s.email = 'am@mudasobwa.ru'
12
+ s.homepage = 'http://github.com/mudasobwa/qipowl'
13
+ s.summary = %Q{Parser framework totally based on DSL}
14
+ s.description = %Q{Multipurpose DSL-based pure text parser.}
15
+ s.extra_rdoc_files = [
16
+ 'LICENSE',
17
+ 'README.md',
18
+ ]
19
+
20
+ s.required_rubygems_version = Gem::Requirement.new('>= 1.3.7')
21
+ s.rubygems_version = '1.3.7'
22
+ s.specification_version = 3
23
+
24
+ s.files = `git ls-files`.split("\n")
25
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
+ s.bindir = 'bin'
27
+ s.executables = ['bowler']
28
+ s.require_paths = ['lib']
29
+
30
+ s.add_development_dependency 'rspec'
31
+ s.add_development_dependency 'fuubar'
32
+ s.add_development_dependency 'yard'
33
+ s.add_development_dependency 'cucumber'
34
+ s.add_development_dependency 'yard-cucumber'
35
+
36
+ s.add_dependency 'psych'
37
+ s.add_dependency 'nokogiri'
38
+ s.add_dependency 'htmlbeautifier'
39
+ s.add_dependency 'aquarium'
40
+ s.add_dependency 'crochets'
41
+ end
42
+
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Komodo Project File - DO NOT EDIT -->
3
+ <project id="64feb15b-e19a-4c57-8eb3-2dc87139a540" kpf_version="5" name="Typogrowl.komodoproject">
4
+ </project>
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative 'spec_helper'
4
+
5
+ describe Qipowl::Bowlers::Bowler do
6
+ before(:each) do
7
+ end
8
+
9
+ describe "#execute" do
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require 'bundler/setup'
2
+
3
+ require 'qipowl'
4
+
5
+ # Requires supporting files with custom matchers and macros, etc,
6
+ # in ./support/ and its subdirectories.
7
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
8
+
9
+ RSpec.configure do |config|
10
+ # config.fail_fast = true
11
+ config.expect_with :rspec do |c|
12
+ c.syntax = :expect
13
+ end
14
+ end
15
+
@@ -0,0 +1,32 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe String do
4
+ before(:each) do
5
+ @string = 'Hello, world!'
6
+ @bowled = 'Hello, world!'
7
+ end
8
+
9
+ describe "#bowl" do
10
+ context 'string is bowled' do
11
+ it 'contains no ruby symbols' do
12
+ expect(@string.bowl).to eql @bowled
13
+ end
14
+ end
15
+
16
+ context 'bowled and unbowled string' do
17
+ it "is the same string" do
18
+ expect(@string.bowl.unbowl).to eql @string
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "#carriage" do
24
+ context 'uncarriaged and carriaged string' do
25
+ it "is the same string" do
26
+ expect(@string.uncarriage.carriage).to eql @string
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+
@@ -0,0 +1,10 @@
1
+ :includes :
2
+ - 'first'
3
+ - 'second'
4
+
5
+ :key : :value
6
+
7
+ :flush :
8
+ :⏎ : :br
9
+ :—— : :hr
10
+
metadata ADDED
@@ -0,0 +1,254 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: qipowl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Alexei Matyushkin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fuubar
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: yard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard-cucumber
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: psych
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: nokogiri
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: htmlbeautifier
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: aquarium
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: crochets
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Multipurpose DSL-based pure text parser.
154
+ email: am@mudasobwa.ru
155
+ executables:
156
+ - bowler
157
+ extensions: []
158
+ extra_rdoc_files:
159
+ - LICENSE
160
+ - README.md
161
+ files:
162
+ - .document
163
+ - .gitignore
164
+ - .rspec
165
+ - .travis.yml
166
+ - .yardopts
167
+ - Gemfile
168
+ - LICENSE
169
+ - README.md
170
+ - Rakefile
171
+ - bin/bowler
172
+ - config/bowlers/cmd.yaml
173
+ - config/bowlers/html.yaml
174
+ - config/bowlers/html_supplemental.yaml
175
+ - config/bowlers/markdown2html.yaml
176
+ - extras/demo/main.rb
177
+ - extras/demo/public/apple-touch-icon-114x114-precomposed.png
178
+ - extras/demo/public/apple-touch-icon-144x144-precomposed.png
179
+ - extras/demo/public/apple-touch-icon-57x57-precomposed.png
180
+ - extras/demo/public/apple-touch-icon-72x72-precomposed.png
181
+ - extras/demo/public/apple-touch-icon-precomposed.png
182
+ - extras/demo/public/apple-touch-icon.png
183
+ - extras/demo/public/css/bootstrap-theme.css
184
+ - extras/demo/public/css/bootstrap-theme.min.css
185
+ - extras/demo/public/css/bootstrap.css
186
+ - extras/demo/public/css/bootstrap.min.css
187
+ - extras/demo/public/css/main.css
188
+ - extras/demo/public/favicon.ico
189
+ - extras/demo/public/fonts/glyphicons-halflings-regular.eot
190
+ - extras/demo/public/fonts/glyphicons-halflings-regular.svg
191
+ - extras/demo/public/fonts/glyphicons-halflings-regular.ttf
192
+ - extras/demo/public/fonts/glyphicons-halflings-regular.woff
193
+ - extras/demo/public/html.html
194
+ - extras/demo/public/index.html
195
+ - extras/demo/public/js/main.js
196
+ - extras/demo/public/js/vendor/bootstrap.js
197
+ - extras/demo/public/js/vendor/bootstrap.min.js
198
+ - extras/demo/public/js/vendor/jquery-1.10.1.min.js
199
+ - extras/demo/public/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js
200
+ - extras/drafts/parsing.md
201
+ - extras/support/typo
202
+ - features/bowler.feature
203
+ - features/html.feature
204
+ - features/step_definitions/bowler_steps.rb
205
+ - features/step_definitions/html_steps.rb
206
+ - features/support/env.rb
207
+ - images/owl-old.png
208
+ - images/owl-old.xcf
209
+ - images/owl.png
210
+ - images/owl.xcf
211
+ - lib/qipowl.rb
212
+ - lib/qipowl/bowlers/cmd.rb
213
+ - lib/qipowl/bowlers/html.rb
214
+ - lib/qipowl/bowlers/htmldoc.rb
215
+ - lib/qipowl/bowlers/yaml.rb
216
+ - lib/qipowl/core/bowler.rb
217
+ - lib/qipowl/core/mapper.rb
218
+ - lib/qipowl/core/monkeypatches.rb
219
+ - lib/qipowl/core/ruler.rb
220
+ - lib/qipowl/utils/hash_recursive_merge.rb
221
+ - lib/qipowl/utils/logging.rb
222
+ - lib/qipowl/version.rb
223
+ - qipowl.gemspec
224
+ - qipowl.komodoproject
225
+ - spec/bowler_spec.rb
226
+ - spec/spec_helper.rb
227
+ - spec/string_spec.rb
228
+ - spec/yaml_test.yaml
229
+ homepage: http://github.com/mudasobwa/qipowl
230
+ licenses:
231
+ - MIT
232
+ metadata: {}
233
+ post_install_message:
234
+ rdoc_options: []
235
+ require_paths:
236
+ - lib
237
+ required_ruby_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ! '>='
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - ! '>='
245
+ - !ruby/object:Gem::Version
246
+ version: 1.3.7
247
+ requirements: []
248
+ rubyforge_project:
249
+ rubygems_version: 2.0.2
250
+ signing_key:
251
+ specification_version: 3
252
+ summary: Parser framework totally based on DSL
253
+ test_files: []
254
+ has_rdoc: