From d927f4a0e7c87c6ff50e69f9fbaa4ade827d2f06 Mon Sep 17 00:00:00 2001 From: Nathan Lasseter Date: Thu, 22 Jan 2015 00:20:02 +0000 Subject: Major changes - almost working, just gotta go through tags --- lib/tag.rb | 184 +++++++++------------------------------------------------- lib/tags.rb | 144 +++++++++++++++++++++++++++++++++++++++++++++ lib/virgil.rb | 1 + 3 files changed, 173 insertions(+), 156 deletions(-) create mode 100644 lib/tags.rb 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 = "" + def initialize(&block) + @tag = "" end def to_s @tag end end class Comment - def initialize - @tag = "" + def initialize(&block) + @tag = "" end def to_s @tag end end + class Common - def initialize(tag, attrs) - @tag = "<#{tag}" + Utils.unfold(attrs) + ">" + - yield + - "" + def initialize(tag, attrs, &block) + @tag = "<#{tag}" + + Utils.unfold(attrs) + + ">" + + self.instance_eval(&block) + + "" 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 = "" + - self.instance_eval(&block) + - "" - end - def 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' -- cgit v1.2.1