w2tags 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
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