compass-fontcustom 1.0.0.pre

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 33c354b92ccccb62776079d49fd0edab33aee28b
4
+ data.tar.gz: 97fd9f1564a4180e3a03756c91ced0f30d9a83c1
5
+ SHA512:
6
+ metadata.gz: 78fc310f732d0fef8eae33ddb604cac414aee7f228f502470f4e13385def8f0079e63ffdc8848df8e4aeea6e3562ee793f4122113b35e06b31893787b4bafd3c
7
+ data.tar.gz: fb41b7770a5f977d2565455adb60a7993607d80b9c06a70e177642dd36ce01381ec3ad59444858b559e840c3d79c269252e259c926982afc9d2f7149a21dae25
data/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
1
+ # Changelog
2
+
3
+ **1.0.0.pre**
4
+
5
+ - Designed to work with fontcustom 1.0.0.pre
6
+ - Leveraging fontcustom's new `Fontcustom::Generator::Font` to generate font without stylesheets
7
+ - Generating custom stylesheet (see `lib/compass/fontcustom/templates/stylesheet.scss.erb) via mixins
8
+ - After `@import`ing your font you now need to `@include all-font-name-glyphs` to have classes available
9
+ - Font glyph class names follow this naming scheme: `.icon-<font>-<glyph>`
10
+ - New Sass function: `glyph(index)` which yields `:before` styles with proper index pointing at a specific glyph
11
+ Example:
12
+ `&:before { content: "\<index>"; }`
13
+
14
+ **0.0.1**
15
+
16
+ - obsolete. doesn't matter anymore.
17
+
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in compass-fontcustom.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem 'autotest-standalone'
8
+ gem 'autotest-growl' if RUBY_PLATFORM =~ /darwin/
9
+ gem 'autotest-fsevent'
10
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 glaszig
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # Compass::Fontcustom [![Build Status](https://travis-ci.org/glaszig/compass-fontcustom.png?branch=experimental)](https://travis-ci.org/glaszig/compass-fontcustom)
2
+
3
+ This is my attempt of integrating [Font Custom](http://fontcustom.com) with [Compass](http://compass-style.org).
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'compass-fontcustom'
10
+
11
+ or:
12
+
13
+ gem 'compass-fontcustom', :github => 'glaszig/compass-fontcustom'
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ ## Usage
20
+
21
+ Syntactically it works like Compass' sprites feature.
22
+ You can let Font Custom generate your fonts upon Compass' css compilation:
23
+
24
+ ```css
25
+ @import "myfont/*.svg";
26
+ @include all-myfont-glyphs;
27
+ ```
28
+
29
+ This will import `fontcustom.css` into your stylesheet so that you can use the font `myfont` and the generated classes.
30
+
31
+ The font files will be searched in `images_path/myfont` and be written to Compass' `fonts_path`.
32
+
33
+ ## Disabling file name hashes
34
+
35
+ You can choose to disable file name hashes if you're already using an asset pipeline that handles this for you:
36
+ Use the `fontcustom_hash` compass option in `config.rb`
37
+
38
+ ```ruby
39
+ compass_config do |config|
40
+ config.fontcustom_hash = false
41
+ end
42
+ ```
43
+
44
+ ## Contributing
45
+
46
+ 1. Fork it
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
49
+ 4. Push to the branch (`git push origin my-new-feature`)
50
+ 5. Create new Pull Request
51
+
52
+ ## License
53
+
54
+ [MIT](https://raw.github.com/glaszig/compass-fontcustom/master/LICENSE)
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ t.test_files = FileList['test/**/*_test.rb']
7
+ t.verbose = true
8
+ end
9
+
10
+ desc "Run tests"
11
+ task :default => :test
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'compass/fontcustom/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "compass-fontcustom"
8
+ spec.version = Compass::Fontcustom::VERSION
9
+ spec.authors = ["glaszig"]
10
+ spec.email = ["glaszig@gmail.com"]
11
+ spec.description = %q{Fontcustom for Compass}
12
+ spec.summary = %q{Integrates Fontcustom with Compass}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/).reject { |f| f =~ /^(demo|\.)/ }
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "compass"
22
+ spec.add_dependency "fontcustom", "~> 1.0.0.pre"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.3"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "pry"
27
+ end
@@ -0,0 +1,33 @@
1
+ module Compass
2
+ module Fontcustom
3
+
4
+ # A simple configuration store like the one known from ActiveSupport.
5
+ module Configurable
6
+
7
+ def self.included(base)
8
+ base.class_eval do
9
+ def self.configure(&block)
10
+ yield config
11
+ end
12
+
13
+ def self.config
14
+ @_config ||= Configuration.new
15
+ end
16
+ end
17
+ end
18
+
19
+ class Configuration
20
+ def method_missing(meth, *args)
21
+ @config ||= {}
22
+ if meth.to_s =~ /=$/
23
+ sym = meth.to_s[0...-1].to_sym
24
+ @config[sym] = args.first
25
+ else
26
+ @config[meth]
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,176 @@
1
+ require 'erb'
2
+ require 'tempfile'
3
+ require 'fontcustom/error'
4
+ require 'fontcustom/options'
5
+ require 'fontcustom/util'
6
+ require 'fontcustom/generator/font'
7
+
8
+ module Compass
9
+ module Fontcustom
10
+
11
+ # Just an `OpenStruct` to contain template variables.
12
+ # @see FontImporter#content_for_font
13
+ class TemplateData < OpenStruct
14
+ # Returns the intance's internal `binding`.
15
+ def expose_binding; binding end
16
+ end
17
+
18
+ # The Sass Importer responsible to find svg and eps files
19
+ # and to start the Fontcustom font generator.
20
+ class FontImporter < ::Sass::Importers::Base
21
+
22
+ # Regexp matching uri's of svg and eps files.
23
+ # Matching group `$1` contains the path, `$3` the file name.
24
+ GLYPH_FILE_REGEX = %r{((.+/)?([^\*.]+))/(.+?)\.(svg|eps)}
25
+
26
+ # class methods
27
+ class << self
28
+
29
+ # Returns an array with two elements.
30
+ # First the path, second the file name of the `uri`.
31
+ # @param uri [String] an uri to match glyph image
32
+ # @return [Array] a two-element array containing the path and file name components
33
+ def path_and_name(uri)
34
+ if uri =~ GLYPH_FILE_REGEX
35
+ [$1, $3]
36
+ else
37
+ raise Compass::Error, "Invalid glyph image uri"
38
+ end
39
+ end
40
+
41
+ # Returns only the file name component of `uri`.
42
+ # @see path_and_name
43
+ # @return [String]
44
+ def font_name(uri)
45
+ _, name = path_and_name(uri)
46
+ name
47
+ end
48
+
49
+ # Returns only the path component of `uri`
50
+ # @see path_and_name
51
+ # @return [String]
52
+ def path(uri)
53
+ path, _ = path_and_name(uri)
54
+ path
55
+ end
56
+
57
+ # Returns all glyph names inside the folder at `uri`.
58
+ # @param uri [String] the uri to glob files from
59
+ # @return [Array]
60
+ def glyph_names(uri)
61
+ folder = Compass.configuration.images_path.to_s
62
+ files = Dir[File.join(folder, uri)].sort
63
+
64
+ if files.empty?
65
+ raise Compass::SpriteException, %Q{No glyph images were found matching "#{uri}" in the images path. Your current images path is: #{folder}}
66
+ end
67
+
68
+ files.map { |f| File.basename(f)[0..-5] }
69
+ end
70
+
71
+ # Returns `Sass::Engine` options with defaults
72
+ # @param uri [String] the uri to glob files from
73
+ # @param importer [Sass::Importers::Base] the importer to use (in this case `self`)
74
+ # @param options [Hash] options to merge with
75
+ # @return [Hash]
76
+ def sass_options(uri, importer, options)
77
+ options.merge!(:filename => uri.gsub(%r{\*/},"*\\/"), :syntax => :scss, :importer => importer)
78
+ end
79
+
80
+ # Returns a `Sass::Engine`
81
+ # @param uri [String] the uri to glob files from
82
+ # @param name [String] the font's name
83
+ # @param importer [Sass::Importers::Base] the importer to use (in this case `self`)
84
+ # @param options [Hash] options to merge with
85
+ # @return [Sass::Engine]
86
+ def sass_engine(uri, name, importer, options)
87
+ content = content_for_font(uri, name)
88
+ Sass::Engine.new(content, sass_options(uri, importer, options))
89
+ end
90
+
91
+ # Renders the stylesheet for font `name` at `uri`
92
+ # @param uri [String] the uri to glob files from
93
+ # @param name [String] the font's name
94
+ # @return [String]
95
+ def content_for_font(uri, name)
96
+ erb = File.read File.join(template_path, 'stylesheet.scss.erb')
97
+ binder = TemplateData.new(uri: uri, name: name, path: fonts_path, glyph_names: glyph_names(uri))
98
+ ERB.new(erb).result(binder.expose_binding)
99
+ end
100
+
101
+ # Returns the fonts path
102
+ # @return [String]
103
+ def fonts_path
104
+ Compass.configuration.fonts_dir.to_s
105
+ end
106
+
107
+ # Returns the gems' internal template path.
108
+ # @return [String]
109
+ def template_path
110
+ File.expand_path('../templates', __FILE__)
111
+ end
112
+
113
+ # Returns an array of font files.
114
+ # @param uri [String] the uri to glob files from
115
+ # @return [Array]
116
+ def files(uri)
117
+ folder = Compass.configuration.images_path.to_s
118
+ files = Dir[File.join(folder, uri)]
119
+ files
120
+ end
121
+
122
+ end # end class methods
123
+
124
+ # Resolves incoming uri from an `@import "..."` directive.
125
+ # @param uri [String] the uri from the import directive
126
+ # @param options [Hash] options for the returned Sass::Engine`
127
+ # @return [Sass::Engine]
128
+ def find(uri, options)
129
+ if uri =~ GLYPH_FILE_REGEX
130
+ return self.class.sass_engine(uri, self.class.font_name(uri), self, options)
131
+ end
132
+ nil
133
+ end
134
+
135
+ # Unused. Just returns nil.
136
+ def find_relative(uri, base, options)
137
+ nil
138
+ end
139
+
140
+ # Returns the string representation of this instance.
141
+ # @return [String]
142
+ def to_s
143
+ self.class.name
144
+ end
145
+
146
+ # Returns the hash of this instance.
147
+ # @return [String]
148
+ def hash
149
+ self.class.name.hash
150
+ end
151
+
152
+ # Compares this instance with another object.
153
+ # @param other [Object] another object
154
+ # @return [Boolean]
155
+ def eql?(other)
156
+ other.class == self.class
157
+ end
158
+
159
+ def mtime(uri, options)
160
+ self.class.files(uri).sort.inject(Time.at(0)) do |max_time, file|
161
+ (t = File.mtime(file)) > max_time ? t : max_time
162
+ end
163
+ end
164
+
165
+ # This instance's Compass cache key
166
+ # @param uri [String] the uri to glob files from
167
+ # @param options [Hash] hash of options
168
+ # @return [Array]
169
+ def key(uri, options={})
170
+ [self.class.name + ":fontcustom:" + File.dirname(File.expand_path(uri)), File.basename(uri)]
171
+ end
172
+
173
+ end
174
+
175
+ end
176
+ end
@@ -0,0 +1,71 @@
1
+ require 'fontcustom/generator/font'
2
+ require 'compass/fontcustom/configurable'
3
+
4
+ module Compass
5
+ module Fontcustom
6
+ class GlyphMap < Sass::Script::Literal
7
+ include Configurable
8
+
9
+ attr_reader :name, :path
10
+
11
+ # @param context [Object] usually an instance of FontImporter
12
+ def self.from_uri(uri, context)
13
+ path, name = FontImporter.path_and_name uri
14
+ glyphs = FontImporter.files(uri).sort.map { |file| File.basename(file)[0..-5] }
15
+ new glyphs, path, name, context
16
+ end
17
+
18
+ def initialize(glyphs, path, name, context)
19
+ raise StandardError, "No glyphs found at '#{path}'" if glyphs.empty?
20
+ @glyphs = glyphs
21
+ @path = path
22
+ @name = name
23
+ @context = context
24
+ end
25
+
26
+ def index_for_glyph(name)
27
+ @glyphs.index name
28
+ end
29
+
30
+ # Starts the Fontcustom font generator to write font files to disk.
31
+ def generate
32
+ unless exists?
33
+ args = self.class.config.generator_options || {}
34
+ args.merge!(
35
+ :input => File.join(Compass.configuration.images_path.to_s, self.path),
36
+ :output => output_dir,
37
+ :font_name => @name,
38
+ :file_hash => Compass.configuration.fontcustom_hash,
39
+ :verbose => false
40
+ )
41
+ ::Fontcustom::Generator::Font.start [args]
42
+ end
43
+ end
44
+
45
+ def filename
46
+ file = glob.first
47
+ File.basename file, File.extname(file)
48
+ end
49
+
50
+ def exists?
51
+ not glob.empty?
52
+ end
53
+
54
+ def output_dir
55
+ Compass.configuration.fonts_path.to_s
56
+ end
57
+
58
+ def to_s
59
+ @name.to_s
60
+ end
61
+
62
+ protected
63
+
64
+ def glob
65
+ glob = File.join output_dir, "#{self.name}*"
66
+ Dir[glob]
67
+ end
68
+
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,89 @@
1
+ module Compass
2
+ module Fontcustom
3
+ # Declares extensions for the Sass interpreter
4
+ module SassExtensions
5
+
6
+ # Sass function extensions
7
+ module Functions
8
+
9
+ # Font type format mappings used in css font-face declarations.
10
+ # @see #glyph_font_sources
11
+ FONT_TYPE_FORMATS = {
12
+ 'eot?#iefix' => 'embedded-opentype',
13
+ 'woff' => 'woff',
14
+ 'ttf' => 'truetype',
15
+ "svg#%{font_name}" => 'svg'
16
+ }
17
+
18
+ # Returns `:before` pseudo class styles for the letter at `index` of the font.
19
+ #
20
+ # @param index [FixNum] the font's index
21
+ # @return [Sass::Script::String]
22
+ def glyph(index)
23
+ idx = (61696+index.value-1).to_s(16)
24
+ css = %Q[&:before { content: "\\#{idx}"; }]
25
+ Sass::Script::String.new %Q["\\#{idx}"]
26
+ end
27
+ Sass::Script::Functions.declare :letter, [:index]
28
+
29
+ # Returns a `GlyphMap` representing a font.
30
+ #
31
+ # @param uri [String] the uri to glob files from
32
+ # @return [Compass::Fontcustom::GlyphMap] a glyph map
33
+ def glyph_map(uri)
34
+ GlyphMap.from_uri uri.value, self
35
+ end
36
+ Sass::Script::Functions.declare :glyph_map, [:uri]
37
+
38
+ # Returns all `url(...) format(...)` definitions for the font files of the `map`.
39
+ #
40
+ # @param map [Compass::Fontcustom::GlyphMap] a glyph map
41
+ # @return [Sass::Script::String]
42
+ def glyph_font_sources(map)
43
+ map.generate
44
+ src = []
45
+ FONT_TYPE_FORMATS.each do |type, format|
46
+ url = glyph_font_type_url map, type
47
+ src << "#{url} format('#{format}')"
48
+ end
49
+ Sass::Script::String.new src.join ", "
50
+ end
51
+ Sass::Script::Functions.declare :glyph_font_sources, [:map]
52
+
53
+ # Retuns the font name of `map`.
54
+ #
55
+ # @param map [Compass::Fontcustom::GlyphMap] a glyph map
56
+ # @return [Sass::Script::String]
57
+ def glyph_font_name(map)
58
+ Sass::Script::String.new map.name
59
+ end
60
+ Sass::Script::Functions.declare :glyph_font_name, [:map]
61
+
62
+ # Returns the font name of `map in quotes
63
+ #
64
+ # @param map [Compass::Fontcustom::GlyphMap] a glyph map
65
+ # @return [Sass::Script::String]
66
+ def glyph_font_name_quoted(map)
67
+ Sass::Script::String.new %Q{"#{map.name}"}
68
+ end
69
+ Sass::Script::Functions.declare :glyph_font_name_quoted, [:map]
70
+
71
+ # Helper method. Returns a `Sass::Script::Functions#font_url for the font of `type` in `map`.
72
+ #
73
+ # @return [String]
74
+ def glyph_font_type_url(map, type)
75
+ type = type % {font_name: map.name}
76
+ file_name = "#{map.filename}.#{type}"
77
+ font_file = Sass::Script::String.new file_name
78
+ font_url(font_file).value
79
+ end
80
+
81
+ end
82
+
83
+ end
84
+ end
85
+ end
86
+
87
+ module Sass::Script::Functions
88
+ include Compass::Fontcustom::SassExtensions::Functions
89
+ end
@@ -0,0 +1,14 @@
1
+ @import "fontcustom.scss";
2
+
3
+ $<%= name %>-font-base-class: ".<%= name %>-font" !default;
4
+
5
+ #{$<%= name %>-font-base-class} {
6
+ font-family: "<%= name %>";
7
+ }
8
+
9
+ $<%= name %>-glyphs: glyph-map("<%= uri %>");
10
+
11
+ @mixin all-<%= name %>-glyphs {
12
+ @include fontcustom-font-face($<%= name %>-glyphs);
13
+ @include glyphs($<%= name %>-glyphs, <%= glyph_names.join " " %>, $<%= name %>-font-base-class)
14
+ }
@@ -0,0 +1,5 @@
1
+ module Compass
2
+ module Fontcustom
3
+ VERSION = "1.0.0.pre"
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ require "compass"
2
+ require "compass/fontcustom/version"
3
+ require "compass/fontcustom/sass_extensions"
4
+ require "compass/fontcustom/glyph_map"
5
+ require "compass/fontcustom/font_importer"
6
+
7
+ module Compass
8
+ # This module registers the gem as a Compass framework source,
9
+ # adds config properties to Compass and extends Sass' `load_paths`.
10
+ module Fontcustom
11
+ base_directory = File.expand_path('../../../', __FILE__)
12
+ Compass::Frameworks.register('fontcustom', :path => base_directory)
13
+
14
+ Compass::Configuration.add_configuration_property(:fontcustom_hash, "enables/disables fontcustom file name hashing") do
15
+ true
16
+ end
17
+
18
+ Sass.load_paths << FontImporter.new
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ @mixin fontcustom-font-face($map) {
2
+ @font-face {
3
+ font-family: glyph-font-name-quoted($map);
4
+ src: glyph-font-sources($map);
5
+ font-weight: normal;
6
+ font-style: normal;
7
+ }
8
+ }
9
+
10
+ // generates icon classes in the format icon-<font-name>-<glyph-name>
11
+ // for each glyph in the font.
12
+ //
13
+ // $map must be a glyph map
14
+ // $glyph-names must be a space-separated list of glyph names
15
+ // $base-class should be the css class to @extend
16
+ @mixin glyphs($map, $glyph-names, $base-class: false) {
17
+ $name: glyph-font-name($map);
18
+ @each $glyph-name in $glyph-names {
19
+
20
+ $index: index($glyph-names, $glyph-name);
21
+ $class_name: "icon-#{$name}-#{$glyph-name}";
22
+
23
+ .#{$class_name} {
24
+ @if $base-class { @extend #{$base-class}; }
25
+ &:before { content: glyph($index); }
26
+ }
27
+
28
+ }
29
+ }
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="100px" height="100px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
2
+ <path d="M50,0C22.389,0,0,22.383,0,49.994V100h100V49.994C100,22.383,77.617,0,50,0z M96.667,96.667H3.333V49.994 c0-25.729,20.938-46.66,46.667-46.66c25.729,0,46.667,20.931,46.667,46.66V96.667z"/>
3
+ <path d="M50,10c-22.083,0-40,17.91-40,39.994V90l30-30V50c0-5.521,4.479-10,10-10c5.521,0,10,4.479,10,10v10l30,30V49.994 C90,27.91,72.09,10,50,10z"/>
4
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="100px" height="100px" viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
2
+ <path style="fill:#010101;" d="M87.5,75c-3.039,0-5.725,1.221-7.886,3.016l-19.056-13.6c1.209-2.49,1.941-5.225,1.941-8.166 c0-4.041-1.318-7.775-3.491-10.828l22.29-22.302C83.154,24.207,85.193,25,87.5,25c6.909,0,12.5-5.591,12.5-12.5S94.409,0,87.5,0 S75,5.591,75,12.5c0,2.307,0.793,4.346,1.88,6.201L54.59,41.004c-3.076-2.197-6.787-3.504-10.84-3.504 c-7.153,0-13.306,4.064-16.467,9.973l-15.052-5.029C11.621,39.637,9.24,37.5,6.25,37.5C2.795,37.5,0,40.295,0,43.75 S2.795,50,6.25,50c1.574,0,2.979-0.635,4.077-1.6l14.966,4.993C25.146,54.334,25,55.273,25,56.25C25,66.602,33.398,75,43.75,75 c5.151,0,9.826-2.088,13.221-5.457l18.933,13.514C75.366,84.448,75,85.926,75,87.5c0,6.896,5.591,12.5,12.5,12.5 S100,94.396,100,87.5S94.409,75,87.5,75z"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ require 'compass/fontcustom'
3
+ require 'pry'
@@ -0,0 +1,74 @@
1
+ require 'test_helper'
2
+ require 'stringio'
3
+ require 'fileutils'
4
+
5
+ class FontImporterTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ Compass.reset_configuration!
9
+ @project_path = File.expand_path('../../', __FILE__)
10
+ @output_path = File.join(@project_path, '.output')
11
+ @fonts_path = File.join(@output_path, 'fonts')
12
+ FileUtils.mkdir_p @fonts_path
13
+
14
+ config = StringIO.new <<-SCSS
15
+ project_path = #{@project_path.inspect}
16
+ images_dir = #{"fixtures".inspect}
17
+ css_dir = #{".output".inspect}
18
+ SCSS
19
+ Compass.add_configuration(config, "fontcustom_config")
20
+
21
+ Compass::Fontcustom::GlyphMap.configure do |config|
22
+ config.generator_options = { :debug => true }
23
+ end
24
+ end
25
+
26
+ def teardown
27
+ Compass.reset_configuration!
28
+ FileUtils.rm_r @output_path
29
+ end
30
+
31
+ def render(scss)
32
+ scss = %Q(@import "compass"; #{scss})
33
+ options = Compass.sass_engine_options
34
+ options[:line_comments] = false
35
+ options[:style] = :expanded
36
+ options[:syntax] = :scss
37
+ options[:compass] ||= {}
38
+ options[:compass][:logger] ||= Compass::NullLogger.new
39
+ Sass::Engine.new(scss, options).render
40
+ end
41
+
42
+ def test_should_generate_font_classes
43
+ fontname = 'myfont'
44
+
45
+ css = render <<-SCSS
46
+ @import "#{fontname}/*.svg";
47
+ @include all-myfont-glyphs;
48
+ SCSS
49
+
50
+ assert css =~ %r{.#{fontname}-font}, "base font class missing"
51
+ assert css =~ %r{.icon-#{fontname}-c}i, "icon c css class missing"
52
+ assert css =~ %r{.icon-#{fontname}-d}i, "icon d css class missing"
53
+ end
54
+
55
+ def test_should_skip_file_name_hashes_if_option_is_set
56
+ fontname = 'myfont'
57
+
58
+ Compass.configuration.fontcustom_hash = false
59
+
60
+ css = render <<-SCSS
61
+ @import "#{fontname}/*.svg";
62
+ @include all-myfont-glyphs;
63
+ SCSS
64
+
65
+ assert File.exists? File.join(Compass.configuration.fonts_path, 'myfont.svg')
66
+ assert File.exists? File.join(Compass.configuration.fonts_path, 'myfont.ttf')
67
+ assert File.exists? File.join(Compass.configuration.fonts_path, 'myfont.woff')
68
+
69
+ assert css =~ %r{.#{fontname}-font}, "base font class missing"
70
+ assert css =~ %r{.icon-#{fontname}-c}i, "icon c css class missing"
71
+ assert css =~ %r{.icon-#{fontname}-d}i, "icon d css class missing"
72
+ end
73
+
74
+ end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ class GlyphMapTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ font_path = File.expand_path('../../fixtures/myfont', __FILE__) + '/*.svg'
7
+ @glyph_map = Compass::Fontcustom::GlyphMap.from_uri font_path, nil
8
+ end
9
+
10
+ def test_glyph_map
11
+ map = @glyph_map.instance_variable_get(:@glyphs)
12
+ assert !map.empty?
13
+ end
14
+
15
+ def test_glyph_index_access
16
+ assert_equal 0, @glyph_map.index_for_glyph('C')
17
+ end
18
+
19
+ end
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: compass-fontcustom
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre
5
+ platform: ruby
6
+ authors:
7
+ - glaszig
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: compass
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
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: fontcustom
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0.pre
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0.pre
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
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: pry
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
+ description: Fontcustom for Compass
84
+ email:
85
+ - glaszig@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - CHANGELOG.md
91
+ - Gemfile
92
+ - LICENSE.txt
93
+ - README.md
94
+ - Rakefile
95
+ - compass-fontcustom.gemspec
96
+ - lib/compass/fontcustom.rb
97
+ - lib/compass/fontcustom/configurable.rb
98
+ - lib/compass/fontcustom/font_importer.rb
99
+ - lib/compass/fontcustom/glyph_map.rb
100
+ - lib/compass/fontcustom/sass_extensions.rb
101
+ - lib/compass/fontcustom/templates/stylesheet.scss.erb
102
+ - lib/compass/fontcustom/version.rb
103
+ - stylesheets/_fontcustom.scss
104
+ - test/fixtures/myfont/C.svg
105
+ - test/fixtures/myfont/D.svg
106
+ - test/test_helper.rb
107
+ - test/unit/font_importer_test.rb
108
+ - test/unit/glyph_map_test.rb
109
+ homepage: ''
110
+ licenses:
111
+ - MIT
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - '>'
125
+ - !ruby/object:Gem::Version
126
+ version: 1.3.1
127
+ requirements: []
128
+ rubyforge_project:
129
+ rubygems_version: 2.0.0
130
+ signing_key:
131
+ specification_version: 4
132
+ summary: Integrates Fontcustom with Compass
133
+ test_files:
134
+ - test/fixtures/myfont/C.svg
135
+ - test/fixtures/myfont/D.svg
136
+ - test/test_helper.rb
137
+ - test/unit/font_importer_test.rb
138
+ - test/unit/glyph_map_test.rb
139
+ has_rdoc: