| var isWhiteSpace = require('../../tokenizer').isWhiteSpace; | 
| var cmpStr = require('../../tokenizer').cmpStr; | 
| var TYPE = require('../../tokenizer').TYPE; | 
|   | 
| var FUNCTION = TYPE.Function; | 
| var URL = TYPE.Url; | 
| var RIGHTPARENTHESIS = TYPE.RightParenthesis; | 
|   | 
| // <url-token> | <function-token> <string> ) | 
| module.exports = { | 
|     name: 'Url', | 
|     structure: { | 
|         value: ['String', 'Raw'] | 
|     }, | 
|     parse: function() { | 
|         var start = this.scanner.tokenStart; | 
|         var value; | 
|   | 
|         switch (this.scanner.tokenType) { | 
|             case URL: | 
|                 var rawStart = start + 4; | 
|                 var rawEnd = this.scanner.tokenEnd - 1; | 
|   | 
|                 while (rawStart < rawEnd && isWhiteSpace(this.scanner.source.charCodeAt(rawStart))) { | 
|                     rawStart++; | 
|                 } | 
|   | 
|                 while (rawStart < rawEnd && isWhiteSpace(this.scanner.source.charCodeAt(rawEnd - 1))) { | 
|                     rawEnd--; | 
|                 } | 
|   | 
|                 value = { | 
|                     type: 'Raw', | 
|                     loc: this.getLocation(rawStart, rawEnd), | 
|                     value: this.scanner.source.substring(rawStart, rawEnd) | 
|                 }; | 
|   | 
|                 this.eat(URL); | 
|                 break; | 
|   | 
|             case FUNCTION: | 
|                 if (!cmpStr(this.scanner.source, this.scanner.tokenStart, this.scanner.tokenEnd, 'url(')) { | 
|                     this.error('Function name must be `url`'); | 
|                 } | 
|   | 
|                 this.eat(FUNCTION); | 
|                 this.scanner.skipSC(); | 
|                 value = this.String(); | 
|                 this.scanner.skipSC(); | 
|                 this.eat(RIGHTPARENTHESIS); | 
|                 break; | 
|   | 
|             default: | 
|                 this.error('Url or Function is expected'); | 
|         } | 
|   | 
|         return { | 
|             type: 'Url', | 
|             loc: this.getLocation(start, this.scanner.tokenStart), | 
|             value: value | 
|         }; | 
|     }, | 
|     generate: function(node) { | 
|         this.chunk('url'); | 
|         this.chunk('('); | 
|         this.node(node.value); | 
|         this.chunk(')'); | 
|     } | 
| }; |