diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index a63cf35d..fd9cc79f 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -150,6 +150,15 @@ module Jekyll URI.escape(input) end + # Replace any whitespace in the input string with a single space + # + # input - The String on which to operate. + # + # Returns the formatted String + def normalize_whitespace(input) + input.to_s.gsub(/\s+/, " ").strip + end + # Count the number of words in the input string. # # input - The String on which to operate. diff --git a/site/_docs/templates.md b/site/_docs/templates.md index 89bee3c1..4e9edd60 100644 --- a/site/_docs/templates.md +++ b/site/_docs/templates.md @@ -256,6 +256,17 @@ common tasks easier.

+ + +

Normalize Whitespace

+

Replace any occurance of whitespace with a single space.

+ + +

+ {% raw %}{{ "a \n b" | normalize_whitepace }}{% endraw %} +

+ +

Sort

diff --git a/test/test_filters.rb b/test/test_filters.rb index 66c7c551..1a9c7882 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -133,6 +133,30 @@ class TestFilters < JekyllUnitTest ) end + context "normalize_whitespace filter" do + should "replace newlines with a space" do + assert_equal "a b", @filter.normalize_whitespace("a\nb") + assert_equal "a b", @filter.normalize_whitespace("a\n\nb") + end + + should "replace tabs with a space" do + assert_equal "a b", @filter.normalize_whitespace("a\tb") + assert_equal "a b", @filter.normalize_whitespace("a\t\tb") + end + + should "replace multiple spaces with a single space" do + assert_equal "a b", @filter.normalize_whitespace("a b") + assert_equal "a b", @filter.normalize_whitespace("a\t\nb") + assert_equal "a b", @filter.normalize_whitespace("a \t \n\nb") + end + + should "strip whitespace from begining and end of string" do + assert_equal "a", @filter.normalize_whitespace("a ") + assert_equal "a", @filter.normalize_whitespace(" a") + assert_equal "a", @filter.normalize_whitespace(" a ") + end + end + context "date filters" do context "with Time object" do should "format a date with short format" do