Skip to content
This repository was archived by the owner on Jun 25, 2020. It is now read-only.

Added new Jekyll filters and tags #181

Merged
merged 4 commits into from
Dec 3, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions src/Pretzel.Logic/Liquid/CgiEscapeFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace Pretzel.Logic.Liquid
{
public class CgiEscapeFilter
{
public static string cgi_escape(string input)
{
return Uri.EscapeDataString(input);
}
}
}
13 changes: 13 additions & 0 deletions src/Pretzel.Logic/Liquid/CommentBlock.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System.IO;
using DotLiquid;

namespace Pretzel.Logic.Liquid
{
public class CommentBlock : Block
{
public override void Render(Context context, TextWriter result)
{
// Do nothing (i.e. swallow the comment...)
}
}
}
26 changes: 26 additions & 0 deletions src/Pretzel.Logic/Liquid/DateToLongStringFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System;
using System.Xml;

namespace Pretzel.Logic.Liquid
{
public class DateToLongStringFilter
{
public static string date_to_long_string(DateTime input)
{
//return input.ToString("dd MMMM yyyy");
return XmlConvert.ToString(input, "dd MMMM yyyy");
}

public static string date_to_long_string(string input)
{
DateTime inputDate;

if (DateTime.TryParse(input, out inputDate))
{
return date_to_long_string(inputDate);
}

return "";
}
}
}
37 changes: 37 additions & 0 deletions src/Pretzel.Logic/Liquid/DateToRfc822FormatFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System;

namespace Pretzel.Logic.Liquid
{
public class DateToRfc822FormatFilter
{
public static string date_to_rfc822(DateTime input)
{
var rfc822 = input.ToString("r");
var tz = TimeZone.CurrentTimeZone;
var offset = tz.GetUtcOffset(input).ToString();

// if local time is behind utc time, offset should start with "-".
// otherwise, add a plus sign to the beginning of the string.
if (!offset.StartsWith("-"))
offset = "+" + offset; // Add a (+) if it's a UTC+ timezone
offset = offset.Substring(0, 6); // only want the first 6 chars.
offset = offset.Replace(":", ""); // remove colons.
// offset now looks something like "-0700".
rfc822 = rfc822.Replace("GMT", offset);

return rfc822;
}

public static string date_to_rfc822(string input)
{
DateTime inputDate;

if (DateTime.TryParse(input, out inputDate))
{
return date_to_rfc822(inputDate);
}

return "";
}
}
}
24 changes: 24 additions & 0 deletions src/Pretzel.Logic/Liquid/DateToStringFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System;

namespace Pretzel.Logic.Liquid
{
public class DateToStringFilter
{
public static string date_to_string(DateTime input)
{
return input.ToString("dd MMM yyyy");
}

public static string date_to_string(string input)
{
DateTime inputDate;

if (DateTime.TryParse(input, out inputDate))
{
return date_to_string(inputDate);
}

return "";
}
}
}
18 changes: 18 additions & 0 deletions src/Pretzel.Logic/Liquid/NumberOfWordsFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System.Text.RegularExpressions;

namespace Pretzel.Logic.Liquid
{
public class NumberOfWordsFilter
{
public static string number_of_words(string input)
{
return CountWords(input).ToString();
}

private static int CountWords(string input)
{
var collection = Regex.Matches(input, @"[\S]+");
return collection.Count;
}
}
}
28 changes: 28 additions & 0 deletions src/Pretzel.Logic/Liquid/PostUrlBlock.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.IO;
using DotLiquid;

namespace Pretzel.Logic.Liquid
{
public class PostUrlBlock : Block
{
private string postFileName;

public override void Initialize(string tagName, string markup, List<string> tokens)
{
base.Initialize(tagName, markup, tokens);
postFileName = markup;
}

public override void Render(Context context, TextWriter result)
{
var permalink = postFileName.Replace(".md", "");
permalink = permalink.Replace(".mdown", "");
permalink = permalink.Replace("-", "/");
permalink += ".html";

result.Write(permalink);
}
}
}
12 changes: 12 additions & 0 deletions src/Pretzel.Logic/Liquid/UriEscapeFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;

namespace Pretzel.Logic.Liquid
{
public class UriEscapeFilter
{
public static string uri_escape(string input)
{
return Uri.EscapeUriString(input);
}
}
}
8 changes: 8 additions & 0 deletions src/Pretzel.Logic/Pretzel.Logic.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,16 @@
<Compile Include="Import\BloggerImport.cs" />
<Compile Include="Import\HtmlToMarkdownConverter.cs" />
<Compile Include="Import\WordpressImport.cs" />
<Compile Include="Liquid\CgiEscapeFilter.cs" />
<Compile Include="Liquid\CommentBlock.cs" />
<Compile Include="Liquid\DateToLongStringFilter.cs" />
<Compile Include="Liquid\DateToRfc822FormatFilter.cs" />
<Compile Include="Liquid\DateToStringFilter.cs" />
<Compile Include="Liquid\DateToXmlSchemaFilter.cs" />
<Compile Include="Liquid\HighlightBlock.cs" />
<Compile Include="Liquid\NumberOfWordsFilter.cs" />
<Compile Include="Liquid\PostUrlBlock.cs" />
<Compile Include="Liquid\UriEscapeFilter.cs" />
<Compile Include="Liquid\XmlEscapeFilter.cs" />
<Compile Include="Minification\FileSystemExtensions.cs" />
<Compile Include="Minification\LessTransform.cs" />
Expand Down
6 changes: 6 additions & 0 deletions src/Pretzel.Logic/Templating/Jekyll/LiquidEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,13 @@ public override void Initialize()
{
Template.RegisterFilter(typeof(XmlEscapeFilter));
Template.RegisterFilter(typeof(DateToXmlSchemaFilter));
Template.RegisterFilter(typeof(DateToLongStringFilter));
Template.RegisterFilter(typeof(DateToRfc822FormatFilter));
Template.RegisterFilter(typeof(CgiEscapeFilter));
Template.RegisterFilter(typeof(UriEscapeFilter));
Template.RegisterFilter(typeof(NumberOfWordsFilter));
Template.RegisterTag<HighlightBlock>("highlight");
Template.RegisterTag<PostUrlBlock>("post_url");
}
}
}
2 changes: 2 additions & 0 deletions src/Pretzel.Tests/Pretzel.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\System.IO.Abstractions.TestingHelpers.1.4.0.44\lib\net35\System.IO.Abstractions.TestingHelpers.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
Expand Down Expand Up @@ -93,6 +94,7 @@
<Compile Include="Templating\Jekyll\BakingEnvironment.cs" />
<Compile Include="Templating\Jekyll\LiquidEngineTests.cs" />
<Compile Include="Templating\Jekyll\LiquidExtensionsTests.cs" />
<Compile Include="Templating\Jekyll\LiquidFilterTests.cs" />
<Compile Include="Templating\Jekyll\StringTestExtensions.cs" />
<Compile Include="Templating\Plugins\TagCloudTests.cs" />
<Compile Include="Templating\Razor\RazorEngineTests.cs" />
Expand Down
58 changes: 58 additions & 0 deletions src/Pretzel.Tests/Templating/Jekyll/LiquidFilterTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using System;
using System.Web;
using Pretzel.Logic.Liquid;
using Xunit;

namespace Pretzel.Tests.Templating.Jekyll
{
public class LiquidFilterTests
{
[Fact]
public void DateToXmlSchema_ForExpectedDate_ReturnsCorrectString()
{
Assert.Equal("2014-01-01T00:00:00-05:00", DateToXmlSchemaFilter.date_to_xmlschema(new DateTime(2014, 01, 01)));
}

[Fact]
public void DateToRfc822_ForExpectedDate_ReturnsCorrectString()
{
Assert.Equal("Wed, 01 Jan 2014 00:00:00 -0500", DateToRfc822FormatFilter.date_to_rfc822(new DateTime(2014, 01, 01)));
}

[Fact]
public void DateToString_ForExpectedDate_ReturnsCorrectString()
{
Assert.Equal("07 Nov 2008", DateToStringFilter.date_to_string(new DateTime(2008, 11, 07)));
}

[Fact]
public void DateToString_WithNoDate_ReturnsNothing()
{
Assert.Equal("", DateToStringFilter.date_to_string(""));
}

[Fact]
public void DateToLongString_ForExpectedDate_ReturnsCorrectString()
{
Assert.Equal("07 November 2008", DateToLongStringFilter.date_to_long_string(new DateTime(2008, 11, 07)));
}

[Fact]
public void CgiEscape_ForGivenString_ReturnsEscapedString()
{
Assert.Equal("foo%2Cbar%3Bbaz%3F", CgiEscapeFilter.cgi_escape(@"foo,bar;baz?"));
}

[Fact]
public void UriEscape_ForGivenString_ReturnsEscapedString()
{
Assert.Equal("foo,%20bar%20%5Cbaz?", UriEscapeFilter.uri_escape(@"foo, bar \baz?"));
}

[Fact]
public void NumberOfWords_ForGiveString_ReturnsCorrectCount()
{
Assert.Equal(4.ToString(), NumberOfWordsFilter.number_of_words("This is a test"));
}
}
}