Browse Source

Add folding for Html in .vbhtml Razor files.

pull/18/head
Matt Ward 14 years ago
parent
commit
c760a9e7d2
  1. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin
  2. 1
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  3. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs
  4. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorFoldGeneratorFactory.cs
  5. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReader.cs
  6. 7
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReaderFactory.cs
  7. 10
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlSpans.cs
  8. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorMarkupCharacterReader.cs
  9. 17
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs
  10. 1
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  11. 4
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlReaderTests.cs
  12. 36
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlSpansTests.cs
  13. 63
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorMarkupCharacterReaderTests.cs

4
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin

@ -95,5 +95,9 @@ @@ -95,5 +95,9 @@
id="CSharp.Razor"
class="ICSharpCode.AspNet.Mvc.Folding.CSharpRazorLanguageBinding"
extensions=".cshtml" />
<LanguageBinding
id="VisualBasic.Razor"
class="ICSharpCode.AspNet.Mvc.Folding.VisualBasicRazorLanguageBinding"
extensions=".vbhtml" />
</Path>
</AddIn>

1
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj

@ -140,6 +140,7 @@ @@ -140,6 +140,7 @@
<Compile Include="Src\Folding\TextEditorWithParseInformationFolding.cs" />
<Compile Include="Src\Folding\TextEditorWithParseInformationFoldingFactory.cs" />
<Compile Include="Src\Folding\FoldGenerator.cs" />
<Compile Include="Src\Folding\VisualBasicRazorLanguageBinding.cs" />
<Compile Include="Src\Folding\WebFormsFoldGeneratorFactory.cs" />
<Compile Include="Src\Folding\WebFormsHtmlFoldParser.cs" />
<Compile Include="Src\Folding\HtmlNode.cs" />

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/CSharpRazorLanguageBinding.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.AspNet.Mvc.Folding @@ -10,7 +10,7 @@ namespace ICSharpCode.AspNet.Mvc.Folding
public CSharpRazorLanguageBinding()
: base(
new TextEditorWithParseInformationFoldingFactory(),
new RazorFoldGeneratorFactory("cshtml"))
new RazorFoldGeneratorFactory(".cshtml"))
{
}
}

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorFoldGeneratorFactory.cs

@ -7,17 +7,17 @@ namespace ICSharpCode.AspNet.Mvc.Folding @@ -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)));
}
}
}

4
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReader.cs

@ -10,8 +10,8 @@ namespace ICSharpCode.AspNet.Mvc.Folding @@ -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))
{
}

7
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlReaderFactory.cs

@ -7,13 +7,16 @@ namespace ICSharpCode.AspNet.Mvc.Folding @@ -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);
}
}
}

10
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorHtmlSpans.cs

@ -13,15 +13,21 @@ namespace ICSharpCode.AspNet.Mvc.Folding @@ -13,15 +13,21 @@ namespace ICSharpCode.AspNet.Mvc.Folding
public class RazorHtmlSpans
{
List<Span> 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<Span>(results.Document.Flatten());

4
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/RazorMarkupCharacterReader.cs

@ -9,10 +9,10 @@ namespace ICSharpCode.AspNet.Mvc.Folding @@ -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 {

17
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/VisualBasicRazorLanguageBinding.cs

@ -0,0 +1,17 @@ @@ -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"))
{
}
}
}

1
src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj

@ -116,6 +116,7 @@ @@ -116,6 +116,7 @@
<Compile Include="Src\Folding\RazorHtmlFoldParserTests.cs" />
<Compile Include="Src\Folding\HtmlElementFoldTests.cs" />
<Compile Include="Src\Folding\RazorHtmlReaderTests.cs" />
<Compile Include="Src\Folding\RazorHtmlSpansTests.cs" />
<Compile Include="Src\Folding\RazorMarkupCharacterReaderTests.cs" />
<Compile Include="Src\Folding\ScheduledFoldGeneratorTests.cs" />
<Compile Include="Src\Folding\FoldGeneratorTests.cs" />

4
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlReaderTests.cs

@ -14,7 +14,7 @@ namespace AspNet.Mvc.Tests.Folding @@ -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 @@ -32,7 +32,5 @@ namespace AspNet.Mvc.Tests.Folding
Assert.AreEqual("p", value);
}
}
}

36
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorHtmlSpansTests.cs

@ -0,0 +1,36 @@ @@ -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);
}
}
}

63
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/Folding/RazorMarkupCharacterReaderTests.cs

@ -12,15 +12,20 @@ namespace AspNet.Mvc.Tests.Folding @@ -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("<br/>");
CreateCSharpReader("<br/>");
bool htmlCharacterRead = reader.IsHtml;
@ -28,9 +33,9 @@ namespace AspNet.Mvc.Tests.Folding @@ -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 @@ -39,9 +44,9 @@ namespace AspNet.Mvc.Tests.Folding
}
[Test]
public void IsHtml_ReadFirstRazorTransitionSymbolAfterParagraphTag_ReturnsFalse()
public void IsHtml_ReadFirstCSharpRazorTransitionSymbolAfterParagraphTag_ReturnsFalse()
{
CreateReader("<p>@model.Message</p>");
CreateCSharpReader("<p>@model.Message</p>");
reader.ReadCharacters(4);
bool htmlCharacterRead = reader.IsHtml;
@ -50,14 +55,54 @@ namespace AspNet.Mvc.Tests.Folding @@ -50,14 +55,54 @@ namespace AspNet.Mvc.Tests.Folding
}
[Test]
public void IsHtml_ReadFirstCharacterAfterRazorTransitionSymbol_ReturnsFalse()
public void IsHtml_ReadFirstCharacterAfterCSharpRazorTransitionSymbol_ReturnsFalse()
{
CreateReader("<p>@model.Message</p>");
CreateCSharpReader("<p>@model.Message</p>");
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" +
"<p></p>";
CreateVisualBasicReader(html);
reader.ReadCharacters(32);
bool result = reader.IsHtml;
Assert.IsTrue(result);
}
}
}

Loading…
Cancel
Save