var TYPE = require('../../tokenizer').TYPE; 
 | 
var rawMode = require('./Raw').mode; 
 | 
  
 | 
var LEFTCURLYBRACKET = TYPE.LeftCurlyBracket; 
 | 
  
 | 
function consumeRaw(startToken) { 
 | 
    return this.Raw(startToken, rawMode.leftCurlyBracket, true); 
 | 
} 
 | 
  
 | 
function consumePrelude() { 
 | 
    var prelude = this.SelectorList(); 
 | 
  
 | 
    if (prelude.type !== 'Raw' && 
 | 
        this.scanner.eof === false && 
 | 
        this.scanner.tokenType !== LEFTCURLYBRACKET) { 
 | 
        this.error(); 
 | 
    } 
 | 
  
 | 
    return prelude; 
 | 
} 
 | 
  
 | 
module.exports = { 
 | 
    name: 'Rule', 
 | 
    structure: { 
 | 
        prelude: ['SelectorList', 'Raw'], 
 | 
        block: ['Block'] 
 | 
    }, 
 | 
    parse: function() { 
 | 
        var startToken = this.scanner.tokenIndex; 
 | 
        var startOffset = this.scanner.tokenStart; 
 | 
        var prelude; 
 | 
        var block; 
 | 
  
 | 
        if (this.parseRulePrelude) { 
 | 
            prelude = this.parseWithFallback(consumePrelude, consumeRaw); 
 | 
        } else { 
 | 
            prelude = consumeRaw.call(this, startToken); 
 | 
        } 
 | 
  
 | 
        block = this.Block(true); 
 | 
  
 | 
        return { 
 | 
            type: 'Rule', 
 | 
            loc: this.getLocation(startOffset, this.scanner.tokenStart), 
 | 
            prelude: prelude, 
 | 
            block: block 
 | 
        }; 
 | 
    }, 
 | 
    generate: function(node) { 
 | 
        this.node(node.prelude); 
 | 
        this.node(node.block); 
 | 
    }, 
 | 
    walkContext: 'rule' 
 | 
}; 
 |