malt 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.rdoc +13 -0
- data/License.txt +204 -0
- data/README.rdoc +68 -0
- data/bin/malt +4 -0
- data/features/consistent_rendering.feature +36 -0
- data/features/samples/sample.erb +1 -0
- data/features/samples/sample.erubis +1 -0
- data/features/samples/sample.liquid +1 -0
- data/features/samples/sample.mustache +1 -0
- data/features/samples/sample.radius +1 -0
- data/features/step_definitions/engine_steps.rb +49 -0
- data/features/support/loadpath.rb +1 -0
- data/features/support/sample_class.rb +8 -0
- data/lib/malt.rb +79 -0
- data/lib/malt/core_ext.rb +31 -0
- data/lib/malt/engines.rb +10 -0
- data/lib/malt/engines/abstract.rb +151 -0
- data/lib/malt/engines/bluecloth.rb +39 -0
- data/lib/malt/engines/erb.rb +84 -0
- data/lib/malt/engines/erubis.rb +65 -0
- data/lib/malt/engines/haml.rb +68 -0
- data/lib/malt/engines/kramdown.rb +48 -0
- data/lib/malt/engines/less.rb +49 -0
- data/lib/malt/engines/liquid.rb +40 -0
- data/lib/malt/engines/radius.rb +90 -0
- data/lib/malt/engines/rdiscount.rb +49 -0
- data/lib/malt/engines/rdoc.rb +46 -0
- data/lib/malt/engines/redcloth.rb +42 -0
- data/lib/malt/engines/rtals.rb +46 -0
- data/lib/malt/engines/ruby.rb +36 -0
- data/lib/malt/engines/sass.rb +50 -0
- data/lib/malt/engines/tenjin.rb +61 -0
- data/lib/malt/formats.rb +10 -0
- data/lib/malt/formats/abstract.rb +195 -0
- data/lib/malt/formats/css.rb +34 -0
- data/lib/malt/formats/erb.rb +102 -0
- data/lib/malt/formats/haml.rb +53 -0
- data/lib/malt/formats/html.rb +29 -0
- data/lib/malt/formats/latex.rb +47 -0
- data/lib/malt/formats/less.rb +51 -0
- data/lib/malt/formats/liquid.rb +53 -0
- data/lib/malt/formats/markdown.rb +83 -0
- data/lib/malt/formats/pdf.rb +29 -0
- data/lib/malt/formats/radius.rb +47 -0
- data/lib/malt/formats/rdoc.rb +43 -0
- data/lib/malt/formats/rtals.rb +46 -0
- data/lib/malt/formats/ruby.rb +71 -0
- data/lib/malt/formats/sass.rb +56 -0
- data/lib/malt/formats/tenjin.rb +50 -0
- data/lib/malt/formats/text.rb +54 -0
- data/lib/malt/formats/textile.rb +59 -0
- data/lib/malt/formats/yaml.rb +50 -0
- data/lib/malt/kernel.rb +31 -0
- data/lib/malt/meta/data.rb +26 -0
- data/lib/malt/meta/gemfile +17 -0
- data/lib/malt/meta/profile +21 -0
- data/meta/data.rb +26 -0
- data/meta/gemfile +17 -0
- data/meta/profile +21 -0
- data/qed/01_overview.rdoc +44 -0
- data/qed/applique/malt.rb +12 -0
- metadata +283 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engines
|
4
|
+
|
5
|
+
# Discount Markdown implementation.
|
6
|
+
#
|
7
|
+
# http://github.com/rtomayko/rdiscount
|
8
|
+
#
|
9
|
+
# The +:smart+ and +:filter_html+ options can be set true
|
10
|
+
# to enable those flags on the underlying RDiscount object.
|
11
|
+
class Kramdown < Abstract
|
12
|
+
|
13
|
+
register :markdown, :md
|
14
|
+
|
15
|
+
# Convert Markdown text to HTML text.
|
16
|
+
def render(params)
|
17
|
+
text = params[:text]
|
18
|
+
format = params[:format]
|
19
|
+
case format
|
20
|
+
when :html, nil
|
21
|
+
intermediate(params).to_html
|
22
|
+
when :latex
|
23
|
+
intermediate(params).to_latex
|
24
|
+
else
|
25
|
+
super(params)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Convert Markdown text to intermediate object.
|
30
|
+
def intermediate(params)
|
31
|
+
text = params[:text]
|
32
|
+
::Kramdown::Document.new(text)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Load rdoc makup library if not already loaded.
|
39
|
+
def initialize_engine
|
40
|
+
return if defined? ::Kramdown
|
41
|
+
require_library 'kramdown'
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engines
|
4
|
+
|
5
|
+
# LESS
|
6
|
+
#
|
7
|
+
# http://lesscss.org/
|
8
|
+
#
|
9
|
+
# LESS is an extension of CSS. You can write LESS code just like you would write CSS,
|
10
|
+
# except you need to compile it to CSS. That's what this class is for.
|
11
|
+
class Less < Abstract
|
12
|
+
|
13
|
+
default :less
|
14
|
+
|
15
|
+
#
|
16
|
+
def render(params)
|
17
|
+
text = params[:text]
|
18
|
+
format = params[:format]
|
19
|
+
case format
|
20
|
+
when :css, nil
|
21
|
+
intermediate(params).to_css
|
22
|
+
else
|
23
|
+
super(params)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
def intermediate(params)
|
29
|
+
text = params[:text]
|
30
|
+
::Less::Engine.new(text)
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
#def compile(text, file)
|
35
|
+
# intermediate # ??
|
36
|
+
#end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
# Load Less library if not already loaded.
|
41
|
+
def initialize_engine
|
42
|
+
return if defined? ::Less::Engine
|
43
|
+
require_library 'less'
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engines
|
4
|
+
|
5
|
+
# Liquid
|
6
|
+
#
|
7
|
+
# http://liquid.rubyforge.org/
|
8
|
+
#
|
9
|
+
class Liquid < Abstract
|
10
|
+
|
11
|
+
default :liquid
|
12
|
+
|
13
|
+
#
|
14
|
+
def intermediate(params)
|
15
|
+
text = params[:text]
|
16
|
+
::Liquid::Template.parse(text)
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
def render(params={}, &yld) #file, db, &yld)
|
21
|
+
text = params[:text]
|
22
|
+
data = params[:data]
|
23
|
+
data = make_hash(data, &yld)
|
24
|
+
data = data.rekey{ |k| k.to_s }
|
25
|
+
engine = intermediate(params)
|
26
|
+
engine.render(data)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Load Liquid library if not already loaded.
|
32
|
+
def initialize_engine
|
33
|
+
return if defined? ::Liquid::Template
|
34
|
+
require_library 'liquid'
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engines
|
4
|
+
|
5
|
+
# Radius Template
|
6
|
+
#
|
7
|
+
# http://github.com/jlong/radius/
|
8
|
+
#
|
9
|
+
class Radius < Abstract
|
10
|
+
|
11
|
+
default :radius
|
12
|
+
|
13
|
+
#
|
14
|
+
def render(params, &yld)
|
15
|
+
text = params[:text]
|
16
|
+
data = params[:data]
|
17
|
+
format = params[:format]
|
18
|
+
case format
|
19
|
+
when :html, :xml, nil
|
20
|
+
data = make_context(data, &yld)
|
21
|
+
opts = engine_options(params)
|
22
|
+
parser = ::Radius::Parser.new(data, opts)
|
23
|
+
parser.parse(text)
|
24
|
+
else
|
25
|
+
super(params, &yld)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Load Radius library if not already loaded.
|
32
|
+
def initialize_engine
|
33
|
+
return if defined? ::Radius
|
34
|
+
require_library 'radius'
|
35
|
+
end
|
36
|
+
|
37
|
+
# Radius templates have a very special data source.
|
38
|
+
def make_context(data, &yld)
|
39
|
+
case data
|
40
|
+
when Hash
|
41
|
+
context = make_context_from_hash(data, &yld)
|
42
|
+
else
|
43
|
+
if data.respond_to(:to_hash)
|
44
|
+
data = data.to_hash
|
45
|
+
context = make_context_from_hash(data, &yld)
|
46
|
+
else
|
47
|
+
context = make_context_from_object(data, &yld)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
context
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
def make_context_from_object(db, &yld)
|
55
|
+
context = Class.new(::Radius::Context).new
|
56
|
+
db = make_object(db)
|
57
|
+
(class << context; self; end).class_eval do
|
58
|
+
define_method :tag_missing do |tag, attr|
|
59
|
+
db.__send__(tag) # any way to support attr as args?
|
60
|
+
end
|
61
|
+
end
|
62
|
+
context.define_tag("yield") do
|
63
|
+
yld.call
|
64
|
+
end
|
65
|
+
context
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
def make_context_from_hash(data, &yld)
|
70
|
+
context = Class.new(::Radius::Context).new
|
71
|
+
#data = make_hash(data)
|
72
|
+
data.each do |tag, value|
|
73
|
+
context.define_tag(tag){ value }
|
74
|
+
end
|
75
|
+
context.define_tag("yield") do
|
76
|
+
yld.call
|
77
|
+
end
|
78
|
+
context
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
def engine_options(params)
|
83
|
+
opts = {}
|
84
|
+
opts[:tag_prefix] = params[:tag_prefix] || settings[:tag_prefix]
|
85
|
+
opts
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
require 'malt/formats/rdoc'
|
3
|
+
require 'malt/formats/html'
|
4
|
+
|
5
|
+
module Malt::Engines
|
6
|
+
|
7
|
+
# Discount Markdown implementation.
|
8
|
+
#
|
9
|
+
# http://github.com/rtomayko/rdiscount
|
10
|
+
#
|
11
|
+
# The +:smart+ and +:filter_html+ options can be set true
|
12
|
+
# to enable those flags on the underlying RDiscount object.
|
13
|
+
class RDiscount < Abstract
|
14
|
+
|
15
|
+
default :markdown, :md
|
16
|
+
|
17
|
+
# Convert Markdown text to HTML text.
|
18
|
+
def render(params)
|
19
|
+
case params[:format]
|
20
|
+
when :html, nil
|
21
|
+
intermediate(params).to_html
|
22
|
+
else
|
23
|
+
super(params)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Convert Markdown text to intermediate engine object.
|
28
|
+
def intermediate(params)
|
29
|
+
text = params[:text]
|
30
|
+
::RDiscount.new(text, *flags)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
# Load rdoc makup library if not already loaded.
|
36
|
+
def initialize_engine
|
37
|
+
return if defined? ::RDiscount
|
38
|
+
require_library 'rdiscount'
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
def flags(params={})
|
43
|
+
[:smart, :filter_html].select{ |flag| params[flag] || settings[flag] }
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engines
|
4
|
+
|
5
|
+
# RDoc template.
|
6
|
+
#
|
7
|
+
# http://rdoc.rubyforge.org/
|
8
|
+
#
|
9
|
+
# It's suggested that your program require 'rdoc/markup' and
|
10
|
+
# 'rdoc/markup/to_html' at load time when using this template
|
11
|
+
# engine.
|
12
|
+
class RDoc < Abstract
|
13
|
+
|
14
|
+
default :rdoc
|
15
|
+
|
16
|
+
# Convert rdoc text to html.
|
17
|
+
def render(params)
|
18
|
+
text = params[:text]
|
19
|
+
format = params[:format]
|
20
|
+
case format
|
21
|
+
when :html, nil
|
22
|
+
html_engine.convert(text).to_s
|
23
|
+
else
|
24
|
+
super(params)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# Load rdoc makup library if not already loaded.
|
31
|
+
def initialize_engine
|
32
|
+
return if defined?(::RDoc::Markup)
|
33
|
+
require 'rubygems' # hack
|
34
|
+
require_library 'rdoc/markup'
|
35
|
+
require_library 'rdoc/markup/to_html'
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
def html_engine
|
40
|
+
@html_engine ||= ::RDoc::Markup::ToHtml.new
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engines
|
4
|
+
|
5
|
+
#
|
6
|
+
class RedCloth < Abstract
|
7
|
+
|
8
|
+
default :tt, :textile
|
9
|
+
|
10
|
+
# Convert textile text to html.
|
11
|
+
#
|
12
|
+
# params:
|
13
|
+
#
|
14
|
+
# :format => Symbol of the format to render [:html]
|
15
|
+
#
|
16
|
+
def render(params={})
|
17
|
+
case params[:format]
|
18
|
+
when :html, nil
|
19
|
+
intermediate(params).to_html
|
20
|
+
else
|
21
|
+
super(params)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
def intermediate(params={})
|
27
|
+
text = params[:text]
|
28
|
+
::RedCloth.new(text)
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# Load redcloth library if not already loaded.
|
34
|
+
def initialize_engine
|
35
|
+
return if defined? ::RedCloth
|
36
|
+
require_library 'redcloth'
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engines
|
4
|
+
|
5
|
+
# RTALS
|
6
|
+
#
|
7
|
+
# http://github.com/rubyworks/rtals
|
8
|
+
#
|
9
|
+
class RTALS < Abstract
|
10
|
+
|
11
|
+
default :rtal
|
12
|
+
|
13
|
+
#
|
14
|
+
def render(params, &yld)
|
15
|
+
text = params[:text]
|
16
|
+
file = params[:file]
|
17
|
+
data = params[:data]
|
18
|
+
format = params[:format]
|
19
|
+
|
20
|
+
case format
|
21
|
+
when :html, :xml, nil
|
22
|
+
data = make_binding(data, &yld)
|
23
|
+
intermediate(params).compile(data).to_s
|
24
|
+
else
|
25
|
+
super(params, &yld)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
def intermediate(params)
|
31
|
+
text = params[:text]
|
32
|
+
::RTAL.new(text)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# Load Haml library if not already loaded.
|
38
|
+
def initialize_engine
|
39
|
+
return if defined? ::RTAL
|
40
|
+
require_library 'rtals'
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'malt/engines/abstract'
|
2
|
+
|
3
|
+
module Malt::Engines
|
4
|
+
|
5
|
+
# Ruby as a template engine.
|
6
|
+
#
|
7
|
+
# http://
|
8
|
+
#
|
9
|
+
class Ruby < Abstract
|
10
|
+
|
11
|
+
default :rb
|
12
|
+
|
13
|
+
#
|
14
|
+
def render(params={}, &yld)
|
15
|
+
text = params[:text]
|
16
|
+
file = params[:file]
|
17
|
+
data = params[:data]
|
18
|
+
data = make_binding(data, &yld)
|
19
|
+
eval(text, data, file)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Ruby compiles to Ruby. How odd. ;)
|
23
|
+
def compile(text, file)
|
24
|
+
text
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
#
|
30
|
+
def initialize_engine
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|