webfontloader 1.0.30 → 1.0.31

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ v1.0.31 (September 11, 2012)
2
+ * Improvements to Google's module to recognize more variation descriptor formats (such as 100italic and 200n).
3
+
1
4
  v1.0.30 (August 17, 2012)
2
5
  * Added support for detecting the Windows Phone platform in UserAgentParser, which supports web fonts at version 8 and above.
3
6
  * Changes to make the global namespace of the library easier to configure when used in 3rd-party projects. (Thanks cbosco!)
data/lib/webfontloader.rb CHANGED
@@ -3,7 +3,7 @@ require 'yaml'
3
3
  require 'webfontloader/modules'
4
4
 
5
5
  module WebFontLoader
6
- VERSION = '1.0.30'
6
+ VERSION = '1.0.31'
7
7
 
8
8
  ProjectRoot = File.expand_path(File.dirname(__FILE__) + "/..")
9
9
 
@@ -9,20 +9,6 @@ webfont.FontApiParser = function(fontFamilies) {
9
9
  this.fvd_ = new webfont.FontVariationDescription();
10
10
  };
11
11
 
12
- webfont.FontApiParser.VARIATIONS = {
13
- 'ultralight': 'n2',
14
- 'light': 'n3',
15
- 'regular': 'n4',
16
- 'bold': 'n7',
17
- 'italic': 'i4',
18
- 'bolditalic': 'i7',
19
- 'ul': 'n2',
20
- 'l': 'n3',
21
- 'r': 'n4',
22
- 'b': 'n7',
23
- 'i': 'i4',
24
- 'bi': 'i7'
25
- };
26
12
 
27
13
  webfont.FontApiParser.INT_FONTS = {
28
14
  'latin': webfont.FontWatchRunner.DEFAULT_TEST_STRING,
@@ -32,6 +18,44 @@ webfont.FontApiParser.INT_FONTS = {
32
18
  'Hanuman': 'កខគ' // For backward compatibility
33
19
  };
34
20
 
21
+ webfont.FontApiParser.WEIGHTS = {
22
+ 'thin': '1',
23
+ 'extralight': '2',
24
+ 'extra-light': '2',
25
+ 'ultralight': '2',
26
+ 'ultra-light': '2',
27
+ 'light': '3',
28
+ 'regular': '4',
29
+ 'book': '4',
30
+ 'medium': '5',
31
+ 'semi-bold': '6',
32
+ 'semibold': '6',
33
+ 'demi-bold': '6',
34
+ 'demibold': '6',
35
+ 'bold': '7',
36
+ 'extra-bold': '8',
37
+ 'extrabold': '8',
38
+ 'ultra-bold': '8',
39
+ 'ultrabold': '8',
40
+ 'black': '9',
41
+ 'heavy': '9',
42
+ 'l': '3',
43
+ 'r': '4',
44
+ 'b': '7'
45
+ };
46
+
47
+ webfont.FontApiParser.STYLES = {
48
+ 'i': 'i',
49
+ 'italic': 'i',
50
+ 'n': 'n',
51
+ 'normal': 'n'
52
+ };
53
+
54
+ webfont.FontApiParser.VARIATION_MATCH =
55
+ new RegExp("^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|" +
56
+ "(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i" +
57
+ "|normal|italic)?$");
58
+
35
59
  webfont.FontApiParser.prototype.parse = function() {
36
60
  var length = this.fontFamilies_.length;
37
61
 
@@ -71,29 +95,44 @@ webfont.FontApiParser.prototype.parse = function() {
71
95
  };
72
96
 
73
97
  webfont.FontApiParser.prototype.generateFontVariationDescription_ = function(variation) {
74
- if (!variation.match(/^[\w ]+$/)) {
98
+ if (!variation.match(/^[\w]+$/)) {
99
+ return '';
100
+ }
101
+ var normalizedVariation = variation.toLowerCase();
102
+ var groups = webfont.FontApiParser.VARIATION_MATCH.exec(normalizedVariation);
103
+ if (groups == null) {
75
104
  return '';
76
105
  }
106
+ var styleMatch = this.normalizeStyle_(groups[2]);
107
+ var weightMatch = this.normalizeWeight_(groups[1]);
108
+ var css = this.fvd_.expand([styleMatch, weightMatch].join(''));
109
+ return css ? this.fvd_.compact(css) : null;
110
+ };
111
+
112
+
113
+ webfont.FontApiParser.prototype.normalizeStyle_ = function(parsedStyle) {
114
+ if (parsedStyle == null) {
115
+ return 'n';
116
+ }
117
+ return webfont.FontApiParser.STYLES[parsedStyle];
118
+ };
77
119
 
78
- var fvd = webfont.FontApiParser.VARIATIONS[variation];
79
-
80
- if (fvd) {
81
- return fvd;
82
- } else {
83
- var groups = variation.match(/^(\d*)(\w*)$/);
84
- var numericMatch = groups[1];
85
- var styleMatch = groups[2];
86
- var s = styleMatch ? styleMatch : 'n';
87
- var w = numericMatch ? numericMatch.substr(0, 1) : '4';
88
- var css = this.fvd_.expand([s, w].join(''));
89
- if (css) {
90
- return this.fvd_.compact(css);
91
- } else {
92
- return null;
93
- }
120
+
121
+ webfont.FontApiParser.prototype.normalizeWeight_ = function(parsedWeight) {
122
+ if (parsedWeight == null) {
123
+ return '4';
124
+ }
125
+ var weight = webfont.FontApiParser.WEIGHTS[parsedWeight];
126
+ if (weight) {
127
+ return weight;
94
128
  }
129
+ if (isNaN(parsedWeight)) {
130
+ return '4';
131
+ }
132
+ return parsedWeight.substr(0, 1);
95
133
  };
96
134
 
135
+
97
136
  webfont.FontApiParser.prototype.parseVariations_ = function(variations) {
98
137
  var finalVariations = [];
99
138
 
@@ -3,17 +3,19 @@ var FontApiParserTest = TestCase('FontApiParserTest');
3
3
  FontApiParserTest.prototype.testParsedValuesAreCoherent = function() {
4
4
  var fontFamilies = [ 'Tangerine', 'Droid Serif:bi',
5
5
  'Yanone Kaffeesatz:200,300,400,700',
6
- 'Cantarell:italic,b' ];
6
+ 'Cantarell:italic,b', 'Exo:100italic', 'Lobster:200n'];
7
7
  var fontApiParser = new webfont.FontApiParser(fontFamilies);
8
8
 
9
9
  fontApiParser.parse();
10
10
  var parsedFontFamilies = fontApiParser.getFontFamilies();
11
11
 
12
- assertEquals(4, parsedFontFamilies.length);
12
+ assertEquals(6, parsedFontFamilies.length);
13
13
  assertEquals('Tangerine', parsedFontFamilies[0]);
14
14
  assertEquals('Droid Serif', parsedFontFamilies[1]);
15
15
  assertEquals('Yanone Kaffeesatz', parsedFontFamilies[2]);
16
16
  assertEquals('Cantarell', parsedFontFamilies[3]);
17
+ assertEquals('Exo', parsedFontFamilies[4]);
18
+ assertEquals('Lobster', parsedFontFamilies[5]);
17
19
  var variations = fontApiParser.getVariations();
18
20
 
19
21
  var tangerine = variations['Tangerine'];
@@ -39,6 +41,16 @@ FontApiParserTest.prototype.testParsedValuesAreCoherent = function() {
39
41
  assertEquals(2, cantarell.length);
40
42
  assertEquals('i4', cantarell[0]);
41
43
  assertEquals('n7', cantarell[1]);
44
+
45
+ var exo = variations['Exo'];
46
+ assertNotNull(exo);
47
+ assertEquals(1, exo.length);
48
+ assertEquals('i1', exo[0]);
49
+
50
+ var lobster = variations['Lobster'];
51
+ assertNotNull(lobster);
52
+ assertEquals(1, lobster.length);
53
+ assertEquals('n2', lobster[0]);
42
54
  };
43
55
 
44
56
  FontApiParserTest.prototype.testMixOfNumericWeightAndStyle = function() {
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'webfontloader'
16
- s.version = '1.0.30'
17
- s.date = '2012-08-17'
16
+ s.version = '1.0.31'
17
+ s.date = '2012-09-11'
18
18
 
19
19
  ## Make sure your summary is short. The description may be as long
20
20
  ## as you like.
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webfontloader
3
3
  version: !ruby/object:Gem::Version
4
- hash: 43
4
+ hash: 41
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 30
10
- version: 1.0.30
9
+ - 31
10
+ version: 1.0.31
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Carver
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-08-17 00:00:00 Z
19
+ date: 2012-09-11 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  prerelease: false