//////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Method: State Attribute. /// </summary> /// <param name="c"> The char c.</param> /// <returns> /// The Scan.TokenType value. /// </returns> //////////////////////////////////////////////////////////////////////////////////////////////////////////////// private TokenType StateAttribute(char c) { switch (c) { case '>': Scanner.AppendMoveNext(c); _state = _state == State.ScriptAttribute?State.Script: State.Body; return(TokenType.Punctuation); case '/': c = Scanner.AppendMoveNext(c); if (c == '>') { Scanner.AppendMoveNext(c); _state = State.None; } return(TokenType.Punctuation); case '\'': case '"': return(Scanner.ScanDelimited(c, TokenType.String, '\0')); case '\n': return(Scanner.ScanEol()); } return(char.IsLetter(c) ? Scanner.ScanName(c) : base.ClassifyCharacter(c)); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Method: Block Comment. /// </summary> /// <param name="c"> The char c.</param> /// <returns> /// The SourcePreview.TokenType value. /// </returns> //////////////////////////////////////////////////////////////////////////////////////////////////////////////// private TokenType BlockComment(char c) { while (c != '\0') { switch (c) { case '\n': if (Scanner.Token.Length > 0) { return(TokenType.Comment); } return(Scanner.ScanEol()); case '\r': c = Scanner.MoveNext(); break; default: if (Scanner.Accept(Scanner.Language.BlockComment[1], false)) { _inBlockComment = false; return(TokenType.Comment); } c = Scanner.AppendMoveNext(c); break; } } return(TokenType.Comment); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Method: Classify Possible Tag. /// </summary> /// <param name="c"> The char c.</param> /// <returns> /// The Scan.TokenType value. /// </returns> //////////////////////////////////////////////////////////////////////////////////////////////////////////////// private TokenType ClassifyPossibleTag(char c) { while (c != '\0') { switch (c) { case '\n': return(Scanner.Token.Length > 0 ? (TokenType)TokenType.Default : Scanner.ScanEol()); case '<': if (Scanner.Token.Length > 0) { return(TokenType.Default); } c = Scanner.AppendMoveNext(c); if (c == '/') { // end tag Scanner.AppendMoveNext(c); _state = State.Tag; return(TokenType.Punctuation); } else if (c == '!') { // <!DOCTYPE xxxxxx > // <!-- xxxxxxx --> c = Scanner.AppendMoveNext(c); if (c == '-' && Scanner.PeekNextChar() == '-') { // looking for ending comment, treat as comment _state = State.Comment; return(ScanComment(c)); } _state = State.Tag; return(TokenType.Punctuation); } else { // start tag _state = State.Tag; return(TokenType.Punctuation); } default: c = Scanner.AppendMoveNext(c); break; } } return(TokenType.End); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Method: Scan Comment. Either entering a comment or in a comment after Eol /// </summary> /// <returns> /// The Scan.TokenType value. /// </returns> //////////////////////////////////////////////////////////////////////////////////////////////////////////////// private TokenType ScanComment(char c) { while (c != '\0' && c != '\n') { if (Scanner.Accept("-->", false)) { _state = State.None; break; } c = Scanner.AppendMoveNext(c); } return(TokenType.Comment); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// Method: Scan Script. /// </summary> /// <param name="c"> The char c.</param> /// <returns> /// The Scan.TokenType value. /// </returns> //////////////////////////////////////////////////////////////////////////////////////////////////////////////// private TokenType ScanScript(char c) { while (c != '\0' && c != '\n') { if (c == '<') { c = Scanner.AppendMoveNext(c); if (c == '/') { c = Scanner.AppendMoveNext(c); Scanner.ScanName(c); c = Scanner.CurrentChar; if (c == '>') { Scanner.AppendMoveNext(c); _state = State.None; break; } } } c = Scanner.AppendMoveNext(c); } return(TokenType.Keyword3); }