forkforge 0.0.3
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.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.travis.yml +4 -0
- data/.yardopts +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +67 -0
- data/Rakefile +22 -0
- data/config/cucumber.yml +5 -0
- data/features/step_definitions/unicode_org_steps.rb +226 -0
- data/features/support/env.rb +24 -0
- data/features/unicode_org.feature +500 -0
- data/forkforge.gemspec +33 -0
- data/lib/forkforge/category.rb +165 -0
- data/lib/forkforge/dsl/handler.rb +28 -0
- data/lib/forkforge/internal/canonical_combining_classes.rb +66 -0
- data/lib/forkforge/internal/character_decomposition_mapping.rb +65 -0
- data/lib/forkforge/internal/code_point.rb +109 -0
- data/lib/forkforge/internal/monkeypatches.rb +45 -0
- data/lib/forkforge/internal/special_casing.rb +69 -0
- data/lib/forkforge/internal/unicode_data.rb +91 -0
- data/lib/forkforge/internal/unicode_org_file.rb +65 -0
- data/lib/forkforge/knife/string.rb +35 -0
- data/lib/forkforge/selector.rb +49 -0
- data/lib/forkforge/unicode.rb +84 -0
- data/lib/forkforge/version.rb +3 -0
- data/lib/forkforge.rb +9 -0
- data/media/ff-128.png +0 -0
- data/media/ff-16.png +0 -0
- data/media/ff-300.png +0 -0
- data/media/ff-32.png +0 -0
- data/media/ff-48.png +0 -0
- data/media/ff-64.png +0 -0
- data/media/ff.png +0 -0
- metadata +209 -0
@@ -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
|
data/lib/forkforge.rb
ADDED
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:
|