ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
HTMLPurifier_AttrDef_CSS_Font Class Reference

Validates shorthand CSS property font. More...

+ Inheritance diagram for HTMLPurifier_AttrDef_CSS_Font:
+ Collaboration diagram for HTMLPurifier_AttrDef_CSS_Font:

Public Member Functions

 __construct ($config)
 
 validate ($string, $config, $context)
 
- Public Member Functions inherited from HTMLPurifier_AttrDef
 validate ($string, $config, $context)
 Validates and cleans passed string according to a definition. More...
 
 parseCDATA ($string)
 Convenience method that parses a string as if it were CDATA. More...
 
 make ($string)
 Factory method for creating this class from a string. More...
 

Protected Attributes

 $info = array()
 Local copy of validators HTMLPurifier_AttrDef[]. More...
 

Additional Inherited Members

- Data Fields inherited from HTMLPurifier_AttrDef
 $minimized = false
 Tells us whether or not an HTML attribute is minimized. More...
 
 $required = false
 Tells us whether or not an HTML attribute is required. More...
 
- Protected Member Functions inherited from HTMLPurifier_AttrDef
 mungeRgb ($string)
 Removes spaces from rgb(0, 0, 0) so that shorthand CSS properties work properly. More...
 
 expandCSSEscape ($string)
 Parses a possibly escaped CSS string and returns the "pure" version of it. More...
 

Detailed Description

Validates shorthand CSS property font.

Definition at line 6 of file Font.php.

Constructor & Destructor Documentation

◆ __construct()

HTMLPurifier_AttrDef_CSS_Font::__construct (   $config)
Parameters
HTMLPurifier_Config$config

Definition at line 22 of file Font.php.

References $config.

23  {
24  $def = $config->getCSSDefinition();
25  $this->info['font-style'] = $def->info['font-style'];
26  $this->info['font-variant'] = $def->info['font-variant'];
27  $this->info['font-weight'] = $def->info['font-weight'];
28  $this->info['font-size'] = $def->info['font-size'];
29  $this->info['line-height'] = $def->info['line-height'];
30  $this->info['font-family'] = $def->info['font-family'];
31  }

Member Function Documentation

◆ validate()

HTMLPurifier_AttrDef_CSS_Font::validate (   $string,
  $config,
  $context 
)
Parameters
string$string
HTMLPurifier_Config$config
HTMLPurifier_Context$context
Returns
bool|string

Definition at line 39 of file Font.php.

References $config, $r, $size, array, and HTMLPurifier_AttrDef\parseCDATA().

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  // regular pre-processing
51  $string = $this->parseCDATA($string);
52  if ($string === '') {
53  return false;
54  }
55 
56  // check if it's one of the keywords
57  $lowercase_string = strtolower($string);
58  if (isset($system_fonts[$lowercase_string])) {
59  return $lowercase_string;
60  }
61 
62  $bits = explode(' ', $string); // bits to process
63  $stage = 0; // this indicates what we're looking for
64  $caught = array(); // which stage 0 properties have we caught?
65  $stage_1 = array('font-style', 'font-variant', 'font-weight');
66  $final = ''; // output
67 
68  for ($i = 0, $size = count($bits); $i < $size; $i++) {
69  if ($bits[$i] === '') {
70  continue;
71  }
72  switch ($stage) {
73  case 0: // attempting to catch font-style, font-variant or font-weight
74  foreach ($stage_1 as $validator_name) {
75  if (isset($caught[$validator_name])) {
76  continue;
77  }
78  $r = $this->info[$validator_name]->validate(
79  $bits[$i],
80  $config,
81  $context
82  );
83  if ($r !== false) {
84  $final .= $r . ' ';
85  $caught[$validator_name] = true;
86  break;
87  }
88  }
89  // all three caught, continue on
90  if (count($caught) >= 3) {
91  $stage = 1;
92  }
93  if ($r !== false) {
94  break;
95  }
96  case 1: // attempting to catch font-size and perhaps line-height
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  // ooh, there's a space after the slash!
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,
112  $config,
113  $context
114  );
115  if ($r !== false) {
116  $final .= $r;
117  // attempt to catch line-height
118  if ($line_height === false) {
119  // we need to scroll forward
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  // slash already found
137  $found_slash = true;
138  $j = $i;
139  }
140  if ($found_slash) {
141  $i = $j;
142  $r = $this->info['line-height']->validate(
143  $line_height,
144  $config,
145  $context
146  );
147  if ($r !== false) {
148  $final .= '/' . $r;
149  }
150  }
151  $final .= ' ';
152  $stage = 2;
153  break;
154  }
155  return false;
156  case 2: // attempting to catch font-family
157  $font_family =
158  implode(' ', array_slice($bits, $i, $size - $i));
159  $r = $this->info['font-family']->validate(
160  $font_family,
161  $config,
162  $context
163  );
164  if ($r !== false) {
165  $final .= $r . ' ';
166  // processing completed successfully
167  return rtrim($final);
168  }
169  return false;
170  }
171  }
172  return false;
173  }
$size
Definition: RandomTest.php:79
$r
Definition: example_031.php:79
parseCDATA($string)
Convenience method that parses a string as if it were CDATA.
Definition: AttrDef.php:60
Create styles array
The data for the language used.
+ Here is the call graph for this function:

Field Documentation

◆ $info

HTMLPurifier_AttrDef_CSS_Font::$info = array()
protected

Local copy of validators HTMLPurifier_AttrDef[].

Note
If we moved specific CSS property definitions to their own classes instead of having them be assembled at run time by CSSDefinition, this wouldn't be necessary. We'd instantiate our own copies.

Definition at line 17 of file Font.php.


The documentation for this class was generated from the following file: