tagz 0.0.1

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.
Files changed (73) hide show
  1. data/a.rb +11 -0
  2. data/gemspec.rb +27 -0
  3. data/gen_readme.rb +32 -0
  4. data/install.rb +210 -0
  5. data/lib/tagz.rb +376 -0
  6. data/lib/tagz/rails.rb +198 -0
  7. data/rails/README +182 -0
  8. data/rails/Rakefile +10 -0
  9. data/rails/app/controllers/application.rb +7 -0
  10. data/rails/app/controllers/tagz_controller.rb +51 -0
  11. data/rails/app/helpers/application_helper.rb +3 -0
  12. data/rails/app/helpers/tagz_helper.rb +2 -0
  13. data/rails/app/views/layouts/layout.rb +16 -0
  14. data/rails/app/views/tagz/b.rb +19 -0
  15. data/rails/app/views/tagz/c.rb +9 -0
  16. data/rails/app/views/tagz/d.rhtml +17 -0
  17. data/rails/app/views/tagz/e.rb +3 -0
  18. data/rails/config/boot.rb +45 -0
  19. data/rails/config/database.yml +36 -0
  20. data/rails/config/environment.rb +65 -0
  21. data/rails/config/environments/development.rb +21 -0
  22. data/rails/config/environments/production.rb +18 -0
  23. data/rails/config/environments/test.rb +19 -0
  24. data/rails/config/lighttpd.conf +54 -0
  25. data/rails/config/routes.rb +23 -0
  26. data/rails/doc/README_FOR_APP +2 -0
  27. data/rails/log/development.log +6713 -0
  28. data/rails/log/fastcgi.crash.log +103 -0
  29. data/rails/log/lighttpd.access.log +171 -0
  30. data/rails/log/lighttpd.error.log +116 -0
  31. data/rails/log/production.log +0 -0
  32. data/rails/log/server.log +0 -0
  33. data/rails/log/test.log +0 -0
  34. data/rails/public/404.html +30 -0
  35. data/rails/public/500.html +30 -0
  36. data/rails/public/dispatch.cgi +10 -0
  37. data/rails/public/dispatch.fcgi +24 -0
  38. data/rails/public/dispatch.rb +10 -0
  39. data/rails/public/favicon.ico +0 -0
  40. data/rails/public/images/rails.png +0 -0
  41. data/rails/public/index.html +277 -0
  42. data/rails/public/javascripts/application.js +2 -0
  43. data/rails/public/javascripts/controls.js +833 -0
  44. data/rails/public/javascripts/dragdrop.js +942 -0
  45. data/rails/public/javascripts/effects.js +1088 -0
  46. data/rails/public/javascripts/prototype.js +2515 -0
  47. data/rails/public/robots.txt +1 -0
  48. data/rails/script/about +3 -0
  49. data/rails/script/breakpointer +3 -0
  50. data/rails/script/console +3 -0
  51. data/rails/script/destroy +3 -0
  52. data/rails/script/generate +3 -0
  53. data/rails/script/performance/benchmarker +3 -0
  54. data/rails/script/performance/profiler +3 -0
  55. data/rails/script/plugin +3 -0
  56. data/rails/script/process/inspector +3 -0
  57. data/rails/script/process/reaper +3 -0
  58. data/rails/script/process/spawner +3 -0
  59. data/rails/script/runner +3 -0
  60. data/rails/script/server +4 -0
  61. data/rails/test/functional/tagz_controller_test.rb +18 -0
  62. data/rails/test/test_helper.rb +28 -0
  63. data/rails/tmp/cache/index.html-gzip-1958902-7552-1181801882 +0 -0
  64. data/rails/tmp/cache/javascripts/effects.js-gzip-1958907-38200-1181801882 +0 -0
  65. data/rails/tmp/cache/javascripts/prototype.js-gzip-1958906-71260-1181801882 +0 -0
  66. data/rails/tmp/sessions/ruby_sess.365e696810aa7418 +0 -0
  67. data/rails/tmp/sessions/ruby_sess.3ab0cb2f589d3855 +0 -0
  68. data/rails/tmp/sessions/ruby_sess.c812e68d96a6e99f +0 -0
  69. data/rails/tmp/sessions/ruby_sess.e0a954440a7e27d7 +0 -0
  70. data/sample/a.rb +9 -0
  71. data/test/tagz.rb +436 -0
  72. data/tidy +3 -0
  73. metadata +161 -0
data/a.rb ADDED
@@ -0,0 +1,11 @@
1
+
2
+ require 'lib/tagz'
3
+ include Tagz
4
+
5
+ puts tagz {
6
+ a_ 'a'
7
+ b_ 'b'
8
+ c_ 'c'
9
+ }
10
+
11
+
@@ -0,0 +1,27 @@
1
+
2
+ lib, version = File::basename(File::dirname(File::expand_path(__FILE__))).split %r/-/, 2
3
+
4
+ require 'rubygems'
5
+
6
+ Gem::Specification::new do |spec|
7
+ $VERBOSE = nil
8
+ spec.name = lib
9
+ spec.version = version
10
+ spec.platform = Gem::Platform::RUBY
11
+ spec.summary = lib
12
+
13
+ spec.files = Dir::glob "**/**"
14
+ spec.executables = Dir::glob("bin/*").map{|exe| File::basename exe}
15
+
16
+ spec.require_path = "lib"
17
+ spec.autorequire = lib
18
+
19
+ spec.has_rdoc = File::exist? "doc"
20
+ spec.test_suite_file = "test/#{ lib }.rb" if File::directory? "test"
21
+
22
+ spec.extensions << "extconf.rb" if File::exists? "extconf.rb"
23
+
24
+ spec.author = "Ara T. Howard"
25
+ spec.email = "ara.t.howard@noaa.gov"
26
+ spec.homepage = "http://codeforpeople.com/lib/ruby/#{ lib }/"
27
+ end
@@ -0,0 +1,32 @@
1
+ require 'pathname'
2
+
3
+ $VERBOSE=nil
4
+
5
+ def indent s, n = 2
6
+ ws = ' ' * n
7
+ s.gsub %r/^/, ws
8
+ end
9
+
10
+ template = IO::read 'README.tmpl'
11
+
12
+ samples = ''
13
+ prompt = '~ > '
14
+
15
+ Dir['sample*/*'].sort.each do |sample|
16
+ samples << "\n" << " <========< #{ sample } >========>" << "\n\n"
17
+
18
+ cmd = "cat #{ sample }"
19
+ samples << indent(prompt + cmd, 2) << "\n\n"
20
+ samples << indent(`#{ cmd }`, 4) << "\n"
21
+
22
+ cmd = "ruby #{ sample }"
23
+ samples << indent(prompt + cmd, 2) << "\n\n"
24
+
25
+ cmd = "ruby -Ilib #{ sample }"
26
+ samples << indent(`#{ cmd } 2>&1`, 4) << "\n"
27
+ end
28
+
29
+ #samples.gsub! %r/^/, ' '
30
+
31
+ readme = template.gsub %r/^\s*@samples\s*$/, samples
32
+ print readme
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rbconfig'
3
+ require 'find'
4
+ require 'ftools'
5
+ require 'tempfile'
6
+ include Config
7
+
8
+ LIBDIR = "lib"
9
+ LIBDIR_MODE = 0644
10
+
11
+ BINDIR = "bin"
12
+ BINDIR_MODE = 0755
13
+
14
+
15
+ $srcdir = CONFIG["srcdir"]
16
+ $version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
17
+ $libdir = File.join(CONFIG["libdir"], "ruby", $version)
18
+ $archdir = File.join($libdir, CONFIG["arch"])
19
+ $site_libdir = $:.find {|x| x =~ /site_ruby$/}
20
+ $bindir = CONFIG["bindir"] || CONFIG['BINDIR']
21
+ $ruby_install_name = CONFIG['ruby_install_name'] || CONFIG['RUBY_INSTALL_NAME'] || 'ruby'
22
+ $ruby_ext = CONFIG['EXEEXT'] || ''
23
+ $ruby = File.join($bindir, ($ruby_install_name + $ruby_ext))
24
+
25
+ if !$site_libdir
26
+ $site_libdir = File.join($libdir, "site_ruby")
27
+ elsif $site_libdir !~ %r/#{Regexp.quote($version)}/
28
+ $site_libdir = File.join($site_libdir, $version)
29
+ end
30
+
31
+ def install_rb(srcdir=nil, destdir=nil, mode=nil, bin=nil)
32
+ #{{{
33
+ path = []
34
+ dir = []
35
+ Find.find(srcdir) do |f|
36
+ next unless FileTest.file?(f)
37
+ next if (f = f[srcdir.length+1..-1]) == nil
38
+ next if (/CVS$/ =~ File.dirname(f))
39
+ next if f =~ %r/\.lnk/
40
+ path.push f
41
+ dir |= [File.dirname(f)]
42
+ end
43
+ for f in dir
44
+ next if f == "."
45
+ next if f == "CVS"
46
+ File::makedirs(File.join(destdir, f))
47
+ end
48
+ for f in path
49
+ next if (/\~$/ =~ f)
50
+ next if (/^\./ =~ File.basename(f))
51
+ unless bin
52
+ File::install(File.join(srcdir, f), File.join(destdir, f), mode, true)
53
+ else
54
+ from = File.join(srcdir, f)
55
+ to = File.join(destdir, f)
56
+ shebangify(from) do |sf|
57
+ $deferr.print from, " -> ", File::catname(from, to), "\n"
58
+ $deferr.printf "chmod %04o %s\n", mode, to
59
+ File::install(sf, to, mode, false)
60
+ end
61
+ end
62
+ end
63
+ #}}}
64
+ end
65
+ def shebangify f
66
+ #{{{
67
+ open(f) do |fd|
68
+ buf = fd.read 42
69
+ if buf =~ %r/^\s*#\s*!.*ruby/o
70
+ ftmp = Tempfile::new("#{ $$ }_#{ File::basename(f) }")
71
+ begin
72
+ fd.rewind
73
+ ftmp.puts "#!#{ $ruby }"
74
+ while((buf = fd.read(8192)))
75
+ ftmp.write buf
76
+ end
77
+ ftmp.close
78
+ yield ftmp.path
79
+ ensure
80
+ ftmp.close!
81
+ end
82
+ else
83
+ yield f
84
+ end
85
+ end
86
+ #}}}
87
+ end
88
+ def ARGV.switch
89
+ #{{{
90
+ return nil if self.empty?
91
+ arg = self.shift
92
+ return nil if arg == '--'
93
+ if arg =~ /^-(.)(.*)/
94
+ return arg if $1 == '-'
95
+ raise 'unknown switch "-"' if $2.index('-')
96
+ self.unshift "-#{$2}" if $2.size > 0
97
+ "-#{$1}"
98
+ else
99
+ self.unshift arg
100
+ nil
101
+ end
102
+ #}}}
103
+ end
104
+ def ARGV.req_arg
105
+ #{{{
106
+ self.shift || raise('missing argument')
107
+ #}}}
108
+ end
109
+ def linkify d, linked = []
110
+ #--{{{
111
+ if test ?d, d
112
+ versioned = Dir[ File::join(d, "*-[0-9].[0-9].[0-9].rb") ]
113
+ versioned.each do |v|
114
+ src, dst = v, v.gsub(%r/\-[\d\.]+\.rb$/, '.rb')
115
+ lnk = nil
116
+ begin
117
+ if test ?l, dst
118
+ lnk = "#{ dst }.lnk"
119
+ puts "#{ dst } -> #{ lnk }"
120
+ File::rename dst, lnk
121
+ end
122
+ unless test ?e, dst
123
+ puts "#{ src } -> #{ dst }"
124
+ File::copy src, dst
125
+ linked << dst
126
+ end
127
+ ensure
128
+ if lnk
129
+ at_exit do
130
+ puts "#{ lnk } -> #{ dst }"
131
+ File::rename lnk, dst
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
137
+ linked
138
+ #--}}}
139
+ end
140
+
141
+
142
+ #
143
+ # main program
144
+ #
145
+
146
+ libdir = $site_libdir
147
+ bindir = $bindir
148
+ no_linkify = false
149
+ linked = nil
150
+ help = false
151
+
152
+ usage = <<-usage
153
+ #{ File::basename $0 }
154
+ -d, --destdir <destdir>
155
+ -l, --libdir <libdir>
156
+ -b, --bindir <bindir>
157
+ -r, --ruby <ruby>
158
+ -n, --no_linkify
159
+ -s, --sudo
160
+ -h, --help
161
+ usage
162
+
163
+ begin
164
+ while switch = ARGV.switch
165
+ case switch
166
+ when '-d', '--destdir'
167
+ libdir = ARGV.req_arg
168
+ when '-l', '--libdir'
169
+ libdir = ARGV.req_arg
170
+ when '-b', '--bindir'
171
+ bindir = ARGV.req_arg
172
+ when '-r', '--ruby'
173
+ $ruby = ARGV.req_arg
174
+ when '-n', '--no_linkify'
175
+ no_linkify = true
176
+ when '-s', '--sudo'
177
+ sudo = 'sudo'
178
+ when '-h', '--help'
179
+ help = true
180
+ else
181
+ raise "unknown switch #{switch.dump}"
182
+ end
183
+ end
184
+ rescue
185
+ STDERR.puts $!.to_s
186
+ STDERR.puts usage
187
+ exit 1
188
+ end
189
+
190
+ if help
191
+ STDOUT.puts usage
192
+ exit
193
+ end
194
+
195
+ system "#{ sudo } #{ $ruby } pre-install.rb" if test(?s, 'pre-install.rb')
196
+
197
+ unless no_linkify
198
+ linked = linkify('lib') + linkify('bin')
199
+ end
200
+
201
+ system "#{ $ruby } extconf.rb && make && #{ sudo } make install" if test(?s, 'extconf.rb')
202
+
203
+ install_rb(LIBDIR, libdir, LIBDIR_MODE)
204
+ install_rb(BINDIR, bindir, BINDIR_MODE, bin=true)
205
+
206
+ if linked
207
+ linked.each{|path| File::rm_f path}
208
+ end
209
+
210
+ system "#{ sudo } #{ $ruby } post-install.rb" if test(?s, 'post-install.rb')
@@ -0,0 +1,376 @@
1
+ module Tagz
2
+ Tagz::VERSION = '0.0.1' unless defined? Tagz::VERSION
3
+ def self.version() VERSION end
4
+
5
+ class NotOpen < StandardError; end
6
+ class StillOpen < StandardError; end
7
+
8
+ module Fragment #--{{{
9
+ attr_accessor 'tag'
10
+ attr_accessor 'open'
11
+ attr_accessor 'added'
12
+ attr_accessor 'created_at'
13
+ alias_method 'open?', 'open'
14
+
15
+ def self.new str='', tag='', options = {} #--{{{
16
+ return str if Fragment === str
17
+ str.extend Fragment
18
+ str.tag = tag.to_s
19
+ str.stack << tag.to_s
20
+ str.open = true
21
+ str.added = { str.object_id => true }
22
+ options.each{|k,v| str.send "#{ k }=", v}
23
+ str.created_at = caller
24
+ str
25
+ end #--}}}
26
+
27
+ =begin
28
+ def tag
29
+ stack.last
30
+ end
31
+ =end
32
+
33
+ def stack
34
+ @stack ||= []
35
+ end
36
+
37
+ def push fragment
38
+ if Fragment === fragment
39
+ stack.push fragment.tag
40
+ end
41
+ end
42
+
43
+ def pop
44
+ stack.pop
45
+ end
46
+
47
+ def closes? other #--{{{
48
+ tag.to_s == other.tag.to_s
49
+ end #--}}}
50
+
51
+ def << content #--{{{
52
+ super content.to_s
53
+ end #--}}}
54
+
55
+ def add fragment #--{{{
56
+ push fragment
57
+ oid = fragment.object_id
58
+ self << fragment unless added[oid]
59
+ self
60
+ ensure
61
+ added[oid] = true
62
+ end #--}}}
63
+ end #--}}}
64
+
65
+ module Abilities #--{{{
66
+ def __tag_stack__ #--{{{
67
+ @__tag_stack__ ||= []
68
+ end #--}}}
69
+
70
+ def __tag_attrs__ attrs = {} #--{{{
71
+ return nil if attrs.empty?
72
+ ( 42 - 10 ).chr <<
73
+ case attrs
74
+ when Hash
75
+ attrs.map{|k,v| "#{ k }=#{ v.to_s.inspect }"}.join(" ")
76
+ else
77
+ attrs.to_s
78
+ end
79
+ end #--}}}
80
+
81
+ def __tag_start__ *argv, &block #--{{{
82
+ tag = argv.shift
83
+
84
+ case argv.size
85
+ when 0 # no attrs, no content
86
+ attrs = {}
87
+ content = nil
88
+ when 1 # string content
89
+ case argv.first
90
+ when Hash
91
+ attrs = argv.shift
92
+ content = nil
93
+ else
94
+ if block
95
+ attrs = argv.shift
96
+ content = nil
97
+ else
98
+ content = argv.shift
99
+ attrs = {}
100
+ end
101
+ end
102
+ when 2 # string attrs, string content OR string content, hash attrs
103
+ case argv.last
104
+ when Hash
105
+ attrs = argv.last
106
+ content = argv.first.to_s
107
+ else
108
+ attrs = argv.first
109
+ content = argv.last.to_s
110
+ end
111
+ else # string attrs, string content(s) OR string content(s), hash attrs
112
+ case argv.last
113
+ when Hash
114
+ attrs = argv.last
115
+ content = argv[0..-2].join
116
+ else
117
+ attrs = argv.first
118
+ content = argv[1..-1].join
119
+ end
120
+ end
121
+
122
+ if content and block
123
+ b = block and block = lambda{ "#{ content }#{ b.call }" }
124
+ end
125
+
126
+ if content and block.nil?
127
+ #block = lambda{ content }
128
+ end
129
+
130
+ stack = __tag_stack__
131
+
132
+ if block.nil?
133
+ start = Fragment( "<#{ tag }#{ __tag_attrs__ attrs } >#{ content }", tag )
134
+ stack << start
135
+ start
136
+ else
137
+ ### we reserve two bytes ( 0.chr 0.chr ) to avoid massive data shift/copy
138
+ start = Fragment( "<#{ tag }#{ __tag_attrs__ attrs } #{ 0.chr }#{ 0.chr }", tag )
139
+ stack << start
140
+ size = start.size
141
+ pos = ( (size - 2) .. (size - 1) )
142
+ top = stack.last
143
+ tid = top.object_id
144
+ ssize = stack.size
145
+
146
+
147
+ content = block.call top
148
+ content_was_added = size < start.size
149
+
150
+
151
+ ### handle dangling tags
152
+ if stack.size > ssize
153
+ i = ssize
154
+ while((opentag = stack[i]))
155
+ top.add opentag
156
+ i += 1
157
+ end
158
+ stack.pop until stack.size == ssize
159
+ end
160
+
161
+ ### TODO we could raise an error
162
+ =begin
163
+ until stack.last.object_id == tid
164
+ begin
165
+ last = stack.last
166
+ ne = last.created_at[3]
167
+ raise StillOpen, "<#{ last.tag }> @ '#{ ne }'"
168
+ ensure
169
+ stack.clear
170
+ end
171
+ end
172
+ =end
173
+
174
+ if content
175
+ top[pos] = ' >'
176
+ top.add content unless content_was_added
177
+ stop = Fragment( "</#{ tag }>", tag, :open => false )
178
+ top.add stop
179
+ top.open = false
180
+ else
181
+ top[pos] = '/>'
182
+ top.open = false
183
+ end
184
+
185
+ content = stack.pop
186
+
187
+ top = stack.last
188
+ if top and top.open?
189
+ top.add content
190
+ end
191
+
192
+ content
193
+ end
194
+ end #--}}}
195
+
196
+ def __tag_stop__ tag #--{{{
197
+ stack = __tag_stack__
198
+ top = stack.last
199
+ stop = Fragment( "</#{ tag }>", tag, :open => false )
200
+ if top
201
+ if stop.closes?(top)
202
+ top.add stop
203
+ top.open = false
204
+ content = stack.pop
205
+ top = stack.last
206
+ top.add content if top and top.open?
207
+ content
208
+ else
209
+ raise NotOpen, tag.to_s
210
+ end
211
+ else
212
+ raise NotOpen, tag.to_s
213
+ end
214
+ end #--}}}
215
+
216
+ def method_missing m, *a, &b #--{{{
217
+ case m.to_s
218
+ when %r/^(.*[^_])_(!)?$/o
219
+ m, bang = $1, $2
220
+ unless bang
221
+ __tag_start__ m, *a, &b
222
+ else
223
+ __tag_start__(m, *a){}
224
+ end
225
+ when %r/^_([^_].*)$/o
226
+ m = $1
227
+ __tag_stop__ m, *a, &b
228
+ else
229
+ super
230
+ end
231
+ end #--}}}
232
+
233
+ def tagz *argv, &block #--{{{
234
+ stack = __tag_stack__
235
+ top = stack.last
236
+ size = stack.size
237
+
238
+ unless block
239
+ top ||= Fragment()
240
+ if argv.empty?
241
+ top
242
+ else
243
+ string = argv.join
244
+ top.add string
245
+ string
246
+ end
247
+ else
248
+ obj = Tagz === self ? self : clone.instance_eval{ extend Tagz; self }
249
+ stack << (top=Fragment())
250
+ top = stack.last
251
+ tid = top.object_id
252
+
253
+ string = obj.instance_eval(&block)
254
+
255
+ until stack.last.object_id == tid
256
+ pop = stack.pop
257
+ last = stack.last
258
+ last.add pop
259
+ end
260
+
261
+ top = stack.pop
262
+
263
+ content_was_added = top.size > 0
264
+ top.add string unless content_was_added
265
+
266
+ top
267
+ end
268
+ end #--}}}
269
+ alias_method "markup", "tagz"
270
+ alias_method "__", "tagz"
271
+ alias_method "_", "tagz"
272
+
273
+ def Fragment(*a, &b) Fragment.new(*a, &b) end
274
+
275
+ ### TODO - i'd like to use 'tag' for these but action view has eaten it!
276
+ def element tag, *a, &b
277
+ __tag_stack__ << (top=Fragment())
278
+ __tag_start__ tag, *a, &b
279
+ __tag_stack__.pop
280
+ end
281
+ alias_method "e", "element"
282
+
283
+ def element_ tag, *a, &b
284
+ __tag_stack__ << (top=Fragment())
285
+ __tag_start__ tag, *a, &b
286
+ __tag_stack__.pop
287
+ end
288
+ alias_method "e_", "element_"
289
+
290
+ def _element tag, *a, &b
291
+ __tag_stack__ << (top=Fragment())
292
+ __tag_stop__ tag, *a, &b
293
+ __tag_stack__.pop
294
+ end
295
+ alias_method "_e", "_element"
296
+
297
+ def element! tag, *a, &b
298
+ b ||= lambda{}
299
+ __tag_stack__ << (top=Fragment())
300
+ __tag_start__ tag, *a, &b
301
+ __tag_stack__.pop
302
+ end
303
+ alias_method "e!", "element!"
304
+
305
+ def xhtml_ which = :transitional, *a, &b
306
+ decl =
307
+ %Q|<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-#{ which }.dtd'>|
308
+ attrs = {}
309
+ attrs.update 'xmlns' => 'http://www.w3.org/1999/xhtml',
310
+ 'xml:lang' => 'en'
311
+ decl << html_(attrs, &b)
312
+ end
313
+ end #--}}}
314
+
315
+ =begin
316
+ def concat s #--{{{
317
+ tagz << s.to_s
318
+ self
319
+ end #--}}}
320
+ def tag *a, &b #--{{{
321
+ __tag_start__ *a, &b
322
+ end #--}}}
323
+ def tag! *a, &b #--{{{
324
+ __tag_start__(*a){}
325
+ end #--}}}
326
+ def tag_ *a, &b #--{{{
327
+ __tag_start__ *a, &b
328
+ end #--}}}
329
+ def _tag *a, &b #--{{{
330
+ __tag_stop__ *a, &b
331
+ end #--}}}
332
+ =end
333
+
334
+ def self.included other #--{{{
335
+ other.module_eval{ include Abilities }
336
+ end #--}}}
337
+
338
+ def self.extend_object other #--{{{
339
+ other.extend Abilities
340
+ end #--}}}
341
+
342
+ class ::String
343
+ include Tagz
344
+ def tag *a, &b
345
+ tagz{ __tag_start__ self, *a, &b }
346
+ end
347
+ def tag_ *a, &b
348
+ tagz{ __tag_start__ self, *a, &b }
349
+ end
350
+ def _tag *a, &b
351
+ tagz{ __tag_start__ self, *a, &b }
352
+ end
353
+ def tag! *a
354
+ tagz{ __tag_start__(self, *a){} }
355
+ end
356
+ end
357
+
358
+ class ::Symbol
359
+ include Tagz
360
+ def tag *a, &b
361
+ tagz{ __tag_start__ self, *a, &b }
362
+ end
363
+ def tag_ *a, &b
364
+ tagz{ __tag_start__ self, *a, &b }
365
+ end
366
+ def _tag *a, &b
367
+ tagz{ __tag_start__ self, *a, &b }
368
+ end
369
+ def tag! *a
370
+ tagz{ __tag_start__(self, *a){} }
371
+ end
372
+ end
373
+
374
+ end
375
+
376
+ require File.join(File.dirname(__FILE__), 'tagz', 'rails') if defined? Rails