packages/kirki-framework/module-webfonts/src/assets/scripts/vendor-typekit/src/core/font.js
goog.provide('webfont.Font');
/**
* This class is an abstraction for a single font or typeface.
* It contains the font name and the variation (i.e. style
* and weight.) A collection Font instances can represent a
* font family.
*
* @constructor
* @param {string} name The font family name
* @param {string=} opt_variation A font variation description
*/
webfont.Font = function (name, opt_variation) {
this.name_ = name;
this.weight_ = 4;
this.style_ = 'n'
var variation = opt_variation || 'n4',
match = variation.match(/^([nio])([1-9])$/i);
if (match) {
this.style_ = match[1];
this.weight_ = parseInt(match[2], 10);
}
};
goog.scope(function () {
var Font = webfont.Font;
/**
* @return {string}
*/
Font.prototype.getName = function () {
return this.name_;
};
/**
* @return {string}
*/
Font.prototype.getCssName = function () {
return this.quote_(this.name_);
};
/**
* Returns a CSS string representation of the font that
* can be used as the CSS font property shorthand.
*
* @return {string}
*/
Font.prototype.toCssString = function () {
return this.getCssStyle() + ' ' + this.getCssWeight() + ' 300px ' + this.getCssName();
};
/**
* @private
* @param {string} name
* @return {string}
*/
Font.prototype.quote_ = function (name) {
var quoted = [];
var split = name.split(/,\s*/);
for (var i = 0; i < split.length; i++) {
var part = split[i].replace(/['"]/g, '');
if (part.indexOf(' ') == -1 && !(/^\d/.test(part))) {
quoted.push(part);
} else {
quoted.push("'" + part + "'");
}
}
return quoted.join(',');
};
/**
* @return {string}
*/
Font.prototype.getVariation = function () {
return this.style_ + this.weight_;
};
/**
* @return {string}
*/
Font.prototype.getCssVariation = function () {
return 'font-style:' + this.getCssStyle() + ';font-weight:' + this.getCssWeight() + ';';
};
/**
* @return {string}
*/
Font.prototype.getCssWeight = function () {
return this.weight_ + '00';
};
/**
* @return {string}
*/
Font.prototype.getCssStyle = function () {
var style = 'normal';
if (this.style_ === 'o') {
style = 'oblique';
} else if (this.style_ === 'i') {
style = 'italic';
}
return style;
};
/**
* Parses a CSS font declaration and returns a font
* variation description.
*
* @param {string} css
* @return {string}
*/
Font.parseCssVariation = function (css) {
var weight = 4,
style = 'n',
m = null;
if (css) {
m = css.match(/(normal|oblique|italic)/i);
if (m && m[1]) {
style = m[1].substr(0, 1).toLowerCase();
}
m = css.match(/([1-9]00|normal|bold)/i);
if (m && m[1]) {
if (/bold/i.test(m[1])) {
weight = 7;
} else if (/[1-9]00/.test(m[1])) {
weight = parseInt(m[1].substr(0, 1), 10);
}
}
}
return style + weight;
}
});