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
85
86
87
88
89
90
91
92
93
94
95
|
<?php
namespace Sabberworm\CSS\Value;
use Sabberworm\CSS\OutputFormat; use Sabberworm\CSS\Parsing\ParserState; use Sabberworm\CSS\Parsing\SourceException; use Sabberworm\CSS\Parsing\UnexpectedEOFException; use Sabberworm\CSS\Parsing\UnexpectedTokenException;
/** * This class represents URLs in CSS. `URL`s always output in `URL("")` notation. */ class URL extends PrimitiveValue { /** * @var CSSString */ private $oURL;
/** * @param int $iLineNo */ public function __construct(CSSString $oURL, $iLineNo = 0) { parent::__construct($iLineNo); $this->oURL = $oURL; }
/** * @return URL * * @throws SourceException * @throws UnexpectedEOFException * @throws UnexpectedTokenException */ public static function parse(ParserState $oParserState) { $oAnchor = $oParserState->anchor(); $sIdentifier = ''; for ($i = 0; $i < 3; $i++) { $sChar = $oParserState->parseCharacter(true); if ($sChar === null) { break; } $sIdentifier .= $sChar; } $bUseUrl = $oParserState->streql($sIdentifier, 'url'); if ($bUseUrl) { $oParserState->consumeWhiteSpace(); $oParserState->consume('('); } else { $oAnchor->backtrack(); } $oParserState->consumeWhiteSpace(); $oResult = new URL(CSSString::parse($oParserState), $oParserState->currentLine()); if ($bUseUrl) { $oParserState->consumeWhiteSpace(); $oParserState->consume(')'); } return $oResult; }
/** * @return void */ public function setURL(CSSString $oURL) { $this->oURL = $oURL; }
/** * @return CSSString */ public function getURL() { return $this->oURL; }
/** * @return string */ public function __toString() { return $this->render(new OutputFormat()); }
/** * @return string */ public function render(OutputFormat $oOutputFormat) { return "url({$this->oURL->render($oOutputFormat)})"; } }
|