Skip to content

Commit 73dd8f3

Browse files
committed
Added charset and unicode support
1 parent 2c662ef commit 73dd8f3

File tree

3 files changed

+43
-21
lines changed

3 files changed

+43
-21
lines changed

src/Css/Processor.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class Processor
1111
* Get the rules from a given CSS-string
1212
*
1313
* @param string $css
14-
* @param array $existingRules
14+
* @param array $existingRules
1515
* @return Rule[]
1616
*/
1717
public function getRules($css, $existingRules = [])
@@ -23,6 +23,17 @@ public function getRules($css, $existingRules = [])
2323
return $rulesProcessor->convertArrayToObjects($rulesByMediaQuery, $existingRules);
2424
}
2525

26+
public function getCharset($css)
27+
{
28+
preg_match_all('/@charset "[^"]++";/', $css, $matches);
29+
30+
if ($charset = reset($matches)) {
31+
return reset($charset);
32+
}
33+
34+
return null;
35+
}
36+
2637
/**
2738
* Get the CSS from the style-tags in the given HTML-string
2839
*

src/CssFromHTMLExtractor.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public function getHtmlStore()
5959
public function addBaseRules($sourceCss)
6060
{
6161
$this->rules = $this->processor->getRules($sourceCss, $this->rules);
62+
$this->getCssStore()->setCharset($this->processor->getCharset($sourceCss));
6263
}
6364

6465
public function buildExtractedRuleSet()

src/CssStore.php

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ class CssStore
1010
/** @var array Property objects, grouped by selector */
1111
private $styles = [];
1212

13+
/** @var string|null */
14+
private $charset;
15+
1316
public function addCssStyles($cssRules)
1417
{
1518
$this->styles = array_merge($this->styles, $cssRules);
@@ -38,19 +41,20 @@ public function compileStyles()
3841
$styles = $this->prepareStylesForProcessing();
3942

4043

44+
$prefix = is_null($this->charset) ? '' : $this->charset;
4145

42-
return join(
43-
'',
44-
array_map(
45-
function ($styleGroup) {
46-
$media = key($styleGroup);
47-
$rules = reset($styleGroup);
46+
return $prefix . join(
47+
'',
48+
array_map(
49+
function ($styleGroup) {
50+
$media = key($styleGroup);
51+
$rules = reset($styleGroup);
4852

49-
return $this->parseMediaToString($media, $rules);
50-
},
51-
$styles
52-
)
53-
);
53+
return $this->parseMediaToString($media, $rules);
54+
},
55+
$styles
56+
)
57+
);
5458
}
5559

5660
/**
@@ -68,8 +72,7 @@ private function parseMediaToString($media, array $rules)
6872
join(
6973
'',
7074
array_map(
71-
function ($rule) {
72-
/** @var Rule $rule */
75+
function (Rule $rule) {
7376
return $this->parsePropertiesToString($rule->getSelector(), $rule->getProperties());
7477
},
7578
$rules
@@ -78,16 +81,15 @@ function ($rule) {
7881

7982
}
8083

81-
return "$media { ".join(
84+
return "$media { " . join(
8285
'',
8386
array_map(
84-
function ($rule) {
85-
/** @var Rule $rule */
87+
function (Rule $rule) {
8688
return $this->parsePropertiesToString($rule->getSelector(), $rule->getProperties());
8789
},
8890
$rules
8991
)
90-
)."}";
92+
) . "}";
9193

9294

9395
}
@@ -101,16 +103,18 @@ function ($rule) {
101103
*/
102104
private function parsePropertiesToString($selector, array $properties)
103105
{
104-
return "$selector { ".
106+
$selector = mb_convert_encoding($selector, 'unicode');
107+
108+
return "$selector { " .
105109
join(
106110
'',
107111
array_map(
108112
function (Property $property) {
109-
return $property->getName().': '.$property->getValue().';';
113+
return mb_convert_encoding($property->getName(), 'unicode') . ': ' . mb_convert_encoding($property->getValue(), 'unicode') . ';';
110114
},
111115
$properties
112116
)
113-
).
117+
) .
114118
"}";
115119
}
116120

@@ -127,4 +131,10 @@ private function prepareStylesForProcessing()
127131

128132
return $groupedStyles;
129133
}
134+
135+
public function setCharset($charset)
136+
{
137+
$this->charset = $charset;
138+
139+
}
130140
}

0 commit comments

Comments
 (0)