summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Lasseter <Nathan Lasseter nathan@bytemark.co.uk>2015-01-22 00:20:02 +0000
committerNathan Lasseter <Nathan Lasseter nathan@bytemark.co.uk>2015-01-22 00:20:02 +0000
commitd927f4a0e7c87c6ff50e69f9fbaa4ade827d2f06 (patch)
tree6552fb38e8192e9d35a80e0d706a0e7ec906c4be
parente1d758ddf72d7d8cd29bb0170abcf1397bd67f71 (diff)
Major changes - almost working, just gotta go through tags
-rw-r--r--lib/tag.rb184
-rw-r--r--lib/tags.rb144
-rw-r--r--lib/virgil.rb1
3 files changed, 173 insertions, 156 deletions
diff --git a/lib/tag.rb b/lib/tag.rb
index b401acb..0144bb0 100644
--- a/lib/tag.rb
+++ b/lib/tag.rb
@@ -1,34 +1,49 @@
module Virgil
module Tag
class Doctype
- def initialize
- @tag = "<!DOCTYPE " + yield + ">"
+ def initialize(&block)
+ @tag = "<!DOCTYPE " +
+ self.instance_eval(&block) +
+ ">"
end
def to_s
@tag
end
end
class Comment
- def initialize
- @tag = "<!--" + yield + "-->"
+ def initialize(&block)
+ @tag = "<!--" +
+ self.instance_eval(&block) +
+ "-->"
end
def to_s
@tag
end
end
+
class Common
- def initialize(tag, attrs)
- @tag = "<#{tag}" + Utils.unfold(attrs) + ">" +
- yield +
- "</#{tag}>"
+ def initialize(tag, attrs, &block)
+ @tag = "<#{tag}" +
+ Utils.unfold(attrs) +
+ ">" +
+ self.instance_eval(&block) +
+ "</#{tag}>"
end
def to_s
@tag
end
+ def subtag(attrs = {})
+ Common.new(__callee__, attrs, &Proc.new).to_s
+ end
+ def subtagsingle(attrs = {})
+ Common_Single.new(__callee__, attrs).to_s
+ end
end
class Common_Single
def initialize(tag, attrs)
- @tag = "<#{tag}" + Utils.unfold(attrs) + "/>"
+ @tag = "<#{tag}" +
+ Utils.unfold(attrs) +
+ ">"
end
def to_s
@tag
@@ -36,155 +51,12 @@ module Virgil
end
class Map < Common
- def initialize(attrs, &block)
- @tag = "<map" + Utils.unfold(attrs) + ">" +
- self.instance_eval(&block) +
- "</map>"
- end
- def area
- "<area>" +
- "</area>"
- end
+ alias :area :subtagsingle
end
- end
- module Tags
- def doctype
- Tag::Doctype.new(&Proc.new).to_s
+ class Head < Common
+ alias :link :subtagsingle
+ alias :title :subtag
end
- def comment
- Tag::Comment.new(&Proc.new).to_s
- end
- def common(attrs = {})
- Tag::Common.new(__callee__, attrs, &Proc.new).to_s
- end
- def common_single(attrs = {})
- Tag::Common_Single.new(__callee__, attrs).to_s
- end
-
- def map(attrs = {})
- Tag::Map.new(attrs, &Proc.new).to_s
- end
-
- alias :a :common
- alias :abbr :common
- alias :acronym :common
- alias :address :common
- alias :applet :common
- alias :article :common
- alias :aside :common
- alias :audio :common
- alias :b :common
- alias :base :common
- alias :basefont :common
- alias :bdi :common
- alias :bdo :common
- alias :big :common
- alias :blockquote :common
- alias :body :common
- alias :br :common
- alias :button :common
- alias :canvas :common
- alias :caption :common
- alias :center :common
- alias :cite :common
- alias :code :common
- alias :col :common
- alias :colgroup :common
- alias :datalist :common
- alias :dd :common
- alias :del :common
- alias :details :common
- alias :dfn :common
- alias :dialog :common
- alias :dir :common
- alias :div :common
- alias :dl :common
- alias :dt :common
- alias :em :common
- alias :embed :common
- alias :fieldset :common
- alias :figcaption :common
- alias :figure :common
- alias :font :common
- alias :footer :common
- alias :form :common
- alias :frame :common
- alias :frameset :common
- alias :h1 :common
- alias :h2 :common
- alias :h3 :common
- alias :h4 :common
- alias :h5 :common
- alias :h6 :common
- alias :head :common
- alias :header :common
- alias :hgroup :common
- alias :hr :common
- alias :html :common
- alias :i :common
- alias :iframe :common
- alias :img :common_single
- alias :input :common
- alias :ins :common
- alias :kbd :common
- alias :keygen :common
- alias :label :common
- alias :legend :common
- alias :li :common
- alias :link :common
- alias :main :common
- alias :mark :common
- alias :menu :common
- alias :menuitem :common
- alias :meta :common
- alias :meter :common
- alias :nav :common
- alias :noframes :common
- alias :noscript :common
- alias :object :common
- alias :ol :common
- alias :optgroup :common
- alias :option :common
- alias :output :common
- alias :p :common
- alias :param :common
- alias :pre :common
- alias :progress :common
- alias :q :common
- alias :rp :common
- alias :rt :common
- alias :ruby :common
- alias :s :common
- alias :samp :common
- alias :script :common
- alias :section :common
- alias :select :common
- alias :small :common
- alias :source :common
- alias :span :common
- alias :strike :common
- alias :strong :common
- alias :style :common
- alias :sub :common
- alias :summary :common
- alias :sup :common
- alias :table :common
- alias :tbody :common
- alias :td :common
- alias :textarea :common
- alias :tfoot :common
- alias :th :common
- alias :thead :common
- alias :time :common
- alias :title :common
- alias :tr :common
- alias :track :common
- alias :tt :common
- alias :u :common
- alias :ul :common
- alias :var :common
- alias :video :common
- alias :wbr :common
end
end
diff --git a/lib/tags.rb b/lib/tags.rb
new file mode 100644
index 0000000..e148a77
--- /dev/null
+++ b/lib/tags.rb
@@ -0,0 +1,144 @@
+module Virgil
+ module Tags
+ def doctype
+ Tag::Doctype.new(&Proc.new).to_s
+ end
+ def comment
+ Tag::Comment.new(&Proc.new).to_s
+ end
+ def common(attrs = {})
+ Tag::Common.new(__callee__, attrs, &Proc.new).to_s
+ end
+ def common_single(attrs = {})
+ Tag::Common_Single.new(__callee__, attrs).to_s
+ end
+
+ def map(attrs = {})
+ Tag::Map.new("map", attrs, &Proc.new).to_s
+ end
+
+ def head(attrs = {})
+ Tag::Head.new("head", attrs, &Proc.new).to_s
+ end
+
+ alias :a :common
+ alias :b :common
+ alias :br :common_single
+ alias :blockquote :common
+ alias :body :common
+ alias :center :common
+ alias :code :common
+ alias :h1 :common
+ alias :h2 :common
+ alias :h3 :common
+ alias :h4 :common
+ alias :h5 :common
+ alias :h6 :common
+ alias :hr :common_single
+ alias :html :common
+ alias :i :common
+ alias :img :common_single
+ alias :li :common
+ alias :ol :common
+ alias :p :common
+ alias :pre :common
+ alias :script :common
+ alias :style :common
+ alias :u :common
+ alias :ul :common
+
+# Haven't gotten to these yet
+# alias :abbr :common
+# alias :acronym :common
+# alias :address :common
+# alias :applet :common
+# alias :article :common
+# alias :aside :common
+# alias :audio :common
+# alias :base :common
+# alias :basefont :common
+# alias :bdi :common
+# alias :bdo :common
+# alias :big :common
+# alias :button :common
+# alias :canvas :common
+# alias :caption :common
+# alias :cite :common
+# alias :col :common
+# alias :colgroup :common
+# alias :datalist :common
+# alias :dd :common
+# alias :del :common
+# alias :details :common
+# alias :dfn :common
+# alias :dialog :common
+# alias :dir :common
+# alias :div :common
+# alias :dl :common
+# alias :dt :common
+# alias :em :common
+# alias :embed :common
+# alias :fieldset :common
+# alias :figcaption :common
+# alias :figure :common
+# alias :font :common
+# alias :footer :common
+# alias :form :common
+# alias :frame :common
+# alias :frameset :common
+# alias :header :common
+# alias :hgroup :common
+# alias :iframe :common
+# alias :input :common
+# alias :ins :common
+# alias :kbd :common
+# alias :keygen :common
+# alias :label :common
+# alias :legend :common
+# alias :main :common
+# alias :mark :common
+# alias :menu :common
+# alias :menuitem :common
+# alias :meta :common
+# alias :meter :common
+# alias :nav :common
+# alias :noframes :common
+# alias :noscript :common
+# alias :object :common
+# alias :optgroup :common
+# alias :option :common
+# alias :output :common
+# alias :param :common
+# alias :progress :common
+# alias :q :common
+# alias :rp :common
+# alias :rt :common
+# alias :ruby :common
+# alias :s :common
+# alias :samp :common
+# alias :section :common
+# alias :select :common
+# alias :small :common
+# alias :source :common
+# alias :span :common
+# alias :strike :common
+# alias :strong :common
+# alias :sub :common
+# alias :summary :common
+# alias :sup :common
+# alias :table :common
+# alias :tbody :common
+# alias :td :common
+# alias :textarea :common
+# alias :tfoot :common
+# alias :th :common
+# alias :thead :common
+# alias :time :common
+# alias :tr :common
+# alias :track :common
+# alias :tt :common
+# alias :var :common
+# alias :video :common
+# alias :wbr :common
+ end
+end
diff --git a/lib/virgil.rb b/lib/virgil.rb
index ef1c9fc..028a767 100644
--- a/lib/virgil.rb
+++ b/lib/virgil.rb
@@ -1,2 +1,3 @@
require './lib/utils'
require './lib/tag'
+require './lib/tags'