diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin index 449e65e763..90c23e6a5b 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin @@ -95,5 +95,9 @@ id="CSharp.Razor" class="ICSharpCode.AspNet.Mvc.Folding.CSharpRazorLanguageBinding" extensions=".cshtml" /> + diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj index 0f637106b2..4baa65ba08 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj @@ -140,6 +140,7 @@ + diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs index 20599d2a16..228c97d5ad 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs @@ -10,7 +10,7 @@ namespace ICSharpCode.AspNet.Mvc.Folding public CSharpRazorLanguageBinding() : base( new TextEditorWithParseInformationFoldingFactory(), - new RazorFoldGeneratorFactory("cshtml")) + new RazorFoldGeneratorFactory(".cshtml")) { } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorFoldGeneratorFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorFoldGeneratorFactory.cs index 43a1b219f8..2bf9878913 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorFoldGeneratorFactory.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorFoldGeneratorFactory.cs @@ -7,17 +7,17 @@ namespace ICSharpCode.AspNet.Mvc.Folding { public class RazorFoldGeneratorFactory : IFoldGeneratorFactory { - public RazorFoldGeneratorFactory(string extension) + public RazorFoldGeneratorFactory(string fileExtension) { - this.Extension = extension; + this.FileExtension = fileExtension; } - string Extension { get; set; } + string FileExtension { get; set; } public IFoldGenerator CreateFoldGenerator(ITextEditorWithParseInformationFolding textEditor) { return new ScheduledFoldGenerator( - new FoldGenerator(textEditor, new RazorHtmlFoldParser(Extension))); + new FoldGenerator(textEditor, new RazorHtmlFoldParser(FileExtension))); } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReader.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReader.cs index 3888cb6e3f..75e7dd028f 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReader.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReader.cs @@ -10,8 +10,8 @@ namespace ICSharpCode.AspNet.Mvc.Folding { RazorMarkupCharacterReader reader; - public RazorHtmlReader(string html) - : this(new RazorMarkupCharacterReader(html)) + public RazorHtmlReader(string html, string fileExtension) + : this(new RazorMarkupCharacterReader(html, fileExtension)) { } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReaderFactory.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReaderFactory.cs index 8d5556a91c..cceb7210b6 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReaderFactory.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReaderFactory.cs @@ -7,13 +7,16 @@ namespace ICSharpCode.AspNet.Mvc.Folding { public class RazorHtmlReaderFactory : IHtmlReaderFactory { - public RazorHtmlReaderFactory(string extension) + public RazorHtmlReaderFactory(string fileExtension) { + this.FileExtension = fileExtension; } + string FileExtension { get; set; } + public HtmlReader CreateHtmlReader(string html) { - return new RazorHtmlReader(html); + return new RazorHtmlReader(html, FileExtension); } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlSpans.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlSpans.cs index e54dd74cd5..d71fd403fa 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlSpans.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlSpans.cs @@ -13,15 +13,21 @@ namespace ICSharpCode.AspNet.Mvc.Folding public class RazorHtmlSpans { List spans; + RazorCodeLanguage codeLanguage; - public RazorHtmlSpans(string html) + public RazorHtmlSpans(string html, string fileExtension) { + codeLanguage = RazorCodeLanguage.GetLanguageByExtension(fileExtension); ReadHtmlSpans(html); } + public string CodeLanguageName { + get { return codeLanguage.LanguageName; } + } + void ReadHtmlSpans(string html) { - RazorEngineHost razorEngineHost = new RazorEngineHost(RazorCodeLanguage.GetLanguageByExtension(".cshtml")); + RazorEngineHost razorEngineHost = new RazorEngineHost(codeLanguage); RazorTemplateEngine engine = new RazorTemplateEngine(razorEngineHost); ParserResults results = engine.ParseTemplate(new StringReader(html)); spans = new List(results.Document.Flatten()); diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorMarkupCharacterReader.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorMarkupCharacterReader.cs index 2138a0205a..be72fb0d2e 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorMarkupCharacterReader.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorMarkupCharacterReader.cs @@ -9,10 +9,10 @@ namespace ICSharpCode.AspNet.Mvc.Folding { RazorHtmlSpans htmlSpans; - public RazorMarkupCharacterReader(string html) + public RazorMarkupCharacterReader(string html, string fileExtension) : base(html) { - htmlSpans = new RazorHtmlSpans(html); + htmlSpans = new RazorHtmlSpans(html, fileExtension); } public bool IsHtml { diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs new file mode 100644 index 0000000000..3fd5838a1b --- /dev/null +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs @@ -0,0 +1,17 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace ICSharpCode.AspNet.Mvc.Folding +{ + public class VisualBasicRazorLanguageBinding : HtmlLanguageBinding + { + public VisualBasicRazorLanguageBinding() + : base( + new TextEditorWithParseInformationFoldingFactory(), + new RazorFoldGeneratorFactory(".vbhtml")) + { + } + } +} diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj b/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj index 7c65016868..13e2663919 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj @@ -116,6 +116,7 @@ + diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlReaderTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlReaderTests.cs index f6010184b1..b75671f6b7 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlReaderTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlReaderTests.cs @@ -14,7 +14,7 @@ namespace AspNet.Mvc.Tests.Folding void CreateHtmlReader(string html) { - htmlReader = new RazorHtmlReader(html); + htmlReader = new RazorHtmlReader(html, ".cshtml"); } [Test] @@ -32,7 +32,5 @@ namespace AspNet.Mvc.Tests.Folding Assert.AreEqual("p", value); } - - } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlSpansTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlSpansTests.cs new file mode 100644 index 0000000000..4584da0f43 --- /dev/null +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlSpansTests.cs @@ -0,0 +1,36 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.AspNet.Mvc.Folding; +using NUnit.Framework; + +namespace AspNet.Mvc.Tests.Folding +{ + [TestFixture] + public class RazorHtmlSpansTests + { + RazorHtmlSpans htmlSpans; + + void CreateHtmlSpans(string fileExtension) + { + htmlSpans = new RazorHtmlSpans(String.Empty, fileExtension); + } + + [Test] + public void CodeLanguageName_CSharpRazorFileExtension_ReturnsCSharp() + { + CreateHtmlSpans(".cshtml"); + + Assert.AreEqual("csharp", htmlSpans.CodeLanguageName); + } + + [Test] + public void CodeLanguageName_VisualBasicRazorFileExtension_ReturnsVisualBasicRazorFileExtensionWithoutDot() + { + CreateHtmlSpans(".vbhtml"); + + Assert.AreEqual("vb", htmlSpans.CodeLanguageName); + } + } +} diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorMarkupCharacterReaderTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorMarkupCharacterReaderTests.cs index 326da1c5a5..108111d51c 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorMarkupCharacterReaderTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorMarkupCharacterReaderTests.cs @@ -12,15 +12,20 @@ namespace AspNet.Mvc.Tests.Folding { RazorMarkupCharacterReader reader; - void CreateReader(string html) + void CreateCSharpReader(string html) { - reader = new RazorMarkupCharacterReader(html); + reader = new RazorMarkupCharacterReader(html, ".cshtml"); + } + + void CreateVisualBasicReader(string html) + { + reader = new RazorMarkupCharacterReader(html, ".vbhtml"); } [Test] public void IsHtml_CurrentCharacterIsAtStartOfHtml_ReturnsTrue() { - CreateReader("
"); + CreateCSharpReader("
"); bool htmlCharacterRead = reader.IsHtml; @@ -28,9 +33,9 @@ namespace AspNet.Mvc.Tests.Folding } [Test] - public void IsHtml_FirstCharacterReadIsRazorTransitionSymbol_ReturnsFalse() + public void IsHtml_FirstCharacterReadIsCSharpRazorTransitionSymbol_ReturnsFalse() { - CreateReader("@model"); + CreateCSharpReader("@model"); reader.Read(); bool result = reader.IsHtml; @@ -39,9 +44,9 @@ namespace AspNet.Mvc.Tests.Folding } [Test] - public void IsHtml_ReadFirstRazorTransitionSymbolAfterParagraphTag_ReturnsFalse() + public void IsHtml_ReadFirstCSharpRazorTransitionSymbolAfterParagraphTag_ReturnsFalse() { - CreateReader("

@model.Message

"); + CreateCSharpReader("

@model.Message

"); reader.ReadCharacters(4); bool htmlCharacterRead = reader.IsHtml; @@ -50,14 +55,54 @@ namespace AspNet.Mvc.Tests.Folding } [Test] - public void IsHtml_ReadFirstCharacterAfterRazorTransitionSymbol_ReturnsFalse() + public void IsHtml_ReadFirstCharacterAfterCSharpRazorTransitionSymbol_ReturnsFalse() { - CreateReader("

@model.Message

"); + CreateCSharpReader("

@model.Message

"); reader.ReadCharacters(5); bool htmlCharacterRead = reader.IsHtml; Assert.IsFalse(htmlCharacterRead); } + + [Test] + public void IsHtml_FirstCharacterReadIsVisualBasicRazorTransitionSymbol_ReturnsFalse() + { + CreateVisualBasicReader("@ModelType"); + reader.Read(); + + bool result = reader.IsHtml; + + Assert.IsFalse(result); + } + + [Test] + public void IsHtml_SecondCharacterReadIsVisualBasicIfStatement_ReturnsFalse() + { + CreateVisualBasicReader("@If IsPost Then"); + reader.Read(); + reader.Read(); + + bool result = reader.IsHtml; + + Assert.IsFalse(result); + } + + [Test] + public void IsHtml_SecondHtmlCharacterAfterVisualBasicCodeBlockRead_ReturnsTrue() + { + string html = + "@Code\r\n" + + "Dim a As Int\r\n" + + "End Code\r\n" + + "

"; + + CreateVisualBasicReader(html); + reader.ReadCharacters(32); + + bool result = reader.IsHtml; + + Assert.IsTrue(result); + } } }