aspnetcore/src/Microsoft.AspNet.Razor/Parser/HtmlLanguageCharacteristics.cs

135 lines
4.7 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
using Microsoft.AspNet.Razor.Resources;
using Microsoft.AspNet.Razor.Text;
using Microsoft.AspNet.Razor.Tokenizer;
using Microsoft.AspNet.Razor.Tokenizer.Symbols;
namespace Microsoft.AspNet.Razor.Parser
{
public class HtmlLanguageCharacteristics : LanguageCharacteristics<HtmlTokenizer, HtmlSymbol, HtmlSymbolType>
{
private static readonly HtmlLanguageCharacteristics _instance = new HtmlLanguageCharacteristics();
private HtmlLanguageCharacteristics()
{
}
public static HtmlLanguageCharacteristics Instance
{
get { return _instance; }
}
public override string GetSample(HtmlSymbolType type)
{
switch (type)
{
case HtmlSymbolType.Text:
return RazorResources.HtmlSymbol_Text;
case HtmlSymbolType.WhiteSpace:
return RazorResources.HtmlSymbol_WhiteSpace;
case HtmlSymbolType.NewLine:
return RazorResources.HtmlSymbol_NewLine;
case HtmlSymbolType.OpenAngle:
return "<";
case HtmlSymbolType.Bang:
return "!";
case HtmlSymbolType.Solidus:
return "/";
case HtmlSymbolType.QuestionMark:
return "?";
case HtmlSymbolType.DoubleHyphen:
return "--";
case HtmlSymbolType.LeftBracket:
return "[";
case HtmlSymbolType.CloseAngle:
return ">";
case HtmlSymbolType.RightBracket:
return "]";
case HtmlSymbolType.Equals:
return "=";
case HtmlSymbolType.DoubleQuote:
return "\"";
case HtmlSymbolType.SingleQuote:
return "'";
case HtmlSymbolType.Transition:
return "@";
case HtmlSymbolType.Colon:
return ":";
case HtmlSymbolType.RazorComment:
return RazorResources.HtmlSymbol_RazorComment;
case HtmlSymbolType.RazorCommentStar:
return "*";
case HtmlSymbolType.RazorCommentTransition:
return "@";
default:
return RazorResources.Symbol_Unknown;
}
}
public override HtmlTokenizer CreateTokenizer(ITextDocument source)
{
return new HtmlTokenizer(source);
}
public override HtmlSymbolType FlipBracket(HtmlSymbolType bracket)
{
switch (bracket)
{
case HtmlSymbolType.LeftBracket:
return HtmlSymbolType.RightBracket;
case HtmlSymbolType.OpenAngle:
return HtmlSymbolType.CloseAngle;
case HtmlSymbolType.RightBracket:
return HtmlSymbolType.LeftBracket;
case HtmlSymbolType.CloseAngle:
return HtmlSymbolType.OpenAngle;
default:
#if NET45
Debug.Fail("FlipBracket must be called with a bracket character");
#endif
return HtmlSymbolType.Unknown;
}
}
public override HtmlSymbol CreateMarkerSymbol(SourceLocation location)
{
return new HtmlSymbol(location, String.Empty, HtmlSymbolType.Unknown);
}
public override HtmlSymbolType GetKnownSymbolType(KnownSymbolType type)
{
switch (type)
{
case KnownSymbolType.CommentStart:
return HtmlSymbolType.RazorCommentTransition;
case KnownSymbolType.CommentStar:
return HtmlSymbolType.RazorCommentStar;
case KnownSymbolType.CommentBody:
return HtmlSymbolType.RazorComment;
case KnownSymbolType.Identifier:
return HtmlSymbolType.Text;
case KnownSymbolType.Keyword:
return HtmlSymbolType.Text;
case KnownSymbolType.NewLine:
return HtmlSymbolType.NewLine;
case KnownSymbolType.Transition:
return HtmlSymbolType.Transition;
case KnownSymbolType.WhiteSpace:
return HtmlSymbolType.WhiteSpace;
default:
return HtmlSymbolType.Unknown;
}
}
protected override HtmlSymbol CreateSymbol(SourceLocation location, string content, HtmlSymbolType type, IEnumerable<RazorError> errors)
{
return new HtmlSymbol(location, content, type, errors);
}
}
}