summaryrefslogtreecommitdiffstats
path: root/php-PHP-CSS-Parser-git.patch
blob: ae6b02c0ef188e96127c407f47e17e34d76ffc15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
From 21ac4d9fb408f803aac180503c41f3e4648f575f Mon Sep 17 00:00:00 2001
From: Paul Annekov <paul.annekov@gmail.com>
Date: Tue, 29 Oct 2013 23:44:25 +0200
Subject: [PATCH] Fixed comments parsing and test added

---
 lib/Sabberworm/CSS/Parser.php       |  9 +++++----
 tests/Sabberworm/CSS/ParserTest.php |  8 ++++++++
 tests/files/comments.css            | 16 ++++++++++++++++
 3 files changed, 29 insertions(+), 4 deletions(-)
 create mode 100644 tests/files/comments.css

diff --git a/lib/Sabberworm/CSS/Parser.php b/lib/Sabberworm/CSS/Parser.php
index 7a64074..4445322 100644
--- a/lib/Sabberworm/CSS/Parser.php
+++ b/lib/Sabberworm/CSS/Parser.php
@@ -546,10 +546,10 @@ private function consumeWhiteSpace() {
 
 	private function consumeComment() {
 		if ($this->comes('/*')) {
-			$this->consume(2);
-			while ($this->consumeUntil('*', false, true)) {
-				if ($this->comes('/')) {
-					$this->consume(1);
+			$this->consume(1);
+			while ($this->consume(1) !== '') {
+				if ($this->comes('*/')) {
+					$this->consume(2);
 					return true;
 				}
 			}
@@ -567,6 +567,7 @@ private function consumeUntil($aEnd, $bIncludeEnd = false, $consumeEnd = false)
 		$start = $this->iCurrentPosition;
 
 		while (($char = $this->consume(1)) !== '') {
+			$this->consumeComment();
 			if (in_array($char, $aEnd)) {
 				if ($bIncludeEnd) {
 					$out .= $char;
diff --git a/tests/Sabberworm/CSS/ParserTest.php b/tests/Sabberworm/CSS/ParserTest.php
index 3b38770..aaf11a6 100644
--- a/tests/Sabberworm/CSS/ParserTest.php
+++ b/tests/Sabberworm/CSS/ParserTest.php
@@ -343,6 +343,14 @@ function testListValueRemoval() {
 }#unrelated {other: yes;}' . "\n", $oDoc->__toString());
 	}
 
+	function testComments() {
+		$oDoc = $this->parsedStructureForFile('comments');
+		$sExpected = '@import url("some/url.css") screen;.foo, #bar {background-color: #000;}
+@media screen {#foo.bar {position: absolute;}
+}';
+		$this->assertSame($sExpected, $oDoc->__toString());
+	}
+
 	function parsedStructureForFile($sFileName) {
 		$sFile = dirname(__FILE__) . '/../../files' . DIRECTORY_SEPARATOR . "$sFileName.css";
 		$oParser = new Parser(file_get_contents($sFile));
diff --git a/tests/files/comments.css b/tests/files/comments.css
new file mode 100644
index 0000000..d30bc53
--- /dev/null
+++ b/tests/files/comments.css
@@ -0,0 +1,16 @@
+/**
+ * Comments Hell.
+ */
+@import /* Number 1 */"some/url.css"/* Number 2 */ screen/* Number 3 */;
+
+.foo, /* Number 4 */          #bar/* Number 5 */ {
+    background-color/* Number 6 */: #000/* Number 7 */;
+}
+
+@media /* Number 8 */screen /* Number 9 */{
+    /** Number 10 **/
+    #foo.bar {
+        position: absolute;/**/
+    }
+}
+/** Number 11 **/
\ No newline at end of file
-- 
1.8.5.1