"Arial, Helvetica, sans-serif",
"'Arial Black', Gadget, sans-serif" => "'Arial Black', Gadget, sans-serif",
"'Bookman Old Style', serif" => "'Bookman Old Style', serif",
"'Comic Sans MS', cursive" => "'Comic Sans MS', cursive",
"Courier, monospace" => "Courier, monospace",
"Garamond, serif" => "Garamond, serif",
"Georgia, serif" => "Georgia, serif",
"Impact, Charcoal, sans-serif" => "Impact, Charcoal, sans-serif",
"'Lucida Console', Monaco, monospace" => "'Lucida Console', Monaco, monospace",
"'Lucida Sans Unicode', 'Lucida Grande', sans-serif" => "'Lucida Sans Unicode', 'Lucida Grande', sans-serif",
"'MS Sans Serif', Geneva, sans-serif" => "'MS Sans Serif', Geneva, sans-serif",
"'MS Serif', 'New York', sans-serif" => "'MS Serif', 'New York', sans-serif",
"'Palatino Linotype', 'Book Antiqua', Palatino, serif" => "'Palatino Linotype', 'Book Antiqua', Palatino, serif",
"Tahoma,Geneva, sans-serif" => "Tahoma, Geneva, sans-serif",
"'Times New Roman', Times,serif" => "'Times New Roman', Times, serif",
"'Trebuchet MS', Helvetica, sans-serif" => "'Trebuchet MS', Helvetica, sans-serif",
"Verdana, Geneva, sans-serif" => "Verdana, Geneva, sans-serif",
);
private $user_fonts = true;
/**
* Field Constructor.
*
* Required - must call the parent constructor, then assign field and value to vars, and obviously call the render field function
*
* @since ReduxFramework 1.0.0
*/
function __construct($field = array(), $value = '', $parent) {
$this->parent = $parent;
$this->field = $field;
$this->value = $value;
// Init wp_filesystem
//Redux_Functions::initWpFilesystem();
//global $wp_filesystem;
// Set upload dir path for google fonts
$this->font_dir = ReduxFramework::$_upload_dir . 'google-fonts/';
// Check for redux_google_font dir
if (!is_dir($this->font_dir)) {
// Create it, if not found
//$wp_filesystem->mkdir($this->font_dir, FS_CHMOD_DIR);
if ($this->parent->filesystem->execute('mkdir', $this->font_dir)) {
return;
}
}
// Shim out old arg to new
if (isset($this->field['all_styles']) && !empty($this->field['all_styles'])) {
$this->field['all-styles'] = $this->field['all_styles'];
unset ($this->field['all_styles']);
}
// Set google font file variables
$this->google_json = $this->font_dir . 'googlefonts.json';
// Move installed googlefonts.json to upload location, if not exists
if (!file_exists($this->google_json)) {
//(ReduxFramework::$_dir . 'inc/fields/typography/googlefonts.json', $this->font_dir . 'googlefonts.json', false);
$param_array = array(
'destination' => $this->google_json,
'overwrite' => false,
'chmod' => 0644
);
$this->parent->filesystem->execute('copy', ReduxFramework::$_dir . 'inc/fields/typography/googlefonts.json', $param_array );
}
// Set field array defaults. No errors please
$defaults = array(
'font-family' => true,
'font-size' => true,
'font-weight' => true,
'font-style' => true,
'font-backup' => false,
'subsets' => true,
'custom_fonts' => true,
'text-align' => true,
'text-transform' => false,
'font-variant' => false,
'text-decoration' => false,
'color' => true,
'preview' => true,
'line-height' => true,
'word-spacing' => false,
'letter-spacing' => false,
'google' => true,
'update_weekly' => false, // Enable to force updates of Google Fonts to be weekly
);
$this->field = wp_parse_args($this->field, $defaults);
// Set value defaults.
$defaults = array(
'font-family' => '',
'font-options' => '',
'font-backup' => '',
'text-align' => '',
'text-transform' => '',
'font-variant' => '',
'text-decoration' => '',
'line-height' => '',
'word-spacing' => '',
'letter-spacing' => '',
'subsets' => '',
'google' => false,
'font-script' => '',
'font-weight' => '',
'font-style' => '',
'color' => '',
'font-size' => '',
);
$this->value = wp_parse_args($this->value, $defaults);
// Get the google array
$this->getGoogleArray();
if (empty($this->field['fonts'])) {
$this->user_fonts = false;
$this->field['fonts'] = $this->std_fonts;
}
// Localize std fonts
$this->localizeStdFonts();
}
function localize($field, $value = "") {
$params = array();
if (true == $this->user_fonts && !empty($this->field['fonts'])) {
$params['std_font'] = $this->field['fonts'];
}
return $params;
}
/**
* Field Render Function.
*
* Takes the vars and outputs the HTML for the field in the settings
*
* @since ReduxFramework 1.0.0
*/
function render() {
// Since fonts declared is CSS (@font-face) are not rendered in the preview,
// they can be declared in a CSS file and passed here so they DO display in
// font preview. Do NOT pass style.css in your theme, as that will mess up
// admin page styling. It's recommended to pass a CSS file with ONLY font
// declarations.
// If field is set and not blank, then enqueue field
if (isset($this->field['ext-font-css']) && $this->field['ext-font-css'] != '') {
wp_register_style('redux-external-fonts', $this->field['ext-font-css']);
wp_enqueue_style('redux-external-fonts');
}
if (empty($this->field['units']) && !empty($this->field['default']['units'])) {
$this->field['units'] = $this->field['default']['units'];
}
if (empty($this->field['units']) || !in_array($this->field['units'], array(
'px',
'em',
'rem',
'%'
))) {
$this->field['units'] = 'px';
}
$unit = $this->field['units'];
echo '
';
if (isset($this->field['select2'])) { // if there are any let's pass them to js
$select2_params = json_encode($this->field['select2']);
$select2_params = htmlspecialchars($select2_params, ENT_QUOTES);
echo '';
}
/* Font Family */
if ($this->field['font-family'] === true) {
//if (filter_var($this->value['google'], FILTER_VALIDATE_BOOLEAN)) {
if (filter_var($this->value['google'], FILTER_VALIDATE_BOOLEAN)) {
// Divide and conquer
$fontFamily = explode(', ', $this->value['font-family'], 2);
// If array 0 is empty and array 1 is not
if (empty($fontFamily[0]) && !empty($fontFamily[1])) {
// Make array 0 = array 1
$fontFamily[0] = $fontFamily[1];
// Clear array 1
$fontFamily[1] = "";
}
}
// If no fontFamily array exists, create one and set array 0
// with font value
if (!isset($fontFamily)) {
$fontFamily = array();
$fontFamily[0] = $this->value['font-family'];
$fontFamily[1] = "";
}
// Is selected font a Google font
$isGoogleFont = '0';
if (isset($this->parent->fonts['google'][$fontFamily[0]])) {
$isGoogleFont = '1';
}
// If not a Google font, show all font families
if ($isGoogleFont != '1') {
$fontFamily[0] = $this->value['font-family'];
}
$userFonts = '0';
if (true == $this->user_fonts) {
$userFonts = '1';
}
echo '';
echo '';
echo '';
echo '
';
$googleSet = false;
if ($this->field['google'] === true) {
// Set a flag so we know to set a header style or not
echo '';
$googleSet = true;
}
}
/* Backup Font */
if ($this->field['font-family'] === true && $this->field['google'] === true) {
if (false == $googleSet) {
// Set a flag so we know to set a header style or not
echo '';
}
if ($this->field['font-backup'] === true) {
echo '
';
echo '';
echo '
';
}
}
/* Font Style/Weight */
if ($this->field['font-style'] === true || $this->field['font-weight'] === true){
echo '
';
}
/* Font Script */
if ($this->field['font-family'] == true && $this->field['subsets'] == true && $this->field['google'] == true){
echo '
';
echo ' ';
echo '';
echo '
';
}
/* Font Align */
if ($this->field['text-align'] === true){
echo '
';
echo '';
echo '
';
}
/* Text Transform */
if ($this->field['text-transform'] === true) {
echo '
';
echo '';
echo '
';
}
/* Font Variant */
if ($this->field['font-variant'] === true) {
echo '
';
echo '';
echo '
';
}
/* Text Decoration */
if ($this->field['text-decoration'] === true) {
echo '
';
echo '';
echo '
';
}
/* Font Size */
if ($this->field['font-size'] === true){
echo '
';
echo '';
echo '
' . $unit . '
';
echo '';
echo '
';
}
/* Line Height */
if ($this->field['line-height'] === true){
echo '
';
echo '';
echo '
' . $unit . '
';
echo '';
echo '
';
}
/* Word Spacing */
if ($this->field['word-spacing'] === true){
echo '
';
echo '';
echo '
' . $unit . '
';
echo '';
echo '
';
}
/* Letter Spacing */
if ($this->field['letter-spacing'] === true){
echo '
';
echo '';
echo '
' . $unit . '
';
echo '';
echo '
';
}
echo '';
/* Font Color */
if ($this->field['color'] === true){
$default = "";
if (empty($this->field['default']['color']) && !empty($this->field['color'])) {
$default = $this->value['color'];
} else if (!empty($this->field['default']['color'])) {
$default = $this->field['default']['color'];
}
echo '
';
echo '';
echo '
';
echo '';
echo '
';
}
echo '';
/* Font Preview */
if (!isset($this->field['preview']) || $this->field['preview'] !== false){
if (isset($this->field['preview']['text'])) {
$g_text = $this->field['preview']['text'];
} else {
$g_text = '1 2 3 4 5 6 7 8 9 0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z';
}
$style = '';
if (isset($this->field['preview']['always_display'])) {
if (true === filter_var( $this->field['preview']['always_display'], FILTER_VALIDATE_BOOLEAN )) {
if ($isGoogleFont == true) {
$this->parent->typography_preview[$fontFamily[0]] = array(
'font-style' => array($this->value['font-weight'] . $this->value['font-style']),
'subset' => array($this->value['subset'])
);
$protocol = ( ! empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443 ) ? "https:" : "http:";
wp_deregister_style('redux-typography-preview');
wp_dequeue_style('redux-typography-preview');
wp_register_style( 'redux-typography-preview', $protocol . $this->makeGoogleWebfontLink( $this->parent->typography_preview ), '', time() );
wp_enqueue_style( 'redux-typography-preview' );
}
$style = 'display: block; font-family: ' . $this->value['font-family'] . '; font-weight: ' . $this->value['font-weight'] . ';' ;
}
}
if (isset($this->field['preview']['font-size'])) {
$style .= 'font-size: ' . $this->field['preview']['font-size'] . ';';
$inUse = '1';
} else {
//$g_size = '';
$inUse = '0';
}
echo '
' . $g_text . '
';
echo '
'; // end typography container
}
} //function
/**
* Enqueue Function.
*
* If this field requires any scripts, or css define this function and register/enqueue the scripts/css
*
* @since ReduxFramework 1.0.0
*/
function enqueue() {
wp_enqueue_script(
'redux-field-typography-js',
ReduxFramework::$_url . 'inc/fields/typography/field_typography' . Redux_Functions::isMin() . '.js',
array( 'jquery', 'wp-color-picker', 'select2-js', 'redux-js' ),
time(),
true
);
wp_localize_script(
'redux-field-typography-js',
'redux_ajax_script',
array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) )
);
wp_enqueue_style(
'redux-field-typography-css',
ReduxFramework::$_url . 'inc/fields/typography/field_typography.css',
time(),
true
);
} //function
/**
* makeGoogleWebfontLink Function.
*
* Creates the google fonts link.
*
* @since ReduxFramework 3.0.0
*/
function makeGoogleWebfontLink($fonts) {
$link = "";
$subsets = array();
foreach ($fonts as $family => $font) {
if (!empty($link)) {
$link.= "%7C"; // Append a new font to the string
}
$link.= $family;
if (!empty($font['font-style']) || !empty($font['all-styles'])) {
$link.= ':';
if (!empty($font['all-styles'])) {
$link .= implode(',', $font['all-styles']);
} else if (!empty($font['font-style'])) {
$link .= implode(',', $font['font-style']);
}
}
if (!empty($font['subset'])) {
foreach ($font['subset'] as $subset) {
if (!in_array($subset, $subsets)) {
array_push($subsets, $subset);
}
}
}
}
if (!empty($subsets)) {
$link.= "&subset=" . implode(',', $subsets);
}
return '//fonts.googleapis.com/css?family=' . str_replace( '|','%7C', $link );
}
/**
* makeGoogleWebfontString Function.
*
* Creates the google fonts link.
*
* @since ReduxFramework 3.1.8
*/
function makeGoogleWebfontString($fonts) {
$link = "";
$subsets = array();
foreach ($fonts as $family => $font) {
if (!empty($link)) {
$link.= "', '"; // Append a new font to the string
}
$link.= $family;
if (!empty($font['font-style']) || !empty($font['all-styles'])) {
$link.= ':';
if (!empty($font['all-styles'])) {
$link.= implode(',', $font['all-styles']);
} else if (!empty($font['font-style'])) {
$link.= implode(',', $font['font-style']);
}
}
if (!empty($font['subset'])) {
foreach ($font['subset'] as $subset) {
if (!in_array($subset, $subsets)) {
array_push($subsets, $subset);
}
}
}
}
if (!empty($subsets)) {
$link.= "&subset=" . implode(',', $subsets);
}
return "'" . $link . "'";
}
function output() {
$font = $this->value;
// Shim out old arg to new
if (isset($this->field['all_styles']) && !empty($this->field['all_styles'])) {
$this->field['all-styles'] = $this->field['all_styles'];
unset ($this->field['all_styles']);
}
// Check for font-backup. If it's set, stick it on a variabhle for
// later use.
if (!empty($font['font-family']) && !empty($font['font-backup'])) {
$font['font-family'] = str_replace(', ' . $font['font-backup'], '', $font['font-family']);
$fontBackup = ',' . $font['font-backup'];
}
$style = '';
if (!empty($font)) {
foreach ($font as $key => $value) {
if ($key == 'font-options') {
continue;
}
// Check for font-family key
if ('font-family' == $key) {
// Ensure fontBackup isn't empty (we already option
// checked this earlier. No need to do it again.
if (!empty($fontBackup)) {
// Apply the backup font to the font-family element
// via the saved variable. We do this here so it
// doesn't get appended to the Google stuff below.
$value.= $fontBackup;
}
}
if (empty($value) && in_array($key, array(
'font-weight',
'font-style'
))) {
$value = "normal";
}
if ($key == "google" || $key == "subsets" || $key == "font-backup" || empty($value)) {
continue;
}
$style.= $key . ':' . $value . ';';
}
if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) {
$style .= 'opacity: 1;visibility: visible;-webkit-transition: opacity 0.24s ease-in-out;-moz-transition: opacity 0.24s ease-in-out;transition: opacity 0.24s ease-in-out;';
}
}
if (!empty($style)) {
if (!empty($this->field['output']) && is_array($this->field['output'])) {
$keys = implode(",", $this->field['output']);
$this->parent->outputCSS.= $keys . "{" . $style . '}';
if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) {
$key_string = "";
$key_string_ie = "";
foreach ( $this->field['output'] as $value ) {
$key_string .= ".wf-loading " . $value . ',';
$key_string_ie .= ".ie.wf-loading " . $value . ',';
}
$this->parent->outputCSS .= $key_string . "{opacity: 0;}";
$this->parent->outputCSS .= $key_string_ie . "{visibility: hidden;}";
}
}
if (!empty($this->field['compiler']) && is_array($this->field['compiler'])) {
$keys = implode(",", $this->field['compiler']);
$this->parent->compilerCSS.= $keys . "{" . $style . '}';
if ( isset( $this->parent->args['async_typography'] ) && $this->parent->args['async_typography'] ) {
$key_string = "";
$key_string_ie = "";
foreach ( $this->field['compiler'] as $value ) {
$key_string .= ".wf-loading " . $value . ',';
$key_string_ie .= ".ie.wf-loading " . $value . ',';
}
$this->parent->compilerCSS .= $key_string . "{opacity: 0;}";
$this->parent->compilerCSS .= $key_string_ie . "{visibility: hidden;}";
}
}
}
// Google only stuff!
if (!empty($font['font-family']) && !empty($this->field['google']) && filter_var($this->field['google'], FILTER_VALIDATE_BOOLEAN)) {
// Added standard font matching check to avoid output to Google fonts call - kp
// If no custom font array was supplied, the load it with default
// standard fonts.
if (empty($this->field['fonts'])) {
$this->field['fonts'] = $this->std_fonts;
}
// Ensure the fonts array is NOT empty
if (!empty($this->field['fonts'])) {
//Make the font keys in the array lowercase, for case-insensitive matching
$lcFonts = array_change_key_case($this->field['fonts']);
// Rebuild font array with all keys stripped of spaces
$arr = array();
foreach ($lcFonts as $key => $value) {
$key = str_replace(', ', ',', $key);
$arr[$key] = $value;
}
$lcFonts = array_change_key_case($this->field['custom_fonts']);
foreach ($lcFonts as $group => $fontArr) {
foreach($fontArr as $key => $value) {
$arr[ strtolower($key)] = $key;
}
}
$lcFonts = $arr;
unset($arr);
// lowercase chosen font for matching purposes
$lcFont = strtolower($font['font-family']);
// Remove spaces after commas in chosen font for mathcing purposes.
$lcFont = str_replace(', ', ',', $lcFont);
// If the lower cased passed font-family is NOT found in the standard font array
// Then it's a Google font, so process it for output.
if (!array_key_exists($lcFont, $lcFonts)) {
$family = $font['font-family'];
// Strip out spaces in font names and replace with with plus signs
// TODO?: This method doesn't respect spaces after commas, hence the reason
// for the std_font array keys having no spaces after commas. This could be
// fixed with RegEx in the future.
$font['font-family'] = str_replace(' ', '+', $font['font-family']);
// Push data to parent typography variable.
if (empty($this->parent->typography[$font['font-family']])) {
$this->parent->typography[$font['font-family']] = array();
}
if (isset($this->field['all-styles'])) {
if (!isset($font['font-options']) || empty($font['font-options'])) {
$this->getGoogleArray();
if (isset($this->parent->googleArray) && !empty($this->parent->googleArray) && isset($this->parent->googleArray[$family])) {
$font['font-options'] = $this->parent->googleArray[$family];
}
} else {
$font['font-options'] = json_decode($font['font-options'], true);
}
}
if (isset($font['font-options']) && !empty($font['font-options']) && isset($this->field['all-styles']) && filter_var($this->field['all-styles'], FILTER_VALIDATE_BOOLEAN)) {
if (isset($font['font-options']) && !empty($font['font-options']['variants'])) {
if (!isset($this->parent->typography[$font['font-family']]['all-styles']) || empty($this->parent->typography[$font['font-family']]['all-styles'])) {
$this->parent->typography[$font['font-family']]['all-styles'] = array();
foreach ($font['font-options']['variants'] as $variant) {
$this->parent->typography[$font['font-family']]['all-styles'][] = $variant['id'];
}
}
}
}
if (!empty($font['font-weight'])) {
if (empty($this->parent->typography[$font['font-family']]['font-weight']) || !in_array($font['font-weight'], $this->parent->typography[$font['font-family']]['font-weight'])) {
$style = $font['font-weight'];
}
if (!empty($font['font-style'])) {
$style.= $font['font-style'];
}
if (empty($this->parent->typography[$font['font-family']]['font-style']) || !in_array($style, $this->parent->typography[$font['font-family']]['font-style'])) {
$this->parent->typography[$font['font-family']]['font-style'][] = $style;
}
}
if (!empty($font['subsets'])) {
if (empty($this->parent->typography[$font['font-family']]['subset']) || !in_array($font['subsets'], $this->parent->typography[$font['font-family']]['subset'])) {
$this->parent->typography[$font['font-family']]['subset'][] = $font['subsets'];
}
}
} // !array_key_exists
} //!empty fonts array
} // Typography not set
}
private function localizeStdFonts() {
if (false == $this->user_fonts) {
if (isset($this->parent->fonts['std']) && !empty($this->parent->fonts['std'])) {
return;
}
$this->parent->font_groups['std'] = array(
'text' => __('Standard Fonts', 'redux-framework'),
'children' => array(),
);
foreach($this->field['fonts'] as $font => $extra){
$this->parent->font_groups['std']['children'][] = array(
'id' => $font,
'text' => $font,
'data-google' => 'false',
);
}
}
if ($this->field['custom_fonts'] !== false) {
$this->field['custom_fonts'] = apply_filters("redux/{$this->parent->args['opt_name']}/field/typography/custom_fonts", array());
if (!empty($this->field['custom_fonts'])) {
foreach ($this->field['custom_fonts'] as $group => $fonts) {
$this->parent->font_groups['customfonts'] = array(
'text' => $group,
'children' => array(),
);
foreach ($fonts as $family => $v) {
$this->parent->font_groups['customfonts']['children'][] = array(
'id' => $family,
'text' => $family,
'data-google' => 'false',
);
}
}
}
}
}
/**
*
* Construct the google array from the stored JSON/HTML
*
*/
function getGoogleArray() {
// Is already present?
if ((isset($this->parent->fonts['google']) && !empty($this->parent->fonts['google'])) || isset($this->parent->fonts['google']) && $this->parent->fonts['google'] == false) {
return;
}
// Weekly update
if (isset($this->field['update_weekly']) && $this->field['update_weekly'] === true && $this->field['google'] === true && !empty($this->parent->args['google_api_key'])) {
if (file_exists($this->google_json)) {
// Keep the fonts updated weekly
$weekback = strtotime(date('jS F Y', time() + (60 * 60 * 24 * -7)));
$last_updated = filemtime($this->google_json);
if ($last_updated < $weekback) {
unlink($this->google_json);
}
}
}
// Initialize the Wordpress filesystem, no more using file_put_contents function
//Redux_Functions::initWpFilesystem();
//global $wp_filesystem;
if (!file_exists($this->google_json)) {
$result = wp_remote_get(apply_filters('redux-google-fonts-api-url', 'https://www.googleapis.com/webfonts/v1/webfonts?key=') . $this->parent->args['google_api_key'], array('sslverify' => false));
if (!is_wp_error($result) && $result['response']['code'] == 200) {
$result = json_decode($result['body']);
foreach ($result->items as $font) {
$this->parent->googleArray[$font->family] = array(
'variants' => $this->getVariants($font->variants),
'subsets' => $this->getSubsets($font->subsets)
);
}
if (!empty($this->parent->googleArray)) {
$param_array = array(
'content' => json_encode($this->parent->googleArray)
);
if ($this->parent->filesystem->execute('put_contents', $this->google_json, $param_array )) {
return;
}
//$wp_filesystem->put_contents($this->google_json, json_encode($this->parent->googleArray), FS_CHMOD_FILE );
}
} //if
}
if (!isset($this->parent->fonts['google']) || empty($this->parent->fonts['google'])) {
//$fonts = json_decode($wp_filesystem->get_contents($this->google_json), true);
$fonts = $this->parent->filesystem->execute('get_contents', $this->google_json );
if ($fonts === true) {
$this->parent->fonts['google'] = false;
return;
} else {
$fonts = json_decode($fonts, true);
}
if (isset($fonts) && !empty($fonts) && is_array($fonts) && $fonts != false) {
$this->parent->fonts['google'] = $fonts;
$this->parent->googleArray = $fonts;
// optgroup
$this->parent->font_groups['google'] = array(
'text' => __('Google Webfonts', 'redux-framework'),
'children' => array(),
);
// options
foreach ($this->parent->fonts['google'] as $font => $extra) {
$this->parent->font_groups['google']['children'][] = array(
'id' => $font,
'text' => $font,
'data-google' => 'true'
);
}
}
}
}
/**
* getSubsets Function.
*
* Clean up the Google Webfonts subsets to be human readable
*
* @since ReduxFramework 0.2.0
*/
private function getSubsets($var) {
$result = array();
foreach ($var as $v) {
if (strpos($v, "-ext")) {
$name = ucfirst(str_replace("-ext", " Extended", $v));
} else {
$name = ucfirst($v);
}
array_push($result, array(
'id' => $v,
'name' => $name
));
}
return array_filter($result);
} //function
/**
* getVariants Function.
*
* Clean up the Google Webfonts variants to be human readable
*
* @since ReduxFramework 0.2.0
*/
private function getVariants($var) {
$result = array();
$italic = array();
foreach ($var as $v) {
$name = "";
if ($v[0] == 1) {
$name = 'Ultra-Light 100';
} else if ($v[0] == 2) {
$name = 'Light 200';
} else if ($v[0] == 3) {
$name = 'Book 300';
} else if ($v[0] == 4 || $v[0] == "r" || $v[0] == "i") {
$name = 'Normal 400';
} else if ($v[0] == 5) {
$name = 'Medium 500';
} else if ($v[0] == 6) {
$name = 'Semi-Bold 600';
} else if ($v[0] == 7) {
$name = 'Bold 700';
} else if ($v[0] == 8) {
$name = 'Extra-Bold 800';
} else if ($v[0] == 9) {
$name = 'Ultra-Bold 900';
}
if ($v == "regular") {
$v = "400";
}
if (strpos($v, "italic") || $v == "italic") {
$name.= " Italic";
$name = trim($name);
if ($v == "italic") {
$v = "400italic";
}
$italic[] = array(
'id' => $v,
'name' => $name
);
} else {
$result[] = array(
'id' => $v,
'name' => $name
);
}
}
foreach ($italic as $item) {
$result[] = $item;
}
return array_filter($result);
} //function
} //class
} //class exists