Skip to content

Commit

Permalink
Merge in dvyjones's bluecloth branch
Browse files Browse the repository at this point in the history
  • Loading branch information
rtomayko committed Oct 19, 2010
2 parents b967028 + e5c5532 commit 037152b
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
23 changes: 23 additions & 0 deletions lib/tilt.rb
Original file line number Diff line number Diff line change
Expand Up @@ -743,6 +743,29 @@ def evaluate(scope, locals, &block)
register 'markdown', RDiscountTemplate
register 'mkd', RDiscountTemplate
register 'md', RDiscountTemplate


# BlueCloth Markdown implementation. See:
# http://deveiate.org/projects/BlueCloth/
#
# RDiscount is a simple text filter. It does not support +scope+ or
# +locals+. The +:smartypants+ and +:escape_html+ options may be set true
# to enable those flags on the underlying BlueCloth object.
class BlueClothTemplate < Template
def initialize_engine
return if defined? ::BlueCloth
require_template_library 'bluecloth'
end

def prepare
@engine = BlueCloth.new(data, options)
@output = nil
end

def evaluate(scope, locals, &block)
@output ||= @engine.to_html
end
end


# RedCloth implementation. See:
Expand Down
59 changes: 59 additions & 0 deletions test/tilt_blueclothtemplate_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
require 'contest'
require 'tilt'

begin
require 'bluecloth'

class BlueClothTemplateTest < Test::Unit::TestCase
setup do
Tilt.register('markdown', Tilt::BlueClothTemplate)
Tilt.register('md', Tilt::BlueClothTemplate)
Tilt.register('mkd', Tilt::BlueClothTemplate)
end

teardown do
# Need to revert to RDiscount, otherwise the RDiscount test will fail
Tilt.register('markdown', Tilt::RDiscountTemplate)
Tilt.register('md', Tilt::RDiscountTemplate)
Tilt.register('mkd', Tilt::RDiscountTemplate)
end

test "registered for '.markdown' files unless RDiscount is loaded" do
unless defined?(RDiscount)
assert_equal Tilt::BlueClothTemplate, Tilt['test.markdown']
end
end

test "registered for '.md' files unless RDiscount is loaded" do
unless defined?(RDiscount)
assert_equal Tilt::BlueClothTemplate, Tilt['test.md']
end
end

test "registered for '.mkd' files unless RDiscount is loaded" do
unless defined?(RDiscount)
assert_equal Tilt::BlueClothTemplate, Tilt['test.mkd']
end
end

test "preparing and evaluating templates on #render" do
template = Tilt::BlueClothTemplate.new { |t| "# Hello World!" }
assert_equal "<h1>Hello World!</h1>", template.render
end

test "smartypants when :smart is set" do
template = Tilt::BlueClothTemplate.new(:smartypants => true) { |t|
"OKAY -- 'Smarty Pants'" }
assert_equal "<p>OKAY &mdash; &lsquo;Smarty Pants&rsquo;</p>",
template.render
end

test "stripping HTML when :filter_html is set" do
template = Tilt::BlueClothTemplate.new(:escape_html => true) { |t|
"HELLO <blink>WORLD</blink>" }
assert_equal "<p>HELLO &lt;blink>WORLD&lt;/blink></p>", template.render
end
end
rescue LoadError => boom
warn "Tilt::BlueClothTemplate (disabled)\n"
end

0 comments on commit 037152b

Please sign in to comment.