markaby 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/.gitignore +21 -0
  2. data/{spec/spec.opts → .rspec} +0 -0
  3. data/Gemfile +8 -0
  4. data/Markaby.gemspec +20 -105
  5. data/README.rdoc +12 -94
  6. data/Rakefile +19 -50
  7. data/lib/markaby.rb +1 -5
  8. data/lib/markaby/builder.rb +15 -1
  9. data/lib/markaby/builder_tags.rb +22 -2
  10. data/lib/markaby/kernel_method.rb +1 -0
  11. data/lib/markaby/tags.rb +91 -2
  12. data/lib/markaby/version.rb +3 -0
  13. data/spec/markaby/{css_proxy_test.rb → css_proxy_spec.rb} +12 -17
  14. data/spec/markaby/{fragment_test.rb → fragment_spec.rb} +0 -0
  15. data/spec/markaby/html5_spec.rb +100 -0
  16. data/spec/markaby/markaby_spec.rb +1 -1
  17. data/spec/markaby/{markaby_test.rb → markaby_test_unit_spec.rb} +1 -1
  18. data/spec/spec_helper.rb +0 -5
  19. metadata +70 -76
  20. data/garlic.rb +0 -29
  21. data/init.rb +0 -6
  22. data/lib/markaby/rails.rb +0 -75
  23. data/lib/markaby/rails/current.rb +0 -85
  24. data/lib/markaby/rails/deprecated.rb +0 -124
  25. data/lib/markaby/rails/rails_builder.rb +0 -91
  26. data/lib/markaby/sinatra.rb +0 -18
  27. data/lib/markaby/tilt.rb +0 -8
  28. data/spec/markaby/markaby_other_static.mab +0 -1
  29. data/spec/markaby/rails/spec_helper.rb +0 -29
  30. data/spec/markaby/rails/views/layouts/layout.mab +0 -11
  31. data/spec/markaby/rails/views/markaby/_a_partial.mab +0 -3
  32. data/spec/markaby/rails/views/markaby/_form_for_with_body_in_erb.erb +0 -1
  33. data/spec/markaby/rails/views/markaby/_partial_child_with_locals.mab +0 -1
  34. data/spec/markaby/rails/views/markaby/access_to_helpers.mab +0 -1
  35. data/spec/markaby/rails/views/markaby/broken.mab +0 -7
  36. data/spec/markaby/rails/views/markaby/commented_out_template.mab +0 -1
  37. data/spec/markaby/rails/views/markaby/correct_template_values.mab +0 -5
  38. data/spec/markaby/rails/views/markaby/double_output.mab +0 -8
  39. data/spec/markaby/rails/views/markaby/form_for.mab +0 -2
  40. data/spec/markaby/rails/views/markaby/form_for_with_fields.mab +0 -3
  41. data/spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab +0 -4
  42. data/spec/markaby/rails/views/markaby/no_values_passed.mab +0 -3
  43. data/spec/markaby/rails/views/markaby/partial_parent.mab +0 -1
  44. data/spec/markaby/rails/views/markaby/partial_parent_with_locals.mab +0 -7
  45. data/spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb +0 -1
  46. data/spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab +0 -0
  47. data/spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab +0 -3
  48. data/spec/markaby/rails/views/markaby/render_with_ivar.mab +0 -3
  49. data/spec/markaby/rails/views/markaby/renders_erb.rhtml +0 -1
  50. data/spec/markaby/rails/views/markaby/renders_form_for_with_erb_body.mab +0 -3
  51. data/spec/markaby/rails/views/markaby/routes.mab +0 -1
  52. data/spec/markaby/rails/views/markaby/yielding.mab +0 -3
  53. data/spec/markaby/rails/views/markaby/yielding_content_for_with_block_helper.mab +0 -5
  54. data/spec/markaby/rails/views/markaby/yielding_two.mab +0 -7
  55. data/spec/markaby/rails/views/markaby/yielding_with_content_for.mab +0 -3
  56. data/spec/markaby/rails_test.rb +0 -380
  57. data/spec/markaby/rails_version_spec.rb +0 -37
  58. data/spec/markaby/sinatra/app.rb +0 -49
  59. data/spec/markaby/sinatra/sinatra_spec.rb +0 -67
  60. data/spec/markaby/sinatra/views/helpers.mab +0 -1
  61. data/spec/markaby/sinatra/views/layout.mab +0 -7
  62. data/spec/markaby/sinatra/views/markaby_template.mab +0 -0
  63. data/spec/markaby/sinatra/views/scope_instance_variables.mab +0 -3
  64. data/spec/markaby/sinatra/views/simple_html.mab +0 -4
  65. data/spec/markaby/sinatra/views/variables.mab +0 -3
  66. data/spec/markaby/tilt/erb.erb +0 -1
  67. data/spec/markaby/tilt/locals.mab +0 -1
  68. data/spec/markaby/tilt/markaby.mab +0 -1
  69. data/spec/markaby/tilt/markaby_other_static.mab +0 -1
  70. data/spec/markaby/tilt/render_twice.mab +0 -1
  71. data/spec/markaby/tilt/scope.mab +0 -1
  72. data/spec/markaby/tilt/yielding.mab +0 -2
  73. data/spec/markaby/tilt_spec.rb +0 -75
@@ -0,0 +1,21 @@
1
+ .garlic
2
+ pkg
3
+ _site
4
+
5
+ *.gem
6
+ *.rbc
7
+ .bundle
8
+ .config
9
+ .yardoc
10
+ Gemfile.lock
11
+ InstalledFiles
12
+ _yardoc
13
+ coverage
14
+ doc/
15
+ lib/bundler/man
16
+ pkg
17
+ rdoc
18
+ spec/reports
19
+ test/tmp
20
+ test/version_tmp
21
+ tmp
File without changes
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'builder'
4
+
5
+ group :test do
6
+ gem 'rake'
7
+ gem 'rspec'
8
+ end
@@ -1,109 +1,24 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'markaby/version'
5
5
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{markaby}
8
- s.version = "0.7.2"
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "markaby"
8
+ spec.version = Markaby::VERSION
9
+ spec.authors = ["Scott Taylor", "judofyr", "_why"]
10
+ spec.email = ["scott@railsnewbie.com"]
11
+ spec.description = "_why's markaby templating language"
12
+ spec.summary = "A pure ruby based, html markup language"
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
9
15
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{_why}, %q{Tim Fletcher}, %q{John Barton}, %q{spox}, %q{smtlaissezfaire}]
12
- s.date = %q{2011-08-23}
13
- s.description = %q{Tim Fletcher and _why's ruby driven HTML templating system}
14
- s.email = %q{scott@railsnewbie.com}
15
- s.extra_rdoc_files = [
16
- "README.rdoc"
17
- ]
18
- s.files = [
19
- "CHANGELOG.rdoc",
20
- "Markaby.gemspec",
21
- "README.rdoc",
22
- "Rakefile",
23
- "VERSION",
24
- "garlic.rb",
25
- "init.rb",
26
- "lib/markaby.rb",
27
- "lib/markaby/builder.rb",
28
- "lib/markaby/builder_tags.rb",
29
- "lib/markaby/cssproxy.rb",
30
- "lib/markaby/kernel_method.rb",
31
- "lib/markaby/rails.rb",
32
- "lib/markaby/rails/current.rb",
33
- "lib/markaby/rails/deprecated.rb",
34
- "lib/markaby/rails/rails_builder.rb",
35
- "lib/markaby/sinatra.rb",
36
- "lib/markaby/tags.rb",
37
- "lib/markaby/tilt.rb",
38
- "spec/markaby/builder_spec.rb",
39
- "spec/markaby/css_proxy_test.rb",
40
- "spec/markaby/fragment_test.rb",
41
- "spec/markaby/markaby_other_static.mab",
42
- "spec/markaby/markaby_spec.rb",
43
- "spec/markaby/markaby_test.rb",
44
- "spec/markaby/rails/spec_helper.rb",
45
- "spec/markaby/rails/views/layouts/layout.mab",
46
- "spec/markaby/rails/views/markaby/_a_partial.mab",
47
- "spec/markaby/rails/views/markaby/_form_for_with_body_in_erb.erb",
48
- "spec/markaby/rails/views/markaby/_partial_child_with_locals.mab",
49
- "spec/markaby/rails/views/markaby/access_to_helpers.mab",
50
- "spec/markaby/rails/views/markaby/broken.mab",
51
- "spec/markaby/rails/views/markaby/commented_out_template.mab",
52
- "spec/markaby/rails/views/markaby/correct_template_values.mab",
53
- "spec/markaby/rails/views/markaby/double_output.mab",
54
- "spec/markaby/rails/views/markaby/form_for.mab",
55
- "spec/markaby/rails/views/markaby/form_for_with_fields.mab",
56
- "spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab",
57
- "spec/markaby/rails/views/markaby/no_values_passed.mab",
58
- "spec/markaby/rails/views/markaby/partial_parent.mab",
59
- "spec/markaby/rails/views/markaby/partial_parent_with_locals.mab",
60
- "spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb",
61
- "spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab",
62
- "spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab",
63
- "spec/markaby/rails/views/markaby/render_with_ivar.mab",
64
- "spec/markaby/rails/views/markaby/renders_erb.rhtml",
65
- "spec/markaby/rails/views/markaby/renders_form_for_with_erb_body.mab",
66
- "spec/markaby/rails/views/markaby/routes.mab",
67
- "spec/markaby/rails/views/markaby/yielding.mab",
68
- "spec/markaby/rails/views/markaby/yielding_content_for_with_block_helper.mab",
69
- "spec/markaby/rails/views/markaby/yielding_two.mab",
70
- "spec/markaby/rails/views/markaby/yielding_with_content_for.mab",
71
- "spec/markaby/rails_test.rb",
72
- "spec/markaby/rails_version_spec.rb",
73
- "spec/markaby/sinatra/app.rb",
74
- "spec/markaby/sinatra/sinatra_spec.rb",
75
- "spec/markaby/sinatra/views/helpers.mab",
76
- "spec/markaby/sinatra/views/layout.mab",
77
- "spec/markaby/sinatra/views/markaby_template.mab",
78
- "spec/markaby/sinatra/views/scope_instance_variables.mab",
79
- "spec/markaby/sinatra/views/simple_html.mab",
80
- "spec/markaby/sinatra/views/variables.mab",
81
- "spec/markaby/tilt/erb.erb",
82
- "spec/markaby/tilt/locals.mab",
83
- "spec/markaby/tilt/markaby.mab",
84
- "spec/markaby/tilt/markaby_other_static.mab",
85
- "spec/markaby/tilt/render_twice.mab",
86
- "spec/markaby/tilt/scope.mab",
87
- "spec/markaby/tilt/yielding.mab",
88
- "spec/markaby/tilt_spec.rb",
89
- "spec/spec.opts",
90
- "spec/spec_helper.rb"
91
- ]
92
- s.homepage = %q{http://markaby.github.com/markaby/}
93
- s.require_paths = [%q{lib}]
94
- s.rubygems_version = %q{1.8.6}
95
- s.summary = %q{Markup as Ruby, write HTML in your native Ruby tongue}
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
96
20
 
97
- if s.respond_to? :specification_version then
98
- s.specification_version = 3
99
-
100
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
101
- s.add_runtime_dependency(%q<builder>, [">= 2.0.0"])
102
- else
103
- s.add_dependency(%q<builder>, [">= 2.0.0"])
104
- end
105
- else
106
- s.add_dependency(%q<builder>, [">= 2.0.0"])
107
- end
21
+ spec.add_dependency "builder"
22
+ spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "rake"
108
24
  end
109
-
@@ -5,70 +5,27 @@ It is an alternative to ERb which weaves the two languages together.
5
5
  Also a replacement for templating languages which use primitive languages
6
6
  that blend with HTML.
7
7
 
8
- == Using Markaby as a Rails plugin / gem
9
-
10
- Write Rails templates in pure Ruby. Example layout:
11
-
12
- html do
13
- head do
14
- title 'Products: ' + action_name
15
- stylesheet_link_tag 'scaffold'
16
- end
17
-
18
- body do
19
- p flash[:notice], :style => "color: green"
20
-
21
- div.signup! do
22
- form_for @user do |f|
23
- f.text_field :email
24
- end
25
- end
26
-
27
- yield
28
- end
29
- end
30
-
31
- Markaby templates end in .mab
32
-
33
- Markaby supports many versions of rails, including the latest rails:
34
-
35
- 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.2.6, 2.2.0,
36
- 2.2.1, 2.2.2, 2.2.3, 2.3.1, 2.3.2, 2.3.2.1,
37
- 2.3.3, 2.3.3.1, 2.3.4, 2.3.5, 2.3.6, 2.3.7,
38
- 2.3.8
39
-
40
- Rails 3.0 support is planned.
41
-
42
- === Install it as a plugin
43
-
44
- script/plugin install git://github.com/markaby/markaby.git
45
-
46
8
  === Install it as a gem
47
9
 
48
10
  gem install markaby
49
11
 
50
- If you are loading it in a different way (from a gem), make sure
51
- it's on the $LOAD_PATH, and add the following in
52
- an initializer (config/initializers/markaby.rb will work):
53
-
54
- require 'markaby'
55
- require 'markaby/rails'
56
-
57
- Markaby::Rails.load
58
-
59
- Or, you could try config.gem, but that's now known as a bad idea.
60
-
61
-
62
12
  == Using Markaby with Sinatra (1.0+)
63
13
 
64
- require 'markaby/sinatra'
65
-
66
14
  get '/foo' do
67
15
  mab :my_template # my_template.mab in the sinatra view path
68
16
  end
69
17
 
70
18
  If you are looking for sinatra support pre 0.7, see http://github.com/sbfaulkner/sinatra-markaby
71
19
 
20
+ A note on Tilt - using markaby with html5 doesn't quite yet work properly. If you'd like to render a template with html 5, call this at the start of a .mab template:
21
+
22
+ enable_html5!
23
+
24
+ Or enable html 5 globally:
25
+
26
+ Markaby::Builder.class_eval do
27
+ @@options = Markaby::Builder::HTML5_OPTIONS
28
+ end
72
29
 
73
30
  == Using Markaby with other frameworks
74
31
 
@@ -174,15 +131,15 @@ Which results in:
174
131
  == 3. Validate Your XHTML 1.0 Output
175
132
 
176
133
  If you'd like Markaby to help you assemble valid XHTML documents,
177
- you can use the <tt>xhtml_transitional</tt> or <tt>xhtml_strict</tt>
134
+ you can use the <tt>html5</tt>, <tt>xhtml_transitional</tt> or <tt>xhtml_strict</tt>
178
135
  methods in place of the normal <tt>html</tt> tag.
179
136
 
180
- xhtml_strict do
137
+ html5 do
181
138
  head { ... }
182
139
  body { ... }
183
140
  end
184
141
 
185
- This will add the XML instruction and the doctype tag to your document.
142
+ This will add the XML instruction and the doctype tag to your document (for xhtml_strict and xhtml_transitional).
186
143
  Also, a character set meta tag will be placed inside your <tt>head</tt>
187
144
  tag.
188
145
 
@@ -263,45 +220,6 @@ won't work with this technique.
263
220
  end
264
221
  end
265
222
 
266
- = A Note About Rails Helpers
267
-
268
- When used in Rails templates, the Rails helper object is passed into
269
- Markaby::Builder. When you call helper methods inside Markaby, the output
270
- from those methods will be output to the stream. This is incredibly
271
- handy, since most Rails helpers output HTML tags.
272
-
273
- head do
274
- javascript_include_tag 'prototype'
275
- autodiscovery_link_tag
276
- end
277
-
278
- However, some methods are designed to give back a String which you can use
279
- elsewhere. That's okay! Every method returns a Fragment object, which can
280
- be used as a string.
281
-
282
- p { "Total is: #{number_to_human_size @file_bytes}" }
283
-
284
- Also see the Quick Tour above, specifically the stuff about auto-stringification.
285
-
286
- If for any reason you have trouble with fragments, you can just
287
- call the <tt>@helpers</tt> object with the method and you'll get
288
- the String back and nothing will be output.
289
-
290
- p { "Total is: #{@helpers.number_to_human_size @file_bytes}" }
291
-
292
- Conversely, you may call instance variables from your controller by using
293
- a method and its value will be returned, nothing will be output.
294
-
295
- # Inside imaginary ProductController
296
- def list
297
- @products = Product.find :all
298
- end
299
-
300
- # Inside app/views/product/list.mab
301
- products.each do |product|
302
- p product.title
303
- end
304
-
305
223
  = Credits
306
224
 
307
225
  Markaby is a work of immense hope by Tim Fletcher and why the lucky stiff.
data/Rakefile CHANGED
@@ -1,43 +1,12 @@
1
1
  require 'rake'
2
+ require "bundler/gem_tasks"
2
3
  require 'rspec/core/rake_task'
3
- require 'rake/testtask'
4
4
  require 'rake/clean'
5
5
 
6
- begin
7
- require 'hanna/rdoctask'
8
-
9
- Rake::RDocTask.new do |rdoc|
10
- rdoc.rdoc_dir = 'doc/rdoc'
11
- rdoc.options << '--line-numbers'
12
- rdoc.rdoc_files.add(['README.rdoc', 'CHANGELOG.rdoc', 'lib/**/*.rb'])
13
- end
14
- rescue LoadError
15
- puts "Could not load hanna-rdoc. Please install with mislav-hanna package"
16
- end
17
-
18
- task :default => [:spec, :test]
19
-
20
- Rake::TestTask.new(:test) do |t|
21
- t.pattern = 'spec/markaby/*_test.rb'
22
- end
23
-
24
6
  RSpec::Core::RakeTask.new(:spec)
7
+ task :default => :spec
25
8
 
26
- begin
27
- require 'jeweler'
28
-
29
- Jeweler::Tasks.new do |gemspec|
30
- gemspec.name = "markaby"
31
- gemspec.summary = "Markup as Ruby, write HTML in your native Ruby tongue"
32
- gemspec.description = "Tim Fletcher and _why's ruby driven HTML templating system"
33
- gemspec.email = "scott@railsnewbie.com"
34
- gemspec.homepage = "http://markaby.github.com/markaby/"
35
- gemspec.authors = ["_why", "Tim Fletcher", "John Barton", "spox", "smtlaissezfaire"]
36
- gemspec.add_dependency 'builder', '>=2.0.0'
37
- end
38
- rescue LoadError
39
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
40
- end
9
+ Bundler::GemHelper.install_tasks
41
10
 
42
11
  desc "List any Markaby specific warnings"
43
12
  task :warnings do
@@ -60,19 +29,19 @@ namespace :gemspec do
60
29
  end
61
30
  end
62
31
 
63
- namespace :release do
64
- task :patch => [:spec, "version:bump:patch", :update_gemspec, :rerdoc, :tag_release, :build, :push_tags]
65
-
66
- task :update_gemspec => ["gemspec:generate", "gemspec:validate", "gemspec:commit"]
67
- task :tag_release do
68
- require File.dirname(__FILE__) + "/lib/markaby"
69
- version = "v#{Markaby::VERSION}"
70
- sh "git tag #{version}"
71
- end
72
-
73
- task :push_tags do
74
- sh "git push --tags"
75
- end
76
- end
77
-
78
- task :release => "release:patch"
32
+ # namespace :release do
33
+ # task :patch => [:spec, "version:bump:patch", :update_gemspec, :rerdoc, :tag_release, :build, :push_tags]
34
+ #
35
+ # task :update_gemspec => ["gemspec:generate", "gemspec:validate", "gemspec:commit"]
36
+ # task :tag_release do
37
+ # require File.dirname(__FILE__) + "/lib/markaby"
38
+ # version = "v#{Markaby::VERSION}"
39
+ # sh "git tag #{version}"
40
+ # end
41
+ #
42
+ # task :push_tags do
43
+ # sh "git push --tags"
44
+ # end
45
+ # end
46
+ #
47
+ # task :release => "release:patch"
@@ -16,15 +16,11 @@ $:.unshift File.expand_path(File.dirname(__FILE__))
16
16
  # * Markaby::MetAid: metaprogramming helper methods.
17
17
  # * Markaby::Tags: lists the roles of various XHTML tags to help Builder
18
18
  # use these tags as they are intended.
19
- # * Markaby::Template: a class for hooking Markaby into Rails as a
20
- # proper templating language.
21
19
  module Markaby
22
- version_file = File.expand_path(File.dirname(__FILE__) + "/../VERSION")
23
- VERSION = File.read(version_file).strip
24
-
25
20
  class InvalidXhtmlError < StandardError; end
26
21
  end
27
22
 
23
+ require "markaby/version"
28
24
  require 'builder' unless defined?(Builder)
29
25
  require 'markaby/builder'
30
26
  require 'markaby/cssproxy'
@@ -28,7 +28,7 @@ module Markaby
28
28
  :indent => 0,
29
29
  :output_helpers => true,
30
30
  :output_xml_instruction => true,
31
- :output_meta_tag => true,
31
+ :output_meta_tag => 'xhtml',
32
32
  :auto_validation => true,
33
33
  :tagset => Markaby::XHTMLTransitional,
34
34
  :root_attributes => {
@@ -38,12 +38,26 @@ module Markaby
38
38
  }
39
39
  }
40
40
 
41
+ HTML5_OPTIONS = {
42
+ :indent => 0,
43
+ :output_helpers => true,
44
+ :output_xml_instruction => false,
45
+ :output_meta_tag => 'html5',
46
+ :auto_validation => true,
47
+ :tagset => Markaby::HTML5,
48
+ :root_attributes => {}
49
+ }
50
+
41
51
  @@options = DEFAULT_OPTIONS.dup
42
52
 
43
53
  def self.restore_defaults!
44
54
  @@options = DEFAULT_OPTIONS.dup
45
55
  end
46
56
 
57
+ def self.set_html5_options!
58
+ @@options = HTML5_OPTIONS.dup
59
+ end
60
+
47
61
  def self.set(option, value)
48
62
  @@options[option] = value
49
63
  end
@@ -1,6 +1,6 @@
1
1
  module Markaby
2
2
  module BuilderTags
3
- (XHTMLTransitional.tags - [:head]).each do |k|
3
+ (HTML5.tags - [:head]).each do |k|
4
4
  class_eval <<-CODE, __FILE__, __LINE__
5
5
  def #{k}(*args, &block)
6
6
  html_tag(#{k.inspect}, *args, &block)
@@ -28,7 +28,8 @@ module Markaby
28
28
  # set to <tt>text/html; charset=utf-8</tt>.
29
29
  def head(*args, &block)
30
30
  tag!(:head, *args) do
31
- tag!(:meta, "http-equiv" => "Content-Type", "content" => "text/html; charset=utf-8") if @output_meta_tag
31
+ tag!(:meta, "http-equiv" => "Content-Type", "content" => "text/html; charset=utf-8") if @output_meta_tag == 'xhtml'
32
+ tag!(:meta, "charset" => "utf-8") if @output_meta_tag == 'html5'
32
33
  instance_eval(&block)
33
34
  end
34
35
  end
@@ -53,6 +54,20 @@ module Markaby
53
54
  xhtml_html(attrs, &block)
54
55
  end
55
56
 
57
+ # Builds an html tag with HTML5 doctype instead.
58
+ def html5(attrs = {}, &block)
59
+ enable_html5!
60
+ html5_html(attrs, &block)
61
+ end
62
+
63
+ def enable_html5!
64
+ self.tagset = Markaby::HTML5
65
+
66
+ Markaby::Builder::HTML5_OPTIONS.each do |k, v|
67
+ self.instance_variable_set("@#{k}".to_sym, v)
68
+ end
69
+ end
70
+
56
71
  private
57
72
 
58
73
  def xhtml_html(attrs = {}, &block)
@@ -60,5 +75,10 @@ module Markaby
60
75
  declare!(:DOCTYPE, :html, :PUBLIC, *tagset.doctype)
61
76
  tag!(:html, @root_attributes.merge(attrs), &block)
62
77
  end
78
+
79
+ def html5_html(attrs = {}, &block)
80
+ declare!(:DOCTYPE, :html)
81
+ tag!(:html, @root_attributes.merge(attrs), &block)
82
+ end
63
83
  end
64
84
  end