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 @@
id="CSharp.Razor" id="CSharp.Razor"
class="ICSharpCode.AspNet.Mvc.Folding.CSharpRazorLanguageBinding" class="ICSharpCode.AspNet.Mvc.Folding.CSharpRazorLanguageBinding"
extensions=".cshtml" /> extensions=".cshtml" />
<LanguageBinding
id="VisualBasic.Razor"
class="ICSharpCode.AspNet.Mvc.Folding.VisualBasicRazorLanguageBinding"
extensions=".vbhtml" />
</Path> </Path>
</AddIn> </AddIn>

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

@ -140,6 +140,7 @@
<Compile Include="Src\Folding\TextEditorWithParseInformationFolding.cs" /> <Compile Include="Src\Folding\TextEditorWithParseInformationFolding.cs" />
<Compile Include="Src\Folding\TextEditorWithParseInformationFoldingFactory.cs" /> <Compile Include="Src\Folding\TextEditorWithParseInformationFoldingFactory.cs" />
<Compile Include="Src\Folding\FoldGenerator.cs" /> <Compile Include="Src\Folding\FoldGenerator.cs" />
<Compile Include="Src\Folding\VisualBasicRazorLanguageBinding.cs" />
<Compile Include="Src\Folding\WebFormsFoldGeneratorFactory.cs" /> <Compile Include="Src\Folding\WebFormsFoldGeneratorFactory.cs" />
<Compile Include="Src\Folding\WebFormsHtmlFoldParser.cs" /> <Compile Include="Src\Folding\WebFormsHtmlFoldParser.cs" />
<Compile Include="Src\Folding\HtmlNode.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
public CSharpRazorLanguageBinding() public CSharpRazorLanguageBinding()
: base( : base(
new TextEditorWithParseInformationFoldingFactory(), 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
{ {
public class RazorFoldGeneratorFactory : IFoldGeneratorFactory 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) public IFoldGenerator CreateFoldGenerator(ITextEditorWithParseInformationFolding textEditor)
{ {
return new ScheduledFoldGenerator( 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
{ {
RazorMarkupCharacterReader reader; RazorMarkupCharacterReader reader;
public RazorHtmlReader(string html) public RazorHtmlReader(string html, string fileExtension)
: this(new RazorMarkupCharacterReader(html)) : 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
{ {
public class RazorHtmlReaderFactory : IHtmlReaderFactory public class RazorHtmlReaderFactory : IHtmlReaderFactory
{ {
public RazorHtmlReaderFactory(string extension) public RazorHtmlReaderFactory(string fileExtension)
{ {
this.FileExtension = fileExtension;
} }
string FileExtension { get; set; }
public HtmlReader CreateHtmlReader(string html) 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
public class RazorHtmlSpans public class RazorHtmlSpans
{ {
List<Span> spans; List<Span> spans;
RazorCodeLanguage codeLanguage;
public RazorHtmlSpans(string html) public RazorHtmlSpans(string html, string fileExtension)
{ {
codeLanguage = RazorCodeLanguage.GetLanguageByExtension(fileExtension);
ReadHtmlSpans(html); ReadHtmlSpans(html);
} }
public string CodeLanguageName {
get { return codeLanguage.LanguageName; }
}
void ReadHtmlSpans(string html) void ReadHtmlSpans(string html)
{ {
RazorEngineHost razorEngineHost = new RazorEngineHost(RazorCodeLanguage.GetLanguageByExtension(".cshtml")); RazorEngineHost razorEngineHost = new RazorEngineHost(codeLanguage);
RazorTemplateEngine engine = new RazorTemplateEngine(razorEngineHost); RazorTemplateEngine engine = new RazorTemplateEngine(razorEngineHost);
ParserResults results = engine.ParseTemplate(new StringReader(html)); ParserResults results = engine.ParseTemplate(new StringReader(html));
spans = new List<Span>(results.Document.Flatten()); 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
{ {
RazorHtmlSpans htmlSpans; RazorHtmlSpans htmlSpans;
public RazorMarkupCharacterReader(string html) public RazorMarkupCharacterReader(string html, string fileExtension)
: base(html) : base(html)
{ {
htmlSpans = new RazorHtmlSpans(html); htmlSpans = new RazorHtmlSpans(html, fileExtension);
} }
public bool IsHtml { public bool IsHtml {

17
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"))
{
}
}
}

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

@ -116,6 +116,7 @@
<Compile Include="Src\Folding\RazorHtmlFoldParserTests.cs" /> <Compile Include="Src\Folding\RazorHtmlFoldParserTests.cs" />
<Compile Include="Src\Folding\HtmlElementFoldTests.cs" /> <Compile Include="Src\Folding\HtmlElementFoldTests.cs" />
<Compile Include="Src\Folding\RazorHtmlReaderTests.cs" /> <Compile Include="Src\Folding\RazorHtmlReaderTests.cs" />
<Compile Include="Src\Folding\RazorHtmlSpansTests.cs" />
<Compile Include="Src\Folding\RazorMarkupCharacterReaderTests.cs" /> <Compile Include="Src\Folding\RazorMarkupCharacterReaderTests.cs" />
<Compile Include="Src\Folding\ScheduledFoldGeneratorTests.cs" /> <Compile Include="Src\Folding\ScheduledFoldGeneratorTests.cs" />
<Compile Include="Src\Folding\FoldGeneratorTests.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
void CreateHtmlReader(string html) void CreateHtmlReader(string html)
{ {
htmlReader = new RazorHtmlReader(html); htmlReader = new RazorHtmlReader(html, ".cshtml");
} }
[Test] [Test]
@ -32,7 +32,5 @@ namespace AspNet.Mvc.Tests.Folding
Assert.AreEqual("p", value); Assert.AreEqual("p", value);
} }
} }
} }

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

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

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