40    {
   41        static $system_fonts = array(
   42            'caption' => true,
   43            'icon' => true,
   44            'menu' => true,
   45            'message-box' => true,
   46            'small-caption' => true,
   47            'status-bar' => true
   48        );
   49 
   50        
   52        if ($string === '') {
   53            return false;
   54        }
   55 
   56        
   57        $lowercase_string = strtolower($string);
   58        if (isset($system_fonts[$lowercase_string])) {
   59            return $lowercase_string;
   60        }
   61 
   62        $bits = explode(' ', $string); 
   63        $stage = 0; 
   64        $caught = array(); 
   65        $stage_1 = array('font-style', 'font-variant', 'font-weight');
   66        $final = ''; 
   67 
   69            if ($bits[
$i] === 
'') {
 
   70                continue;
   71            }
   72            switch ($stage) {
   73                case 0: 
   74                    foreach ($stage_1 as $validator_name) {
   75                        if (isset($caught[$validator_name])) {
   76                            continue;
   77                        }
   78                        $r = $this->
info[$validator_name]->validate(
 
   82                        );
   85                            $caught[$validator_name] = true;
   86                            break;
   87                        }
   88                    }
   89                    
   90                    if (count($caught) >= 3) {
   91                        $stage = 1;
   92                    }
   94                        break;
   95                    }
   96                case 1: 
   97                    $found_slash = false;
   98                    if (strpos($bits[
$i], 
'/') !== 
false) {
 
   99                        list($font_size, $line_height) =
  100                            explode(
'/', $bits[
$i]);
 
  101                        if ($line_height === '') {
  102                            
  103                            $line_height = false;
  104                            $found_slash = true;
  105                        }
  106                    } else {
  107                        $font_size = $bits[
$i];
 
  108                        $line_height = false;
  109                    }
  110                    $r = $this->
info[
'font-size']->validate(
 
  111                        $font_size,
  114                    );
  117                        
  118                        if ($line_height === false) {
  119                            
  120                            for ($j = 
$i + 1; $j < 
$size; $j++) {
 
  121                                if ($bits[$j] === '') {
  122                                    continue;
  123                                }
  124                                if ($bits[$j] === '/') {
  125                                    if ($found_slash) {
  126                                        return false;
  127                                    } else {
  128                                        $found_slash = true;
  129                                        continue;
  130                                    }
  131                                }
  132                                $line_height = $bits[$j];
  133                                break;
  134                            }
  135                        } else {
  136                            
  137                            $found_slash = true;
  139                        }
  140                        if ($found_slash) {
  142                            $r = $this->
info[
'line-height']->validate(
 
  143                                $line_height,
  146                            );
  149                            }
  150                        }
  151                        $final .= ' ';
  152                        $stage = 2;
  153                        break;
  154                    }
  155                    return false;
  156                case 2: 
  157                    $font_family =
  158                        implode(
' ', array_slice($bits, 
$i, 
$size - 
$i));
 
  159                    $r = $this->
info[
'font-family']->validate(
 
  160                        $font_family,
  163                    );
  166                        
  167                        return rtrim($final);
  168                    }
  169                    return false;
  170            }
  171        }
  172        return false;
  173    }
parseCDATA($string)
Convenience method that parses a string as if it were CDATA.