From acb2263f51af818ed74734b8843ddb0a18ac4532 Mon Sep 17 00:00:00 2001 From: Pat Hawks Date: Thu, 7 Jan 2016 02:36:24 -0800 Subject: [PATCH] Add smartify filter --- lib/jekyll/converters/smartypants.rb | 34 ++++++++++++++++++++++++++++ lib/jekyll/filters.rb | 11 +++++++++ test/test_filters.rb | 5 ++++ 3 files changed, 50 insertions(+) create mode 100644 lib/jekyll/converters/smartypants.rb diff --git a/lib/jekyll/converters/smartypants.rb b/lib/jekyll/converters/smartypants.rb new file mode 100644 index 00000000..7af9d297 --- /dev/null +++ b/lib/jekyll/converters/smartypants.rb @@ -0,0 +1,34 @@ +class Kramdown::Parser::SmartyPants < Kramdown::Parser::Kramdown + def initialize(source, options) + super + @block_parsers = [] + @span_parsers = [:smart_quotes, :html_entity, :typographic_syms, :escaped_chars] + end +end + +module Jekyll + module Converters + class SmartyPants < Converter + safe true + priority :low + + def initialize(config) + Jekyll::External.require_with_graceful_fail "kramdown" + @config = config["kramdown"].dup || {} + @config[:input] = :SmartyPants + end + + def matches(_) + false + end + + def output_ext(_) + nil + end + + def convert(content) + Kramdown::Document.new(content, @config).to_html.chomp + end + end + end +end diff --git a/lib/jekyll/filters.rb b/lib/jekyll/filters.rb index 36760d65..986bfdee 100644 --- a/lib/jekyll/filters.rb +++ b/lib/jekyll/filters.rb @@ -15,6 +15,17 @@ module Jekyll converter.convert(input) end + # Convert a Markdown string into HTML output. + # + # input - The Markdown String to convert. + # + # Returns the HTML formatted String. + def smartify(input) + site = @context.registers[:site] + converter = site.find_converter_instance(Jekyll::Converters::SmartyPants) + converter.convert(input) + end + # Convert a Sass string into CSS output. # # input - The Sass String to convert. diff --git a/test/test_filters.rb b/test/test_filters.rb index dc51252e..63e52672 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -31,6 +31,11 @@ class TestFilters < JekyllUnitTest assert_equal "

something really simple

\n", @filter.markdownify("something **really** simple") end + should "smartify with simple string" do + assert_equal "SmartyPants is *not* Markdown", @filter.smartify("SmartyPants is *not* Markdown") + assert_equal "“This filter’s test…”", @filter.smartify(%q{"This filter's test..."}) + end + should "sassify with simple string" do assert_equal "p {\n color: #123456; }\n", @filter.sassify("$blue:#123456\np\n color: $blue") end