From 4117770acc24b9b4ab07fd54172f3206573fba52 Mon Sep 17 00:00:00 2001 From: Ben Griffiths Date: Tue, 12 Jul 2011 11:58:33 +0100 Subject: [PATCH] Ok, so we do this the regexp way. --- lib/govspeak.rb | 35 +++++++++++++++++++++++++++++++++-- test/govspeak_test.rb | 6 ++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/govspeak.rb b/lib/govspeak.rb index 4aa3885..ec63903 100644 --- a/lib/govspeak.rb +++ b/lib/govspeak.rb @@ -2,9 +2,40 @@ module Govspeak - class Document < Kramdown::Document + class Document + + @@extensions = [] + + def initialize(source,options = {}) + @doc = Kramdown::Document.new(preprocess(source),options) + super + end + + def to_html + @doc.to_html + end + + def preprocess(source) + @@extensions.each do |title,block| + regexp = %r${::#{title}}(.*?){:/#{title}}$m + source.gsub!(regexp) {|match| + block.call($1) + } + end + source + end + + def self.extension(title,&block) + @@extensions << [title,block] + end + + extension('reverse') { |body| + body.reverse + } end + + end - \ No newline at end of file + diff --git a/test/govspeak_test.rb b/test/govspeak_test.rb index 2edd277..578a1d7 100644 --- a/test/govspeak_test.rb +++ b/test/govspeak_test.rb @@ -7,4 +7,10 @@ class GovspeakTest < Test::Unit::TestCase assert_equal "

this is markdown

\n", rendered end + test "simple block extension" do + rendered = Govspeak::Document.new("this \n{::reverse}\n*is*\n{:/reverse}\n markdown").to_html + assert_equal "

this

\n\n

si

\n\n

markdown

\n", rendered + end + + end \ No newline at end of file