w2tags 0.9.3

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 (89) hide show
  1. data/COPYING +340 -0
  2. data/LICENSE +6 -0
  3. data/MIT-LICENSE +18 -0
  4. data/Manifest.txt +95 -0
  5. data/README.rdoc +264 -0
  6. data/Rakefile +23 -0
  7. data/VERSION +1 -0
  8. data/bin/w2tags +143 -0
  9. data/doc/ERB.HOT.rdoc +82 -0
  10. data/doc/FAQ.rdoc +81 -0
  11. data/doc/HAML.rdoc +310 -0
  12. data/doc/HOT.rdoc +137 -0
  13. data/doc/History.rdoc +757 -0
  14. data/doc/W2TAGS.rdoc +150 -0
  15. data/example/common.hot +11 -0
  16. data/example/from_readme.erb +78 -0
  17. data/example/from_readme.w2erb +64 -0
  18. data/example/from_w2tags.erb +32 -0
  19. data/example/from_w2tags.w2erb +32 -0
  20. data/example/rails_basic.hot +10 -0
  21. data/hot/erb.hot +156 -0
  22. data/hot/erb_form.hot +42 -0
  23. data/hot/erb_head.hot +15 -0
  24. data/hot/erb_jquery.hot +8 -0
  25. data/hot/erb_merb.hot +12 -0
  26. data/hot/erb_table.hot +43 -0
  27. data/hot/html.hot +31 -0
  28. data/hot/jquery.hot +88 -0
  29. data/hot/nvelocity.hot +23 -0
  30. data/hot/rails/sc_zebra.hot +10 -0
  31. data/hot/rails/scaffold.hot +15 -0
  32. data/hot/vm.hot +9 -0
  33. data/hot/vm2.hot +34 -0
  34. data/hot/vm_crud.hot +34 -0
  35. data/hot/vm_popup.hot +74 -0
  36. data/hot/xul.hot +114 -0
  37. data/lib/w2tags/block/plain_text.rb +57 -0
  38. data/lib/w2tags/block/remark.rb +37 -0
  39. data/lib/w2tags/block/sass.rb +66 -0
  40. data/lib/w2tags/merb_hook.rb +15 -0
  41. data/lib/w2tags/parser.rb +975 -0
  42. data/lib/w2tags/rails_hook.rb +15 -0
  43. data/lib/w2tags/sinatra_hook.rb +50 -0
  44. data/lib/w2tags.rb +100 -0
  45. data/plugins//w2tags//README +2 -0
  46. data/plugins//w2tags//generators//w2scaffold//USAGE +29 -0
  47. data/plugins//w2tags//generators//w2scaffold//templates//controller.rb +85 -0
  48. data/plugins//w2tags//generators//w2scaffold//templates//functional_test.rb +45 -0
  49. data/plugins//w2tags//generators//w2scaffold//templates//helper.rb +2 -0
  50. data/plugins//w2tags//generators//w2scaffold//templates//helper_test.rb +4 -0
  51. data/plugins//w2tags//generators//w2scaffold//templates//layout.html.erb +17 -0
  52. data/plugins//w2tags//generators//w2scaffold//templates//style.css +54 -0
  53. data/plugins//w2tags//generators//w2scaffold//templates//view_edit.html.erb +18 -0
  54. data/plugins//w2tags//generators//w2scaffold//templates//view_edit.html.w2erb +17 -0
  55. data/plugins//w2tags//generators//w2scaffold//templates//view_index.html.erb +24 -0
  56. data/plugins//w2tags//generators//w2scaffold//templates//view_index.html.w2erb +14 -0
  57. data/plugins//w2tags//generators//w2scaffold//templates//view_new.html.erb +17 -0
  58. data/plugins//w2tags//generators//w2scaffold//templates//view_new.html.w2erb +16 -0
  59. data/plugins//w2tags//generators//w2scaffold//templates//view_show.html.erb +10 -0
  60. data/plugins//w2tags//generators//w2scaffold//templates//view_show.html.w2erb +9 -0
  61. data/plugins//w2tags//generators//w2scaffold//w2scaffold_generator.rb +106 -0
  62. data/plugins//w2tags//install.rb +1 -0
  63. data/spec/spec_helper.rb +17 -0
  64. data/spec/w2tags_spec.rb +8 -0
  65. data/tasks/ann.rake +81 -0
  66. data/tasks/bones.rake +21 -0
  67. data/tasks/gem.rake +126 -0
  68. data/tasks/git.rake +41 -0
  69. data/tasks/manifest.rake +49 -0
  70. data/tasks/notes.rake +28 -0
  71. data/tasks/post_load.rake +39 -0
  72. data/tasks/rdoc.rake +51 -0
  73. data/tasks/rubyforge.rake +57 -0
  74. data/tasks/setup.rb +268 -0
  75. data/tasks/spec.rake +55 -0
  76. data/tasks/svn.rake +48 -0
  77. data/tasks/test.rake +38 -0
  78. data/test/enlightning.hot +3 -0
  79. data/test/feature.hot +28 -0
  80. data/test/parser_test.rb +203 -0
  81. data/test/tricky.hot +8 -0
  82. data/test/vars.hot +30 -0
  83. data/test/w2tags_basic_usability.rb +187 -0
  84. data/test/w2tags_enlightning.rb +42 -0
  85. data/test/w2tags_form.rb +32 -0
  86. data/test/w2tags_hot.rb +85 -0
  87. data/test/w2tags_hot_var.rb +115 -0
  88. data/test/w2tags_no_parsing.rb +37 -0
  89. metadata +163 -0
data/tasks/setup.rb ADDED
@@ -0,0 +1,268 @@
1
+ # $Id$
2
+
3
+ require 'rubygems'
4
+ require 'rake'
5
+ require 'rake/clean'
6
+ require 'fileutils'
7
+ require 'ostruct'
8
+
9
+ class OpenStruct; undef :gem; end
10
+
11
+ PROJ = OpenStruct.new(
12
+ # Project Defaults
13
+ :name => 'w2tags',
14
+ :summary => 'Its Way to Tags',
15
+ :description => 'w2tags is the way to tags, a short cut / macros. when it do it use some patern define in files (HOT file) to produce tags from minimal code to become full fledge tags',
16
+ :changes => nil,
17
+ :authors => 'Widi Harsojo',
18
+ :email => 'wharsojo@gmail.com',
19
+ :url => "\000",
20
+ :version => ENV['VERSION'] || '0.9.3',
21
+ :exclude => %w(tmp$ bak$ ~$ CVS \.svn/ \.git/ ^pkg/),
22
+ :release_name => ENV['RELEASE'],
23
+
24
+ # System Defaults
25
+ :ruby_opts => %w(-w),
26
+ :libs => [],
27
+ :manifest_file => 'Manifest.txt',
28
+ :history_file => 'doc/History.rdoc',
29
+ :readme_file => 'README.rdoc',
30
+
31
+ # Announce
32
+ :ann => OpenStruct.new(
33
+ :file => 'announcement.txt',
34
+ :text => nil,
35
+ :paragraphs => [],
36
+ :email => {
37
+ :from => nil,
38
+ :to => %w(ruby-talk@ruby-lang.org),
39
+ :server => 'localhost',
40
+ :port => 25,
41
+ :domain => ENV['HOSTNAME'],
42
+ :acct => nil,
43
+ :passwd => nil,
44
+ :authtype => :plain
45
+ }
46
+ ),
47
+
48
+ # Gem Packaging
49
+ :gem => OpenStruct.new(
50
+ :dependencies => [],
51
+ :executables => nil,
52
+ :extensions => FileList['ext/**/extconf.rb'],
53
+ :files => nil,
54
+ :need_tar => false,
55
+ :need_zip => false,
56
+ :extras => {}
57
+ ),
58
+
59
+ # File Annotations
60
+ :notes => OpenStruct.new(
61
+ :exclude => %w(^tasks/setup\.rb$),
62
+ :extensions => %w(.txt .rb .erb) << '',
63
+ :tags => %w(FIXME OPTIMIZE TODO)
64
+ ),
65
+
66
+ # Rcov
67
+ :rcov => OpenStruct.new(
68
+ :dir => 'coverage',
69
+ :opts => %w[--sort coverage -T],
70
+ :threshold => 90.0,
71
+ :threshold_exact => false
72
+ ),
73
+
74
+ # Rdoc
75
+ :rdoc => OpenStruct.new(
76
+ :opts => [],
77
+ :include => %w(^lib/ ^bin/ ^ext/ \.txt$ \.rdoc$ MIT-LICENSE COPYING),
78
+ :exclude => %w(extconf\.rb$),
79
+ :main => nil,
80
+ :dir => 'doc',
81
+ :remote_dir => nil
82
+ ),
83
+
84
+ # Rubyforge
85
+ :rubyforge => OpenStruct.new(
86
+ :name => "\000"
87
+ ),
88
+
89
+ # Rspec
90
+ :spec => OpenStruct.new(
91
+ :files => FileList['spec/**/*_spec.rb'],
92
+ :opts => []
93
+ ),
94
+
95
+ # Subversion Repository
96
+ :svn => OpenStruct.new(
97
+ :root => nil,
98
+ :path => '',
99
+ :trunk => 'trunk',
100
+ :tags => 'tags',
101
+ :branches => 'branches'
102
+ ),
103
+
104
+ # Test::Unit
105
+ :test => OpenStruct.new(
106
+ :files => FileList['test/**/test_*.rb'],
107
+ :file => 'test/all.rb',
108
+ :opts => []
109
+ )
110
+ )
111
+
112
+ # Load the other rake files in the tasks folder
113
+ rakefiles = Dir.glob('tasks/*.rake').sort
114
+ rakefiles.unshift(rakefiles.delete('tasks/post_load.rake')).compact!
115
+ import(*rakefiles)
116
+
117
+ # Setup the project libraries
118
+ %w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
119
+
120
+ # Setup some constants
121
+ WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM unless defined? WIN32
122
+
123
+ DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
124
+
125
+ def quiet( &block )
126
+ io = [STDOUT.dup, STDERR.dup]
127
+ STDOUT.reopen DEV_NULL
128
+ STDERR.reopen DEV_NULL
129
+ block.call
130
+ ensure
131
+ STDOUT.reopen io.first
132
+ STDERR.reopen io.last
133
+ $stdout, $stderr = STDOUT, STDERR
134
+ end
135
+
136
+ DIFF = if WIN32 then 'diff.exe'
137
+ else
138
+ if quiet {system "gdiff", __FILE__, __FILE__} then 'gdiff'
139
+ else 'diff' end
140
+ end unless defined? DIFF
141
+
142
+ SUDO = if WIN32 then ''
143
+ else
144
+ if quiet {system 'which sudo'} then 'sudo'
145
+ else '' end
146
+ end
147
+
148
+ RCOV = WIN32 ? 'rcov.bat' : 'rcov'
149
+ RDOC = WIN32 ? 'rdoc.bat' : 'rdoc'
150
+ GEM = WIN32 ? 'gem.bat' : 'gem'
151
+
152
+ %w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
153
+ begin
154
+ require lib
155
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", true}
156
+ rescue LoadError
157
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", false}
158
+ end
159
+ end
160
+ HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
161
+ system("svn --version 2>&1 > #{DEV_NULL}"))
162
+ HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
163
+ system("git --version 2>&1 > #{DEV_NULL}"))
164
+
165
+ # Reads a file at +path+ and spits out an array of the +paragraphs+
166
+ # specified.
167
+ #
168
+ # changes = paragraphs_of('History.txt', 0..1).join("\n\n")
169
+ # summary, *description = paragraphs_of('README.txt', 3, 3..8)
170
+ #
171
+ def paragraphs_of( path, *paragraphs )
172
+ title = String === paragraphs.first ? paragraphs.shift : nil
173
+ ary = File.read(path).delete("\r").split(/\n\n+/)
174
+
175
+ result = if title
176
+ tmp, matching = [], false
177
+ rgxp = %r/^=+\s*#{Regexp.escape(title)}/i
178
+ paragraphs << (0..-1) if paragraphs.empty?
179
+
180
+ ary.each do |val|
181
+ if val =~ rgxp
182
+ break if matching
183
+ matching = true
184
+ rgxp = %r/^=+/i
185
+ elsif matching
186
+ tmp << val
187
+ end
188
+ end
189
+ tmp
190
+ else ary end
191
+
192
+ result.values_at(*paragraphs)
193
+ end
194
+
195
+ # Adds the given gem _name_ to the current project's dependency list. An
196
+ # optional gem _version_ can be given. If omitted, the newest gem version
197
+ # will be used.
198
+ #
199
+ def depend_on( name, version = nil )
200
+ spec = Gem.source_index.find_name(name).last
201
+ version = spec.version.to_s if version.nil? and !spec.nil?
202
+
203
+ PROJ.gem.dependencies << case version
204
+ when nil; [name]
205
+ when %r/^\d/; [name, ">= #{version}"]
206
+ else [name, version] end
207
+ end
208
+
209
+ # Adds the given arguments to the include path if they are not already there
210
+ #
211
+ def ensure_in_path( *args )
212
+ args.each do |path|
213
+ path = File.expand_path(path)
214
+ $:.unshift(path) if test(?d, path) and not $:.include?(path)
215
+ end
216
+ end
217
+
218
+ # Find a rake task using the task name and remove any description text. This
219
+ # will prevent the task from being displayed in the list of available tasks.
220
+ #
221
+ def remove_desc_for_task( names )
222
+ Array(names).each do |task_name|
223
+ task = Rake.application.tasks.find {|t| t.name == task_name}
224
+ next if task.nil?
225
+ task.instance_variable_set :@comment, nil
226
+ end
227
+ end
228
+
229
+ # Change working directories to _dir_, call the _block_ of code, and then
230
+ # change back to the original working directory (the current directory when
231
+ # this method was called).
232
+ #
233
+ def in_directory( dir, &block )
234
+ curdir = pwd
235
+ begin
236
+ cd dir
237
+ return block.call
238
+ ensure
239
+ cd curdir
240
+ end
241
+ end
242
+
243
+ # Scans the current working directory and creates a list of files that are
244
+ # candidates to be in the manifest.
245
+ #
246
+ def manifest_files
247
+ files = []
248
+ exclude = Regexp.new(PROJ.exclude.join('|'))
249
+ Find.find '.' do |path|
250
+ path.sub! %r/^(\.\/|\/)/o, ''
251
+ next unless test ?f, path
252
+ next if path =~ exclude
253
+ files << path
254
+ end
255
+ files.sort!
256
+ end
257
+
258
+ # We need a "valid" method thtat determines if a string is suitable for use
259
+ # in the gem specification.
260
+ #
261
+ class Object
262
+ def valid?
263
+ return !(self.empty? or self == "\000") if self.respond_to?(:to_str)
264
+ return false
265
+ end
266
+ end
267
+
268
+ # EOF
data/tasks/spec.rake ADDED
@@ -0,0 +1,55 @@
1
+ # $Id$
2
+
3
+ if HAVE_SPEC_RAKE_SPECTASK
4
+ require 'spec/rake/verify_rcov'
5
+
6
+ namespace :spec do
7
+
8
+ desc 'Run all specs with basic output'
9
+ Spec::Rake::SpecTask.new(:run) do |t|
10
+ t.ruby_opts = PROJ.ruby_opts
11
+ t.spec_opts = PROJ.spec.opts
12
+ t.spec_files = PROJ.spec.files
13
+ t.libs += PROJ.libs
14
+ end
15
+
16
+ desc 'Run all specs with text output'
17
+ Spec::Rake::SpecTask.new(:specdoc) do |t|
18
+ t.ruby_opts = PROJ.ruby_opts
19
+ t.spec_opts = PROJ.spec.opts + ['--format', 'specdoc']
20
+ t.spec_files = PROJ.spec.files
21
+ t.libs += PROJ.libs
22
+ end
23
+
24
+ if HAVE_RCOV
25
+ desc 'Run all specs with RCov'
26
+ Spec::Rake::SpecTask.new(:rcov) do |t|
27
+ t.ruby_opts = PROJ.ruby_opts
28
+ t.spec_opts = PROJ.spec.opts
29
+ t.spec_files = PROJ.spec.files
30
+ t.libs += PROJ.libs
31
+ t.rcov = true
32
+ t.rcov_dir = PROJ.rcov.dir
33
+ t.rcov_opts = PROJ.rcov.opts + ['--exclude', 'spec']
34
+ end
35
+
36
+ RCov::VerifyTask.new(:verify) do |t|
37
+ t.threshold = PROJ.rcov.threshold
38
+ t.index_html = File.join(PROJ.rcov.dir, 'index.html')
39
+ t.require_exact_threshold = PROJ.rcov.threshold_exact
40
+ end
41
+
42
+ task :verify => :rcov
43
+ remove_desc_for_task %w(spec:clobber_rcov)
44
+ end
45
+
46
+ end # namespace :spec
47
+
48
+ desc 'Alias to spec:run'
49
+ task :spec => 'spec:run'
50
+
51
+ task :clobber => 'spec:clobber_rcov' if HAVE_RCOV
52
+
53
+ end # if HAVE_SPEC_RAKE_SPECTASK
54
+
55
+ # EOF
data/tasks/svn.rake ADDED
@@ -0,0 +1,48 @@
1
+ # $Id$
2
+
3
+ if HAVE_SVN
4
+
5
+ unless PROJ.svn.root
6
+ info = %x/svn info ./
7
+ m = %r/^Repository Root:\s+(.*)$/.match(info)
8
+ PROJ.svn.root = (m.nil? ? '' : m[1])
9
+ end
10
+ PROJ.svn.root = File.join(PROJ.svn.root, PROJ.svn.path) unless PROJ.svn.path.empty?
11
+
12
+ namespace :svn do
13
+
14
+ # A prerequisites task that all other tasks depend upon
15
+ task :prereqs
16
+
17
+ desc 'Show tags from the SVN repository'
18
+ task :show_tags => 'svn:prereqs' do |t|
19
+ tags = %x/svn list #{File.join(PROJ.svn.root, PROJ.svn.tags)}/
20
+ tags.gsub!(%r/\/$/, '')
21
+ tags = tags.split("\n").sort {|a,b| b <=> a}
22
+ puts tags
23
+ end
24
+
25
+ desc 'Create a new tag in the SVN repository'
26
+ task :create_tag => 'svn:prereqs' do |t|
27
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
28
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
29
+
30
+ svn = PROJ.svn
31
+ trunk = File.join(svn.root, svn.trunk)
32
+ tag = "%s-%s" % [PROJ.name, PROJ.version]
33
+ tag = File.join(svn.root, svn.tags, tag)
34
+ msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
35
+
36
+ puts "Creating SVN tag '#{tag}'"
37
+ unless system "svn cp -m '#{msg}' #{trunk} #{tag}"
38
+ abort "Tag creation failed"
39
+ end
40
+ end
41
+
42
+ end # namespace :svn
43
+
44
+ task 'gem:release' => 'svn:create_tag'
45
+
46
+ end # if PROJ.svn.path
47
+
48
+ # EOF
data/tasks/test.rake ADDED
@@ -0,0 +1,38 @@
1
+ # $Id$
2
+
3
+ require 'rake/testtask'
4
+
5
+ namespace :test do
6
+
7
+ Rake::TestTask.new(:run) do |t|
8
+ t.libs = PROJ.libs
9
+ t.test_files = if test(?f, PROJ.test.file) then [PROJ.test.file]
10
+ else PROJ.test.files end
11
+ t.ruby_opts += PROJ.ruby_opts
12
+ t.ruby_opts += PROJ.test.opts
13
+ end
14
+
15
+ if HAVE_RCOV
16
+ desc 'Run rcov on the unit tests'
17
+ task :rcov => :clobber_rcov do
18
+ opts = PROJ.rcov.opts.dup << '-o' << PROJ.rcov.dir
19
+ opts = opts.join(' ')
20
+ files = if test(?f, PROJ.test.file) then [PROJ.test.file]
21
+ else PROJ.test.files end
22
+ files = files.join(' ')
23
+ sh "#{RCOV} #{files} #{opts}"
24
+ end
25
+
26
+ task :clobber_rcov do
27
+ rm_r 'coverage' rescue nil
28
+ end
29
+ end
30
+
31
+ end # namespace :test
32
+
33
+ desc 'Alias to test:run'
34
+ task :test => 'test:run'
35
+
36
+ task :clobber => 'test:clobber_rcov' if HAVE_RCOV
37
+
38
+ # EOF
@@ -0,0 +1,3 @@
1
+
2
+ >>_w
3
+ $0
data/test/feature.hot ADDED
@@ -0,0 +1,28 @@
1
+ >>_d
2
+ .rows$$ $0
3
+
4
+ >>_x
5
+ %x$$ $0
6
+
7
+ >>_y
8
+ %x$$ =$0
9
+
10
+ >>_int
11
+ %div#$0.reverse~ /
12
+
13
+ >>_int2
14
+ &tbl=dodol
15
+ %input{type="text" id="&tbl!_$0" name="$0"}= @&tbl!.$0
16
+
17
+ >>_form
18
+ %form$${method="post" action="==$0"}
19
+
20
+ >>_form2
21
+ %form$${method="post" action="$0."}
22
+
23
+ >>_form3
24
+ %form$${method="post" action="$0{}{}{}."}
25
+
26
+ >>_code
27
+ %span$$ $0
28
+
@@ -0,0 +1,203 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'w2tags'
4
+ require 'w2tags_no_parsing'
5
+ require 'w2tags_basic_usability'
6
+ require 'w2tags_form'
7
+ require 'w2tags_hot'
8
+ require 'w2tags_hot_var'
9
+ require 'w2tags_enlightning'
10
+
11
+ class ParserTest < Test::Unit::TestCase
12
+
13
+ W2TAGS = W2Tags::Parser.new
14
+ W2TAGS.silent= true
15
+
16
+ include W2tagsNoParsing
17
+ include W2tagsBasicUsability
18
+ include W2tagsForm
19
+ include W2tagsHotVar
20
+ include W2tagsEnlightning
21
+
22
+ def test_haml_like
23
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
24
+ %div dodol
25
+ %div garut
26
+ W2TAGS____________
27
+ <div>dodol</div>
28
+ <div>garut</div>
29
+ EXPECTED__________
30
+
31
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
32
+ %div
33
+ %div garut
34
+ W2TAGS____________
35
+ <div>
36
+ <div>garut</div>
37
+ </div>
38
+ EXPECTED__________
39
+
40
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
41
+ %div#container
42
+ %div.daerah garut
43
+ W2TAGS____________
44
+ <div id="container">
45
+ <div class="daerah">garut</div>
46
+ </div>
47
+ EXPECTED__________
48
+
49
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
50
+ #container
51
+ .daerah garut
52
+ #di.jawa barat
53
+ W2TAGS____________
54
+ <div id="container">
55
+ <div class="daerah">garut</div>
56
+ <div id="di" class="jawa">barat</div>
57
+ </div>
58
+ EXPECTED__________
59
+
60
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
61
+ #ids.dodol.garut
62
+ #ids.dodol.garut/
63
+ W2TAGS____________
64
+ <div id="ids" class="dodol garut">
65
+ <div id="ids" class="dodol garut"/>
66
+ </div>
67
+ EXPECTED__________
68
+
69
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
70
+ #ids.dodol.garut{kota="malang"}
71
+ #ids.dodol.garut{kota="malang"} /
72
+ W2TAGS____________
73
+ <div id="ids" class="dodol garut" kota="malang">
74
+ <div id="ids" class="dodol garut" kota="malang"/>
75
+ </div>
76
+ EXPECTED__________
77
+
78
+ end
79
+
80
+ def test_next_tags
81
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
82
+ %html
83
+ ^
84
+ W2TAGS____________
85
+ <html>
86
+ <head>
87
+ </head>
88
+ </html>
89
+ EXPECTED__________
90
+
91
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
92
+ %ul
93
+ ^ list 1;list 2
94
+ %ol
95
+ ^ list 1;list 2
96
+ W2TAGS____________
97
+ <ul>
98
+ <li>list 1</li>
99
+ <li>list 2</li>
100
+ </ul>
101
+ <ol>
102
+ <li>list 1</li>
103
+ <li>list 2</li>
104
+ </ol>
105
+ EXPECTED__________
106
+
107
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
108
+ %dl
109
+ ^ list 1;list 2
110
+ %dd
111
+ ^ list 1;list 2
112
+ W2TAGS____________
113
+ <dl>
114
+ <dt>list 1</dt>
115
+ <dt>list 2</dt>
116
+ </dl>
117
+ <dd>
118
+ <dt>list 1</dt>
119
+ <dt>list 2</dt>
120
+ </dd>
121
+ EXPECTED__________
122
+
123
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
124
+ %select
125
+ ^{value="1"} list 1
126
+ ^{value="2"} list 2
127
+ W2TAGS____________
128
+ <select>
129
+ <option value="1">list 1</option>
130
+ <option value="2">list 2</option>
131
+ </select>
132
+ EXPECTED__________
133
+
134
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
135
+ %form
136
+ ^ 1
137
+ ^ 2
138
+ W2TAGS____________
139
+ <form>
140
+ <input value="1"/>
141
+ <input value="2"/>
142
+ </form>
143
+ EXPECTED__________
144
+
145
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
146
+ %table
147
+ %tr
148
+ ^ header 1;header 2
149
+ %tr
150
+ ^ column 1;column 2
151
+ W2TAGS____________
152
+ <table>
153
+ <tr>
154
+ <th>header 1</th>
155
+ <th>header 2</th>
156
+ </tr>
157
+ <tr>
158
+ <td>column 1</td>
159
+ <td>column 2</td>
160
+ </tr>
161
+ </table>
162
+ EXPECTED__________
163
+ end
164
+
165
+ def test_w2tags
166
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
167
+ :names
168
+ W2TAGS____________
169
+ <input name="names" />
170
+ EXPECTED__________
171
+
172
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
173
+ :names#ids.classes OK
174
+ W2TAGS____________
175
+ <input name="names" id="ids" class="classes" value="OK"/>
176
+ EXPECTED__________
177
+ end
178
+
179
+ def test_hot_htm
180
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
181
+ %js jquery
182
+ -js liveclick
183
+ W2TAGS____________
184
+ <script type="text/javascript" src="jquery.js" > </script>
185
+ <script type="text/javascript" src="liveclick.js" > </script>
186
+ EXPECTED__________
187
+
188
+ easy_test(<<W2TAGS____________,<<EXPECTED__________)
189
+ %css base
190
+ -css layout
191
+ W2TAGS____________
192
+ <link rel="stylesheet" href="base.css" type="text/css" media="screen, projection" />
193
+ <link rel="stylesheet" href="layout.css" type="text/css" media="screen, projection" />
194
+ EXPECTED__________
195
+ end
196
+
197
+ private
198
+
199
+ def easy_test(w2tg,expected)
200
+ assert_equal(expected,W2TAGS::parse_line(w2tg,true).join)
201
+ end
202
+
203
+ end
data/test/tricky.hot ADDED
@@ -0,0 +1,8 @@
1
+ >>input
2
+ <input *all*value="$0"/>
3
+
4
+ >>text
5
+ <input *all*type="text" value="$0"/>
6
+
7
+ >>submit
8
+ <input *all*type="submit" value="$0"/>
data/test/vars.hot ADDED
@@ -0,0 +1,30 @@
1
+ >>_vars
2
+ -!
3
+ $$
4
+ nm=$:
5
+ id=$#
6
+ cl=$.
7
+ at=$@
8
+
9
+ >>_var2
10
+ -!
11
+ $$
12
+ nm=*:
13
+ id=*#
14
+ cl=*.
15
+ at=*@
16
+
17
+ >>_var3
18
+ -!
19
+ *all*
20
+ *name*
21
+ *id*
22
+ *class*
23
+ *@
24
+
25
+ >>_var4
26
+ $me
27
+ *code*
28
+
29
+ >>_var5
30
+ $tag