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);
+ }
}
}