packages/kirki-framework/module-webfonts/src/assets/scripts/vendor-typekit/src/modules/google/fontapiparser.js
goog.provide('webfont.modules.google.FontApiParser');
goog.require('webfont.Font');
/**
* @constructor
*/
webfont.modules.google.FontApiParser = function(fontFamilies) {
this.fontFamilies_ = fontFamilies;
this.parsedFonts_ = [];
this.fontTestStrings_ = {};
};
webfont.modules.google.FontApiParser.INT_FONTS = {
'latin': webfont.FontWatchRunner.DEFAULT_TEST_STRING,
'latin-ext': '\u00E7\u00F6\u00FC\u011F\u015F',
'cyrillic': '\u0439\u044f\u0416',
'greek': '\u03b1\u03b2\u03a3',
'khmer': '\u1780\u1781\u1782',
'Hanuman': '\u1780\u1781\u1782' // For backward compatibility
};
webfont.modules.google.FontApiParser.WEIGHTS = {
'thin': '1',
'extralight': '2',
'extra-light': '2',
'ultralight': '2',
'ultra-light': '2',
'light': '3',
'regular': '4',
'book': '4',
'medium': '5',
'semi-bold': '6',
'semibold': '6',
'demi-bold': '6',
'demibold': '6',
'bold': '7',
'extra-bold': '8',
'extrabold': '8',
'ultra-bold': '8',
'ultrabold': '8',
'black': '9',
'heavy': '9',
'l': '3',
'r': '4',
'b': '7'
};
webfont.modules.google.FontApiParser.STYLES = {
'i': 'i',
'italic': 'i',
'n': 'n',
'normal': 'n'
};
webfont.modules.google.FontApiParser.VARIATION_MATCH =
new RegExp("^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|" +
"(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i" +
"|normal|italic)?$");
goog.scope(function () {
var FontApiParser = webfont.modules.google.FontApiParser,
Font = webfont.Font;
FontApiParser.prototype.parse = function() {
var length = this.fontFamilies_.length;
for (var i = 0; i < length; i++) {
var elements = this.fontFamilies_[i].split(":");
var fontFamily = elements[0].replace(/\+/g, " ");
var variations = ['n4'];
if (elements.length >= 2) {
var fvds = this.parseVariations_(elements[1]);
if (fvds.length > 0) {
variations = fvds;
}
if (elements.length == 3) {
var subsets = this.parseSubsets_(elements[2]);
if (subsets.length > 0) {
var fontTestString = FontApiParser.INT_FONTS[subsets[0]];
if (fontTestString) {
this.fontTestStrings_[fontFamily] = fontTestString;
}
}
}
}
// For backward compatibility
if (!this.fontTestStrings_[fontFamily]) {
var hanumanTestString = FontApiParser.INT_FONTS[fontFamily];
if (hanumanTestString) {
this.fontTestStrings_[fontFamily] = hanumanTestString;
}
}
for (var j = 0; j < variations.length; j += 1) {
this.parsedFonts_.push(new Font(fontFamily, variations[j]));
}
}
};
FontApiParser.prototype.generateFontVariationDescription_ = function(variation) {
if (!variation.match(/^[\w-]+$/)) {
return '';
}
var normalizedVariation = variation.toLowerCase();
var groups = FontApiParser.VARIATION_MATCH.exec(normalizedVariation);
if (groups == null) {
return '';
}
var styleMatch = this.normalizeStyle_(groups[2]);
var weightMatch = this.normalizeWeight_(groups[1]);
return [styleMatch, weightMatch].join('');
};
FontApiParser.prototype.normalizeStyle_ = function(parsedStyle) {
if (parsedStyle == null || parsedStyle == '') {
return 'n';
}
return FontApiParser.STYLES[parsedStyle];
};
FontApiParser.prototype.normalizeWeight_ = function(parsedWeight) {
if (parsedWeight == null || parsedWeight == '') {
return '4';
}
var weight = FontApiParser.WEIGHTS[parsedWeight];
if (weight) {
return weight;
}
if (isNaN(parsedWeight)) {
return '4';
}
return parsedWeight.substr(0, 1);
};
FontApiParser.prototype.parseVariations_ = function(variations) {
var finalVariations = [];
if (!variations) {
return finalVariations;
}
var providedVariations = variations.split(",");
var length = providedVariations.length;
for (var i = 0; i < length; i++) {
var variation = providedVariations[i];
var fvd = this.generateFontVariationDescription_(variation);
if (fvd) {
finalVariations.push(fvd);
}
}
return finalVariations;
};
FontApiParser.prototype.parseSubsets_ = function(subsets) {
var finalSubsets = [];
if (!subsets) {
return finalSubsets;
}
return subsets.split(",");
};
FontApiParser.prototype.getFonts = function() {
return this.parsedFonts_;
};
FontApiParser.prototype.getFontTestStrings = function() {
return this.fontTestStrings_;
};
});