private int InterpretTagIdOrClass(TokenInfo info) { switch(RestOfLine[0]) { case '#': SetColor(info, HamlTokenColor.HamlTagId); break; case '.': SetColor(info, HamlTokenColor.HamlTagClass); break; } var match = Regex.Match(RestOfLine.Substring(1), @"[\s|\.|=|\{]"); if (!match.Success) return RestOfLine.Length; int matchCount = match.Index + 1; if (match.Value == ".") _state = HamlState.InTag; else { _state = "-={".Contains(match.Value) ? HamlState.AfterCodeTag : HamlState.AfterNonCodeTag; } return matchCount; }
private int InterpretAfterCodeTag(TokenInfo info) { _state = HamlState.AfterCodeTag; SetColor(info, HamlTokenColor.HamlCode); var match = Regex.Match(RestOfLine, @"//|"""); if (!match.Success) return RestOfLine.Length; if (match.Index == 0) { switch (match.Value) { case "//": SetColor(info, HamlTokenColor.CsComment); return RestOfLine.Length; case "\"": SetColor(info, HamlTokenColor.CsString); var endOfString = Regex.Match(RestOfLine.Substring(1), "\""); if (endOfString.Success) return endOfString.Index + 2; return RestOfLine.Length; } } return match.Index; }
private int InterpretTag(TokenInfo info) { SetColor(info, HamlTokenColor.HamlTag); var match = Regex.Match(RestOfLine, @"\s*[\s|=|\-|\{|#]"); if (!match.Success) return RestOfLine.Length; int matchCount = match.Index; switch (match.Value.Trim()) { case "=": case "-": case "{": _state = HamlState.AfterCodeTag; break; case "#": _state = HamlState.InTag; break; default: _state = HamlState.AfterNonCodeTag; break; } return matchCount; }
/// <summary> /// This method is used to set the line to be parsed. /// </summary> /// <param name="source">The line to parse.</param> /// <param name="offset">The character offset in the line to start parsing from. /// You have to pay attention to this value.</param> public void SetSource(string source, int offset) { _currentLine = source; _currentPos = offset; _state = GetCurrentLineState(); }