text2svg 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/lib/text2svg/cli.rb +23 -4
- data/lib/text2svg/cli_test.rb +38 -9
- data/lib/text2svg/typography.rb +23 -6
- data/lib/text2svg/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94254b4b10b68d5e825b24f2a4144c69da09e2c5
|
4
|
+
data.tar.gz: 9861a858f2d279f0f1c10a66a74b2a0b33bb5843
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b45729144575ef72fb38d6a1af983e0e2154f99ca0b98a46679946fe25ec936424d5c518165e2dc8ee16568bfc4d4e623eb486c83c4b2cfdeec122f534305c5b
|
7
|
+
data.tar.gz: adadaa9dd72fdd0dc23187ebd9a0086e68ab37ec19495a97988322d0c4752ca83e593202104789d35e8010c70868704f93a607125e05a86d0de13c2cec85c41b
|
data/README.md
CHANGED
@@ -26,6 +26,12 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
$ gem install text2svg
|
28
28
|
|
29
|
+
## Require
|
30
|
+
|
31
|
+
- libfreetype
|
32
|
+
|
33
|
+
see also http://www.freetype.org/
|
34
|
+
|
29
35
|
## Development
|
30
36
|
|
31
37
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/text2svg/cli.rb
CHANGED
@@ -2,17 +2,36 @@ require 'text2svg/typography'
|
|
2
2
|
|
3
3
|
module Text2svg
|
4
4
|
module CLI
|
5
|
-
Option = Struct.new(:font)
|
5
|
+
Option = Struct.new(:font, :text_align, :fill, :encoding)
|
6
6
|
|
7
7
|
def start
|
8
|
-
o = CLI::Option.new
|
8
|
+
o = CLI::Option.new(nil, :left, :black, Encoding::UTF_8)
|
9
9
|
OptionParser.new.tap { |opt|
|
10
|
-
opt.on('-f', '--font
|
10
|
+
opt.on('-f', '--font FONT', 'font file path (require)') do |arg|
|
11
11
|
o.font = arg
|
12
12
|
end
|
13
|
+
opt.on('--text-align ALIGN', 'text align left,right or center (default left)', %i(left right center)) do |arg|
|
14
|
+
o.text_align = arg
|
15
|
+
end
|
16
|
+
opt.on('--fill FILL', 'text fill color (default black)') do |arg|
|
17
|
+
o.fill = arg
|
18
|
+
end
|
19
|
+
opt.on('--encoding ENCODING', 'input text encoding (default utf-8)') do |arg|
|
20
|
+
o.encoding = Encoding.find(arg)
|
21
|
+
end
|
13
22
|
}.parse!(ARGV)
|
23
|
+
unless o.font
|
24
|
+
raise ArgumentError, "require `--font` cli option. see --help"
|
25
|
+
end
|
14
26
|
text = ARGV[0] || $stdin.read
|
15
|
-
puts Text2svg::Typography.build(
|
27
|
+
puts Text2svg::Typography.build(
|
28
|
+
text,
|
29
|
+
font: o.font,
|
30
|
+
text_align: o.text_align,
|
31
|
+
stroke: :none,
|
32
|
+
fill: o.fill,
|
33
|
+
encoding: o.encoding,
|
34
|
+
)
|
16
35
|
end
|
17
36
|
module_function :start
|
18
37
|
end
|
data/lib/text2svg/cli_test.rb
CHANGED
@@ -2,16 +2,45 @@ require 'text2svg/cli'
|
|
2
2
|
|
3
3
|
module Text2svgCLITest
|
4
4
|
def test_start(t)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
%w(left right center).each do |text_align|
|
6
|
+
ARGV[0] = "Hello,\nWorld!"
|
7
|
+
ARGV[1] = '--font=/Library/Fonts/Times New Roman.ttf'
|
8
|
+
ARGV[2] = "--text-align=#{text_align}"
|
9
|
+
out = capture do
|
10
|
+
Text2svg::CLI.start
|
11
|
+
end
|
12
|
+
unless String === out
|
13
|
+
t.error 'return value was break'
|
14
|
+
end
|
15
|
+
unless 0 < out.length
|
16
|
+
t.error 'unsupported font?'
|
17
|
+
end
|
18
|
+
if out.strip[0,4] != "<svg"
|
19
|
+
t.error 'output format was break'
|
20
|
+
end
|
9
21
|
end
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_encoding(t)
|
25
|
+
[
|
26
|
+
['utf-8', "\xEF\x82\x9B".force_encoding(Encoding::ASCII_8BIT)],
|
27
|
+
['utf-32', "\x00\x00\xFE\xFF\x00\x00\xF0\x9B".force_encoding(Encoding::ASCII_8BIT)]
|
28
|
+
].each do |(encoding, text)|
|
29
|
+
ARGV[0] = text
|
30
|
+
ARGV[1] = '--font=~/Library/Fonts/fontawesome-webfont.ttf'
|
31
|
+
ARGV[2] = "--encoding=#{encoding}"
|
32
|
+
out = capture do
|
33
|
+
Text2svg::CLI.start
|
34
|
+
end
|
35
|
+
unless String === out
|
36
|
+
t.error 'return value was break'
|
37
|
+
end
|
38
|
+
unless 0 < out.length
|
39
|
+
t.error 'unsupported font?'
|
40
|
+
end
|
41
|
+
if out.strip[0,4] != "<svg"
|
42
|
+
t.error 'output format was break'
|
43
|
+
end
|
15
44
|
end
|
16
45
|
end
|
17
46
|
|
data/lib/text2svg/typography.rb
CHANGED
@@ -5,18 +5,35 @@ module Text2svg
|
|
5
5
|
class Typography
|
6
6
|
WHITESPACE = /[[:space:]]/
|
7
7
|
IDEOGRAPHIC_SPACE = /[\u{3000}]/
|
8
|
-
NEW_LINE = /[\
|
8
|
+
NEW_LINE = /[\u{000A}]/
|
9
9
|
NOTDEF_GLYPH_ID = 0
|
10
10
|
INTER_CHAR_SPACE_DIV = 50r
|
11
11
|
|
12
12
|
class << self
|
13
|
-
def build(text, font:, stroke: :
|
14
|
-
g, w, h = path(
|
15
|
-
|
13
|
+
def build(text, font:, stroke: :none, stroke_width: 1, fill: :black, text_align: :left, encoding: Encoding::UTF_8)
|
14
|
+
g, w, h = path(
|
15
|
+
text,
|
16
|
+
font: font,
|
17
|
+
stroke: stroke,
|
18
|
+
stroke_width: stroke_width,
|
19
|
+
fill: fill,
|
20
|
+
text_align: text_align,
|
21
|
+
encoding: encoding,
|
22
|
+
)
|
23
|
+
svg = %(<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 #{w} #{h}">\n)
|
24
|
+
svg << "<title>#{text}</title>\n"
|
25
|
+
svg << g
|
26
|
+
svg << "</svg>\n"
|
27
|
+
svg
|
16
28
|
end
|
17
29
|
|
18
|
-
def path(text, font:, stroke: :
|
19
|
-
|
30
|
+
def path(text, font:, stroke: :none, stroke_width: 1, fill: :black, text_align: :left, encoding: Encoding::UTF_8)
|
31
|
+
stroke ||= :none
|
32
|
+
fill ||= :black
|
33
|
+
text_align ||= :left
|
34
|
+
text.force_encoding(encoding).encode!(Encoding::UTF_8)
|
35
|
+
|
36
|
+
FreeType::API::Font.open(File.expand_path(font)) do |f|
|
20
37
|
f.set_char_size(0, 0, 3000, 3000)
|
21
38
|
|
22
39
|
lines = []
|
data/lib/text2svg/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: text2svg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ksss
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: freetype
|