forkforge 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,84 @@
1
+ # encoding: utf-8
2
+
3
+ require 'forkforge/internal/code_point'
4
+ require 'forkforge/internal/unicode_data'
5
+ require 'forkforge/internal/special_casing'
6
+
7
+ module Forkforge
8
+ class UnicodeException < Exception
9
+ end
10
+
11
+ module Unicode
12
+ [:uppercase, :lowercase, :titlecase].each { |method|
13
+ class_eval %Q{
14
+ def #{method}(s, lang = nil, context = nil)
15
+ s.each_codepoint.map { |cp|
16
+ pretendent = SpecialCasing::#{method}(cp, lang, context)
17
+ (pretendent.codepoints.count == 1 && pretendent.codepoints.first == cp) ? \
18
+ UnicodeData::to_char(cp, :#{method}_mapping) : pretendent
19
+ }.join
20
+ end
21
+ }
22
+ }
23
+
24
+ def camel_to_underscore s, constant = false
25
+ result = s.gsub(/(?<!\A)./) { |m|
26
+ Letter::is_uppercase(m) ? "_#{m}" : m
27
+ }
28
+ constant ? uppercase(result) : lowercase(result)
29
+ end
30
+
31
+ def underscore_to_camel s
32
+ (lowercase s).gsub(/((?<=\A)|_)(\w)/) {
33
+ titlecase $~[2]
34
+ }
35
+ end
36
+
37
+ def lookup pattern
38
+ Forkforge::UnicodeData::all_character_name(pattern).map { |k, v|
39
+ Forkforge::UnicodeData::to_char k
40
+ }
41
+ end
42
+
43
+ # As an opposite to decomposition: composes symbols using given string and tag (when possible).
44
+ # This function is not intended to be used directly. Normally one uses one of aliases:
45
+ # - circle
46
+ # - super
47
+ # - sub
48
+ # - wide
49
+ #
50
+ # NB This is not a composition as it is understood by Unicode.Org (love them.)
51
+ def compose s, tag = :font, format = :full
52
+ composed = s.codepoints.map { |cp|
53
+ (result = Forkforge::UnicodeData::compose_cp(cp, tag, format == :full)).vacant? ? \
54
+ [Forkforge::UnicodeData::to_codepoint(cp)] : result
55
+ }
56
+
57
+ raise UnicodeException, "AMBIGUITIES FOUND, FIXME FIXME FIXME" \
58
+ if format == :lazy && (composed.length != s.length)
59
+
60
+ case format
61
+ when :full then Hash[s.split('').map.with_index { |ch, idx| [[ch,idx], composed[idx]] }]
62
+ when :lazy then composed.join
63
+ when :risk then composed.map(&:first).join
64
+ else composed
65
+ end
66
+ end
67
+
68
+ [:circle, :super, :sub, :wide].each { |m|
69
+ define_method(m) { |s|
70
+ compose decompose(s), m.to_sym, :lazy
71
+ }
72
+ }
73
+
74
+ # Decomposes symbols to their combined representation, e.g. ASCII c-cedilla to 2 symbols
75
+ def decompose s, tags = []
76
+ s.codepoints.map { |cp|
77
+ Forkforge::UnicodeData::decompose_cp cp, tags
78
+ }.flatten.map { |cp| cp.to_i(16) }.pack('U*')
79
+ end
80
+
81
+ extend self
82
+ end
83
+
84
+ end
@@ -0,0 +1,3 @@
1
+ module Forkforge
2
+ VERSION = '0.0.3'
3
+ end
data/lib/forkforge.rb ADDED
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require 'forkforge/version'
4
+ require 'forkforge/unicode'
5
+ require 'forkforge/category'
6
+ require 'forkforge/selector'
7
+
8
+ module Forkforge
9
+ end
data/media/ff-128.png ADDED
Binary file
data/media/ff-16.png ADDED
Binary file
data/media/ff-300.png ADDED
Binary file
data/media/ff-32.png ADDED
Binary file
data/media/ff-48.png ADDED
Binary file
data/media/ff-64.png ADDED
Binary file
data/media/ff.png ADDED
Binary file
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: forkforge
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Alexei Matyushkin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
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: pry
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: pry-rescue
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: awesome_print
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: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
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: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
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: cucumber
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
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: yard-cucumber
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: "\n Pure ruby implementation of Unicode manipulations as by Consortium.\n
140
+ \ Includes: languages-specific uppercase/lowercase, composition, decomposition
141
+ and more.\n "
142
+ email:
143
+ - am@mudasobwa.ru
144
+ executables: []
145
+ extensions: []
146
+ extra_rdoc_files: []
147
+ files:
148
+ - ".gitignore"
149
+ - ".travis.yml"
150
+ - ".yardopts"
151
+ - Gemfile
152
+ - LICENSE.txt
153
+ - README.md
154
+ - Rakefile
155
+ - config/cucumber.yml
156
+ - features/step_definitions/unicode_org_steps.rb
157
+ - features/support/env.rb
158
+ - features/unicode_org.feature
159
+ - forkforge.gemspec
160
+ - lib/forkforge.rb
161
+ - lib/forkforge/category.rb
162
+ - lib/forkforge/dsl/handler.rb
163
+ - lib/forkforge/internal/canonical_combining_classes.rb
164
+ - lib/forkforge/internal/character_decomposition_mapping.rb
165
+ - lib/forkforge/internal/code_point.rb
166
+ - lib/forkforge/internal/monkeypatches.rb
167
+ - lib/forkforge/internal/special_casing.rb
168
+ - lib/forkforge/internal/unicode_data.rb
169
+ - lib/forkforge/internal/unicode_org_file.rb
170
+ - lib/forkforge/knife/string.rb
171
+ - lib/forkforge/selector.rb
172
+ - lib/forkforge/unicode.rb
173
+ - lib/forkforge/version.rb
174
+ - media/ff-128.png
175
+ - media/ff-16.png
176
+ - media/ff-300.png
177
+ - media/ff-32.png
178
+ - media/ff-48.png
179
+ - media/ff-64.png
180
+ - media/ff.png
181
+ homepage: http://forkforge.com
182
+ licenses:
183
+ - MIT
184
+ metadata: {}
185
+ post_install_message:
186
+ rdoc_options: []
187
+ require_paths:
188
+ - lib
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ requirements: []
200
+ rubyforge_project:
201
+ rubygems_version: 2.4.3
202
+ signing_key:
203
+ specification_version: 4
204
+ summary: Unicode handling library
205
+ test_files:
206
+ - features/step_definitions/unicode_org_steps.rb
207
+ - features/support/env.rb
208
+ - features/unicode_org.feature
209
+ has_rdoc: