cheapredwine 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b0db300cc3cd1f51a506262396b30650345609de
4
+ data.tar.gz: d48412833b31a5bfbfceaca49fbdc39cd62e3d45
5
+ SHA512:
6
+ metadata.gz: 8d1f414e15102ad639243999c88d0b4db26949225fc94512e916bb88750dc1e13f18d153498197faaf8cf7b383e51e22b550e1d503e932c893282afae6856258
7
+ data.tar.gz: 8814e6f52930c0dd488c612a77a952cd67b260fb1cf41bd1375c005caddbbf86aeecc628e2b053e889b8b2c2e3e5f7722efd645a2f93057b8b3ce26f24e4fe7e
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+
6
+ before_script:
7
+ - echo 'yes' | sudo add-apt-repository ppa:olivier-berten/fonts
8
+ - sudo apt-get update
9
+ - sudo apt-get install libcairo
10
+ - sudo apt-get install harfbuzz
data/README.md CHANGED
@@ -18,22 +18,25 @@ It assumes the following is installed and in the case where it applies, accessib
18
18
 
19
19
  * [cairo](http://www.cairographics.org/releases/)
20
20
  * [harfbuzz](http://www.freedesktop.org/software/harfbuzz/release/)
21
- * [ttx](https://github.com/mcolyer/fonttools)
22
21
 
23
22
  ## Usage
24
23
 
25
24
  #### Getting a font object from a simple ttf or otf file:
26
25
 
27
- font = CheapRedWine.font(font_file)
26
+ font = CheapRedWine.new font_file
28
27
  font.name # => "Font Name"
28
+ font.family # => "Font Family"
29
+ font.style # => "Bold Italic"
29
30
  font.features # => ["liga", "onum", "dlig", … "salt"]
30
31
 
31
32
  #### Generating images with text for the font:
32
33
 
33
- image = CheapRedWine.image(font, "some text", options)
34
-
35
- **Caveat:** `image` is an IO object that can then be use to write to disk. `font` is any object that responds to `#features` and produces a list `["onum", "liga"]` as well as provide a font file object through `#file`. `file` need only know of it's full path to work properly.
34
+ image = font.image "some text", options
35
+ # ... do something with image ...
36
+ image.close
36
37
 
38
+ **Caveat:** `image` is an IO object that can then be use to write to disk. You are responsible to close that object.
39
+
37
40
  ##### Options
38
41
 
39
42
  options = {
@@ -43,18 +46,6 @@ It assumes the following is installed and in the case where it applies, accessib
43
46
  features: [liga, salt] # list of otf features to be applied
44
47
  }
45
48
 
46
- ##### Configuration
47
-
48
- CheapRedWine needs to know where to put ttx files
49
-
50
- CheapRedWine::TTX.configure do |config|
51
- config.output_folder = '/path/to/folder'
52
- end
53
-
54
- You can also change the output_folder dynamically through
55
-
56
- CheapRedWine.ttx_output_folder = "path/to/folder"
57
-
58
49
  ## Contributing
59
50
 
60
51
  1. Fork it
@@ -65,5 +56,4 @@ You can also change the output_folder dynamically through
65
56
 
66
57
  ## TODO
67
58
 
68
- 1. Create a new utility using fontTools to have more granularity regarding ttx file outputs
69
- 2. Replace hb-view by something more appropriate (C Extension).
59
+ 1. Replace hb-view by something more appropriate (C Extension).
@@ -1,4 +1,4 @@
1
- module CheapRedWine
1
+ class CheapRedWine
2
2
  module Image
3
3
  class Params
4
4
  attr_reader :font, :color, :text, :features, :size, :margin
@@ -1,4 +1,4 @@
1
- module CheapRedWine
1
+ class CheapRedWine
2
2
  module Image
3
3
  class Writer
4
4
  def initialize(image, utility = 'hb-view')
@@ -1,6 +1,6 @@
1
1
  require 'tipo'
2
2
 
3
- module CheapRedWine
3
+ class CheapRedWine
4
4
  class Info
5
5
  def initialize file
6
6
  @info = Tipo.info file
@@ -1,3 +1,3 @@
1
- module CheapRedWine
2
- VERSION = "0.2.0"
1
+ class CheapRedWine
2
+ VERSION = "0.3.1"
3
3
  end
data/lib/cheapredwine.rb CHANGED
@@ -2,56 +2,54 @@ require "cheapredwine/version"
2
2
  require "cheapredwine/info"
3
3
  require "cheapredwine/image"
4
4
 
5
-
6
- module CheapRedWine
7
- class Meta
8
- attr_accessor :name, :family, :features, :path, :style
9
-
10
- def initialize
11
- yield(self) if block_given?
12
- end
13
-
14
- def file
15
- File.new(path)
5
+ class CheapRedWine
6
+ extend Forwardable
7
+ attr_accessor :font
8
+ def_delegators :@font, :file, :name, :family, :style, :features
9
+
10
+ def initialize(file)
11
+ info = Info.new file
12
+ @font = Font.new do |font|
13
+ font.name = info.font_name
14
+ font.family = info.family_name
15
+ font.features = info.features
16
+ font.style = info.style
17
+ font.path = file
18
+ font
16
19
  end
17
20
  end
18
21
 
19
- def self.meta(file)
20
- parser = Info.new file
21
- Meta.new do |meta|
22
- meta.name = parser.font_name
23
- meta.family = parser.family_name
24
- meta.features = parser.features
25
- meta.style = parser.style
26
- meta.path = file
27
- end
28
- end
29
-
30
- def self.image(font, text, options = {})
22
+ def image(text, options = {})
31
23
  features = merge_features(font.features, options.fetch(:features) { [] })
32
- options.merge!({
24
+
25
+ params = options.merge({
33
26
  features: features,
34
27
  font: font.file,
35
28
  text: text
36
29
  })
37
- params = Image::Params.new(options)
38
- Image::Writer.new(params).exec
39
- end
40
30
 
41
- def self.ttx_output_folder=(folder)
42
- CheapRedWine::TTX.configuration.output_folder = folder
43
- end
44
-
45
- def self.ttx_output_folder
46
- CheapRedWine::TTX.configuration.output_folder
31
+ params = Image::Params.new(params)
32
+ Image::Writer.new(params).exec
47
33
  end
48
34
 
49
35
  private
50
36
 
51
- def self.merge_features(all_features, selected_features)
37
+ def merge_features(all_features, selected_features)
52
38
  all_features.map do |feature|
53
39
  prefix = selected_features.include?(feature) ? '+' : '-'
54
40
  prefix + feature
55
41
  end
56
42
  end
43
+
44
+ class Font
45
+ attr_accessor :name, :family, :features, :path, :style
46
+
47
+ def initialize
48
+ yield(self) if block_given?
49
+ end
50
+
51
+ def file
52
+ File.new(path)
53
+ end
54
+ end
57
55
  end
@@ -3,16 +3,16 @@ require 'tempfile'
3
3
 
4
4
  describe CheapRedWine do
5
5
  let(:file) { File.new('spec/fixtures/hobo.otf') }
6
- let(:meta) { CheapRedWine.meta(file) }
6
+ let(:wine) { CheapRedWine.new(file) }
7
7
 
8
8
  it "gets meta information from a font file" do
9
- meta.name.should eq "Hobo Std Medium"
10
- meta.file.path.should match file.path
9
+ wine.name.should eq "Hobo Std Medium"
10
+ wine.file.path.should match file.path
11
11
  end
12
12
 
13
13
  it "can create images from text" do
14
14
  options = { size: 26, features: ['liga', 'frac'] }
15
- image = CheapRedWine.image(meta, 'ffi 1/2', options)
15
+ image = wine.image 'ffi 1/2', options
16
16
  tempfile = Tempfile.new('image')
17
17
  tempfile.write(image.read)
18
18
  tempfile.close
@@ -1,13 +1,11 @@
1
1
  require 'cheapredwine/image/params'
2
2
 
3
- include CheapRedWine::Image
4
-
5
- describe Params do
3
+ describe CheapRedWine::Image::Params do
6
4
  it "takes a bunch of options" do
7
5
  font = double
8
6
  features = ['kern', 'aalt', 'onum', 'liga']
9
7
 
10
- params = Params.new(
8
+ params = CheapRedWine::Image::Params.new(
11
9
  font: font,
12
10
  color: 'black',
13
11
  features: features,
@@ -1,21 +1,19 @@
1
1
  require 'cheapredwine/image/writer'
2
2
  require 'cheapredwine/image/params'
3
3
 
4
- include CheapRedWine::Image
5
-
6
- describe Writer do
4
+ describe CheapRedWine::Image::Writer do
7
5
  let(:font) { double("font", path: "spec/fixtures/lato-regular.ttf") }
8
- let(:image) { Params.new(font: font, text: "Lorem ipsum") }
6
+ let(:image) { CheapRedWine::Image::Params.new(font: font, text: "Lorem ipsum") }
9
7
 
10
8
  it "builds a command from a Params object" do
11
- writer = Writer.new(image)
9
+ writer = CheapRedWine::Image::Writer.new(image)
12
10
  writer.args[0].should eq "--font-file=spec/fixtures/lato-regular.ttf"
13
11
  end
14
12
 
15
13
  it "generates a image of given text" do
16
14
  file = File.new('spec/fixtures/test.png')
17
15
 
18
- writer = Writer.new(image)
16
+ writer = CheapRedWine::Image::Writer.new(image)
19
17
  tempfile = writer.exec
20
18
  FileUtils.compare_file(tempfile, file)
21
19
  end
data/spec/info_spec.rb CHANGED
@@ -1,11 +1,9 @@
1
1
  require 'cheapredwine/info'
2
2
 
3
- include CheapRedWine
4
-
5
- describe Info do
3
+ describe CheapRedWine::Info do
6
4
  it "get info out of an otf or ttf font file" do
7
5
  font = 'spec/fixtures/hobo.otf'
8
- info = Info.new font
6
+ info = CheapRedWine::Info.new font
9
7
  info.font_name.should eq "Hobo Std Medium"
10
8
  info.family_name.should eq "Hobo Std"
11
9
  info.style.should eq "Regular"
metadata CHANGED
@@ -1,62 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cheapredwine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.3.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Hugo Bastien
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-26 00:00:00.000000000 Z
11
+ date: 2013-04-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: tipo
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: I needed a way to test fonts on the web. I based this library on myfonts.com.
@@ -70,6 +63,7 @@ extensions: []
70
63
  extra_rdoc_files: []
71
64
  files:
72
65
  - .gitignore
66
+ - .travis.yml
73
67
  - Gemfile
74
68
  - LICENSE.txt
75
69
  - README.md
@@ -94,27 +88,26 @@ files:
94
88
  - spec/info_spec.rb
95
89
  homepage: https://github.com/hugobast/cheapredwine
96
90
  licenses: []
91
+ metadata: {}
97
92
  post_install_message:
98
93
  rdoc_options: []
99
94
  require_paths:
100
95
  - lib
101
96
  required_ruby_version: !ruby/object:Gem::Requirement
102
- none: false
103
97
  requirements:
104
- - - ! '>='
98
+ - - '>='
105
99
  - !ruby/object:Gem::Version
106
100
  version: '0'
107
101
  required_rubygems_version: !ruby/object:Gem::Requirement
108
- none: false
109
102
  requirements:
110
- - - ! '>='
103
+ - - '>='
111
104
  - !ruby/object:Gem::Version
112
105
  version: '0'
113
106
  requirements: []
114
107
  rubyforge_project:
115
- rubygems_version: 1.8.23
108
+ rubygems_version: 2.0.3
116
109
  signing_key:
117
- specification_version: 3
110
+ specification_version: 4
118
111
  summary: I needed a way to test fonts on the web. I based this library on myfonts.com.
119
112
  CheapRedWine makes use to Harfbuzz' hb-view utility to generate images from fonts
120
113
  with a slew of different parameters. It also uses fontTools' ttx utility for font