define(function(require, exports, module) {
"use strict";

var oop = require("../lib/oop");
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var RubyExports = require("./ruby_highlight_rules");
var RubyHighlightRules = RubyExports.RubyHighlightRules;

var HamlHighlightRules = function() {

    // regexp must not have capturing parentheses. Use (?:) instead.
    // regexps are ordered -> the first match is used

    this.$rules = 
        {
    "start": [
        {
            "token" : "punctuation.section.comment",
            "regex" : /^\s*\/.*/
        },
        {
            "token" : "punctuation.section.comment",
            "regex" : /^\s*#.*/
        },
        {
            "token": "string.quoted.double",
            "regex": "==.+?=="
        },
        {
            "token": "keyword.other.doctype",
            "regex": "^!!!\\s*(?:[a-zA-Z0-9-_]+)?"
        },
        RubyExports.qString,
        RubyExports.qqString,
        RubyExports.tString,
        {
            "token": ["entity.name.tag.haml"],
            "regex": /^\s*%[\w:]+/,
            "next": "tag_single"
        },
        {
            "token": [ "meta.escape.haml" ],
            "regex": "^\\s*\\\\."
        },
        RubyExports.constantNumericHex,
        RubyExports.constantNumericFloat,
        
        RubyExports.constantOtherSymbol,
        {
            "token": "text",
            "regex": "=|-|~",
            "next": "embedded_ruby"
        }
    ],
    "tag_single": [
        {
            "token": "entity.other.attribute-name.class.haml",
            "regex": "\\.[\\w-]+"
        },
        {
            "token": "entity.other.attribute-name.id.haml",
            "regex": "#[\\w-]+"
        },
        {
            "token": "punctuation.section",
            "regex": "\\{",
            "next": "section"
        },
        
        RubyExports.constantOtherSymbol,
        
        {
            "token": "text",
            "regex": /\s/,
            "next": "start"
        },
        {
            "token": ["text", "punctuation"],
            "regex": "($)|((?!\\.|#|\\{|\\[|=|-|~|\\/))",
            "next": "start"
        }
    ],
    "section": [
        RubyExports.constantOtherSymbol,
        
        RubyExports.qString,
        RubyExports.qqString,
        RubyExports.tString,
        
        RubyExports.constantNumericHex,
        RubyExports.constantNumericFloat,
        {
            "token": "punctuation.section",
            "regex": "\\}",
            "next": "start"
        } 
    ],
    "embedded_ruby": [ 
        RubyExports.constantNumericHex,
        RubyExports.constantNumericFloat,
        {
                token : "support.class", // class name
                regex : "[A-Z][a-zA-Z_\\d]+"
        },    
        {
            "token" : new RubyHighlightRules().getKeywords(),
            "regex" : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
        },
        {
            "token" : ["keyword", "text", "text"],
            "regex" : "(?:do|\\{)(?: \\|[^|]+\\|)?$",
            "next"  : "start"
        }, 
        {
            "token" : ["text"],
            "regex" : "^$",
            "next"  : "start"
        }, 
        {
            "token" : ["text"],
            "regex" : "^(?!.*\\|\\s*$)",
            "next"  : "start"
        }
    ]
}

};

oop.inherits(HamlHighlightRules, TextHighlightRules);

exports.HamlHighlightRules = HamlHighlightRules;
});
