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/README.rdoc ADDED
@@ -0,0 +1,264 @@
1
+ = W2TAGS
2
+ === Run on MRI Ruby : 1.8.x / 1.9.x
3
+
4
+ C:\>w2tags -irb
5
+ ARGV : -irb
6
+
7
+ Your W2Tags instance object stored in WH...
8
+ Ex: puts WH.parse_line("#content\n %span Hello")
9
+ Shortcut command => wh("#content\n %span Hello")
10
+
11
+ irb(main):001:0> wh(<<END)
12
+ irb(main):002:0" #wow
13
+ irb(main):003:0" #kereen
14
+ irb(main):004:0" %span Hello World
15
+ irb(main):005:0" END
16
+ =>C:/mingw/lib/ruby/gems/1.9.1/gems/w2tags-0.9.1/hot/html.hot
17
+ <div id="wow">
18
+ <div id="kereen">
19
+ <span>Hello World</span>
20
+ </div>
21
+ </div>
22
+ => nil
23
+ irb(main):006:0>
24
+
25
+ == DESCRIPTION:
26
+
27
+ W2Tags is the way to tags, a short cut / macros. When it do, it use some patern
28
+ define in HOT file to produce tags from minimal code to become full fledge tags.
29
+
30
+ == FEATURES
31
+
32
+ Before it release it use some patern, but I reliaze, today web development have
33
+ some popular patern in view engine, so I change the patern. Now syntax mimics HAML
34
+ to easy transisition, and proven to be useable and best.
35
+
36
+ Extended Syntax are the remain patern before I choose HAML-like syntax like
37
+ "^" - NextTag (next tag will be use after using a tag like "ul" next tag "li"),
38
+ Redefinition NextTag command using "~^", define variable "&var=",
39
+ define uniq variable "@var=", Key-Variable
40
+
41
+ "$:","*:" for attribute NAME,
42
+ "$#","*#" for attribute ID,
43
+ "$.","*." for attribute CLASS,
44
+ "$@","*@" for custome attribute,
45
+ "$$" for all Key-Variable.
46
+
47
+ This Constanta will be ready every time it parse the W2TAGS HOT (% / -).
48
+
49
+ HOT file is the powerfull features in w2tags, it contains some patern that you can
50
+ call it later using command "%" or "-", it contains one or more line of html/w2tags/hot
51
+ command, if you detect in you source that not DRY you can migrate the patern to HOT
52
+ files and you can call it later
53
+
54
+ The rest of the command you can see in each RDOC Documentation or by reading
55
+ the source of W2Tags::Parser or see in Test folder,
56
+ So you can code less typing.
57
+
58
+ == PROBLEMS:
59
+
60
+ === Demo files
61
+
62
+ Some of Demo not yet convert to new patern so please not to tray it, I'll do it
63
+ if I have some time to do it.
64
+
65
+ === Auto closing for Code
66
+
67
+ Closing tags for HAML code like:
68
+
69
+ - if <condition>
70
+
71
+ does not have automatically close so you must closing it your self with
72
+
73
+ - end
74
+
75
+ for w2erb, the HOT have definition for autoclosing and the help from
76
+ method on parser "shortcut_exec(regex)", now it can auto intelligent
77
+ closing
78
+
79
+ -if index>100
80
+ .bigger bigger than 100
81
+ -elsif index>50
82
+ .bigger bigger than 50 but less than 100
83
+ -else
84
+ .less less than 50
85
+
86
+ .common
87
+ Common Tag
88
+
89
+ work around to have a closing code, you can use feature to save some patern
90
+ in a hot file and use it in your code, example: "common.hot"
91
+
92
+ >>_if
93
+ - if $*
94
+ <</
95
+ - end
96
+
97
+ and use it in your code:
98
+
99
+ -if <condition>
100
+
101
+ and it do automatic closing
102
+
103
+
104
+ == SYNOPSIS:
105
+
106
+ === HAML Like Syntax
107
+
108
+ just use it like haml basic, and if alredy comfort with that syntax you
109
+ can extend the syntax and combine it with patern definition created in hot
110
+ file or you can create your own hot file.
111
+
112
+ ==== Example 1 - HAML:
113
+
114
+ #content
115
+ %h1 menu
116
+ %ul
117
+ %li menu 1
118
+ %li menu 2
119
+
120
+ will produce
121
+
122
+ <div id="content">
123
+ <h1>menu</h1>
124
+ <ul>
125
+ <li>menu 1</li>
126
+ <li>menu 2</li>
127
+ </ul>
128
+ </div>
129
+
130
+ Extended syntax that produce the same result
131
+
132
+ #content
133
+ %h1 menu
134
+ %ul
135
+ ^ menu 1; menu 2
136
+
137
+ or if the patern is so common, it can be save in a hot file
138
+ and use it as hot command. Example: inside "common.hot"
139
+
140
+ >>_ul
141
+ %ul
142
+ ^$*
143
+
144
+ and code in source:
145
+
146
+ !hot!common
147
+ #content
148
+ %h1 menu
149
+ -ul menu 1; menu 2
150
+
151
+ ==== Example 2 - Form input
152
+
153
+ HAML format:
154
+
155
+ %h1 New user
156
+
157
+ = error_messages_for :user
158
+
159
+ -form_for @user do |f|
160
+ %p
161
+ %b Name
162
+ %br
163
+ = f.text_field :name
164
+ %p
165
+ %b Email
166
+ %br
167
+ = f.text_field :email
168
+ %p
169
+ %b Last login
170
+ %br
171
+ = f.datetime_select :last_login
172
+
173
+ %p
174
+ = f.submit "Create"
175
+ = link_to 'Back', users_path
176
+
177
+ You can see that it not DRY, some patern will go to HOT files "rails_basic.hot"
178
+
179
+ >>_input
180
+ %p
181
+ %b $0.capitalize.gsub('_',' ')-
182
+ %br
183
+ = f.text_field :$0
184
+
185
+ >>_submit
186
+ !/
187
+ %p
188
+ = f.submit "$0"
189
+
190
+ and code in source:
191
+
192
+ !hot!rails_basic
193
+ %h1 New user
194
+
195
+ = error_messages_for :user
196
+
197
+ -form_for @user do |f|
198
+ -input name;email;last_login
199
+ -submit Create
200
+
201
+ = link_to 'Back', users_path
202
+
203
+ == REQUIREMENTS:
204
+
205
+ no requirement for now, since it use only regular expression to do
206
+ parsing.
207
+
208
+ == INSTALL:
209
+
210
+ sudo gem install w2tags
211
+
212
+ === COMMAND LINE
213
+
214
+ get it from commandline "w2tags"
215
+
216
+ How to WaytoTags:
217
+ ~~~~~~~~~~~~~~~~~~~~~~~
218
+ syntax:
219
+ w2tags [*.w2htm] [-a] [-d:*opt*]
220
+ OR
221
+ w2tags [file1,file2,file3] [-b] [-d:*opt*]
222
+
223
+ example:
224
+ 1. w2tags -a #=> translate all file with ext: w2htm
225
+ 2. w2tags *.w2xml -a #=> translate all file with ext: w2xml
226
+ 3. w2tags file1.w2htm #=> translate a file
227
+ 4. w2tags file1.w2htm -b #=> translate a file with no initialize/finalize
228
+ 5. w2tags file1.w2htm -d:parser #=> translate with debug parser
229
+ 6. w2tags file1.w2htm -d:constanta #=> translate with debug constanta
230
+ 7. w2tags file1.w2htm -d:stack #=> translate with debug stack indentation
231
+ 8. w2tags -irb #=> Start IRB with WH as instance object of W2Tags
232
+ 9. w2tags -rails #=> Copy w2scaffold Rails and set environment.rb
233
+
234
+ Enjoy...
235
+
236
+ === RAILS HOOK
237
+
238
+ add inside file "config/environment.rb" in the bottom:
239
+
240
+ require 'w2tags'
241
+ require 'w2tags/rails_hook'
242
+
243
+ You can automatically add by using commandline "w2tags -rails"
244
+
245
+ === MERB HOOK
246
+
247
+ add inside file "config/init.rb" in the bottom:
248
+
249
+ require 'w2tags'
250
+ require 'w2tags/merb_hook'
251
+
252
+ === SINATRA HOOK
253
+
254
+ sinatra usualy consist only one file "main.rb", so just add below sinatra require:
255
+
256
+ require 'w2tags'
257
+ require 'w2tags/sinatra_hook'
258
+
259
+ == LICENSE:
260
+
261
+ Copyright (c) 2008 - 2009 Widi Harsojo
262
+
263
+ Distributed under the user's choice of the {GPL Version 2}[http://www.gnu.org/licenses/old-licenses/gpl-2.0.html]
264
+ (see COPYING for details) or the MIT License .
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ # Look in the tasks/setup.rb file for the various options that can be
2
+ # configured in this Rakefile. The .rake files in the tasks directory
3
+ # are where the options are used.
4
+
5
+ load 'tasks/setup.rb'
6
+
7
+ ensure_in_path 'lib'
8
+ require 'w2tags'
9
+
10
+ task :default => 'spec:run'
11
+
12
+ PROJ.name = 'w2tags'
13
+ PROJ.authors = 'widi harsojo'
14
+ PROJ.email = 'wharsojo@gmail.com'
15
+ PROJ.url = 'w2tags.rubyforge.org'
16
+ PROJ.rubyforge.name = 'w2tags'
17
+
18
+ PROJ.rdoc.opts << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
19
+ PROJ.rdoc.opts << '--charset' << 'utf-8' << '--all'
20
+
21
+ PROJ.spec.opts << '--color'
22
+
23
+ # EOF
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.9.1
data/bin/w2tags ADDED
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env ruby
2
+ # The command line W2tags parser.
3
+ # How to WaytoTags:
4
+ # ~~~~~~~~~~~~~~~~~~~~~~~
5
+ # syntax:
6
+ # w2tags [*.w2htm] [-a] [-d:*opt*]
7
+ # OR
8
+ # w2tags [file1,file2,file3] [-b] [-d:*opt*]
9
+ #
10
+ # example:
11
+ # 1. w2tags -a #=> translate all file with ext: w2htm
12
+ # 2. w2tags *.w2xml -a #=> translate all file with ext: w2xml
13
+ # 3. w2tags file1.w2htm #=> translate a file
14
+ # 4. w2tags file1.w2htm -b #=> translate a file with no initialize/finalize
15
+ # 5. w2tags file1.w2htm -d:parser #=> translate with debug parser
16
+ # 6. w2tags file1.w2htm -d:constanta #=> translate with debug constanta
17
+ # 7. w2tags file1.w2htm -d:stack #=> translate with debug stack indentation
18
+ # 8. w2tags -irb #=> Start IRB with WT as instant object of W2Tags
19
+ #
20
+ # Enjoy...
21
+
22
+ require File.expand_path(
23
+ File.join(File.dirname(__FILE__),%w[.. lib w2tags]))
24
+ wpath= File.dirname(__FILE__).gsub(/bin$/,'')
25
+ def howto_w2tags
26
+ puts <<END
27
+
28
+ How to WaytoTags:
29
+ ~~~~~~~~~~~~~~~~~~~~~~~
30
+ syntax:
31
+ w2tags [*.w2htm] [-a] [-d:*opt*]
32
+ OR
33
+ w2tags [file1,file2,file3] [-b] [-d:*opt*]
34
+
35
+ example:
36
+ 1. w2tags -a #=> translate all file with ext: w2htm
37
+ 2. w2tags *.w2xml -a #=> translate all file with ext: w2xml
38
+ 3. w2tags file1.w2htm #=> translate a file
39
+ 4. w2tags file1.w2htm -b #=> translate a file with no initialize/finalize
40
+ 5. w2tags file1.w2htm -d:parser #=> translate with debug parser
41
+ 6. w2tags file1.w2htm -d:constanta #=> translate with debug constanta
42
+ 7. w2tags file1.w2htm -d:stack #=> translate with debug stack indentation
43
+ 8. w2tags -irb #=> Start IRB with WH as instance object of W2Tags
44
+ 9. w2tags -rails #=> Copy w2scaffold Rails and set environment.rb
45
+
46
+ Enjoy...
47
+ END
48
+
49
+ end
50
+
51
+ arg = ARGV
52
+ if arg.size>0
53
+ arg = ['w2htm'] + arg if arg.size==1 && arg[0]=='-a'
54
+ puts 'ARGV : '+arg.join(" ")
55
+ puts arg[1]
56
+
57
+ WH = W2Tags::Parser.new
58
+
59
+ x = arg.select {|s|s[0,3]=='-d:'}
60
+ #WH.dbg[:stack] = (x.size==0)
61
+ x.each do |s|
62
+ WH.dbg[:parse] = true if s=='-d:parser'
63
+ WH.dbg[:stack] = true if s=='-d:stack'
64
+ WH.dbg[:constanta] = true if s=='-d:constanta'
65
+ WH.dbg[:show_hot] = true if s=='-d:show_hot'
66
+ end
67
+
68
+ if arg[0]=='-irb'
69
+ ARGV.shift
70
+
71
+ class Object
72
+ def wh(str)
73
+ puts WH.parse_line(str)
74
+ end
75
+ end
76
+
77
+ require 'irb'
78
+ puts "Your W2Tags instance object stored in WH..."
79
+ puts 'Ex: puts WH.parse_line "#content\\n %span Hello"'
80
+ puts 'Shortcut wh() => puts WH.parse_line()'
81
+ puts ''
82
+
83
+ IRB.start
84
+ elsif arg[0]=='-rails'
85
+ if !File.exist?('vendor/plugins')
86
+ puts 'No Folder: vendor/plugins...'
87
+ elsif !File.exist?('config/environment.rb')
88
+ puts 'No File: config/environment.rb...'
89
+ else
90
+ ttl_copy = 0
91
+ require 'fileutils'
92
+ Dir[wpath + "plugins/**/*"].each do |fl|
93
+ if !File.directory?(fl)
94
+ path= fl.gsub(/.*\/plugins\//,'vendor/plugins/')
95
+ dir = File.dirname(path)
96
+ FileUtils.mkdir_p(dir) if !File.exist?(dir)
97
+ if !File.exist?(path)
98
+ ttl_copy += 1
99
+ puts "Copy w2tags plugins for rails..." if ttl_copy==1
100
+ puts "=> #{fl.gsub(/.*\/w2tags\//,'')}"
101
+ File.open(path, 'wb') { |file| file.write(File.read(fl)) }
102
+ end
103
+ end
104
+ end
105
+ ttl_copy = 0
106
+ Dir[wpath + "hot/rails/**/*"].each do |fl|
107
+ path= fl.gsub(/.*\/rails\//,'')
108
+ if !File.exist?(path)
109
+ ttl_copy += 1
110
+ puts "Copy w2tags HOT files..." if ttl_copy==1
111
+ puts "=> #{path}"
112
+ File.open(path, 'wb') { |file| file.write(File.read(fl)) }
113
+ end
114
+ end
115
+ content = File.read('config/environment.rb')
116
+ ori= content.length
117
+ content << "\nrequire 'w2tags'" if /\n *require *\'w2tags\'/ !~ content
118
+ content << "\nrequire 'w2tags/rails_hook'" if /\n *require *\'w2tags\/rails_hook\'/ !~ content
119
+ if ori != content.length
120
+ puts 'Update config/environment.rb...'
121
+ File.open('config/environment.rb', 'wb') { |file| file.write(content) }
122
+ end
123
+ puts(<<END)
124
+
125
+ FINISH W2TAGS for RAILS...
126
+ You can try w2scaffold:
127
+
128
+ script/generate w2scaffold post title:string body:text published:boolean
129
+ rake db:migrate
130
+ script/server
131
+
132
+ END
133
+ end
134
+ else
135
+ case arg[1]
136
+ when '-a' ;WH.parse_files(Dir["*.#{arg[0]}*"])
137
+ when '-b' ;WH.parse_files(arg[0].split(','),false)
138
+ else ;WH.parse_files(arg[0].split(','))
139
+ end
140
+ end
141
+ else
142
+ howto_w2tags
143
+ end
data/doc/ERB.HOT.rdoc ADDED
@@ -0,0 +1,82 @@
1
+ = ERB HOT
2
+ definition for file with extention of ".erb", this template is use on some of the
3
+ well know frame work.
4
+
5
+ == DEFINED COMMAND
6
+
7
+ === INITIALIZE & FINALLIZE
8
+ this command are use on (appended) so user who use it frequently can define
9
+ any kind of element / tags for the beginning / ending document.
10
+
11
+ %initialize
12
+ not use but you can define it again
13
+
14
+ %finallize
15
+ use for extract all end of tags, it use command ",/"
16
+
17
+ === INCLUDE ANOTHER HOT FILES
18
+ for merb application, I define 2 short cut of how you can use another hot file:
19
+
20
+ -merb_table (it will include: erb_merb, erb_table, erb_jquery)
21
+ it use when you define html for listing data, usually for method of "index"
22
+
23
+ -merb_form (it will include: erb_merb, erb_form, erb_jquery)
24
+ it use when you define html for fill in form, usually for method of
25
+ "new", or "edit".
26
+
27
+ === AUTOCLOSE with -END
28
+ these definition are auto close with "-end".
29
+
30
+ -if
31
+ -elsif
32
+ -else
33
+ ex:###############################################
34
+ -if @page.page_count>1 && !@page.first_page?
35
+ %a.first_page{href="?page=1"} First
36
+ -else
37
+ %span.first_page First
38
+ &nbsp;
39
+ ##################################################
40
+ <% if @page.page_count>1 && !@page.first_page? %>
41
+ <a class="first_page" href="?page=1">First</a>
42
+ <% else %>
43
+ <span class="first_page">First</span>
44
+ <% end %>
45
+ &nbsp;
46
+
47
+ -for
48
+ -each
49
+ -times
50
+ ex:###############################################
51
+ -times pgt;pg1 = pg1 + 1
52
+ -if pg1 == @page.current_page
53
+ %span.current_page <%= pg1 %>
54
+ -else
55
+ %a.page_index{href="?page=<%= pg1 %>"} <%= pg1 %>
56
+ &nbsp;
57
+ ##################################################
58
+ <% pgt.times do pg1 = pg1 + 1 %>
59
+ <% if pg1 == @page.current_page %>
60
+ <span class="current_page"><%= pg1 %></span>
61
+ <% else %>
62
+ <a class="page_index" href="?page=<%= pg1 %>"><%= pg1 %></a>
63
+ <% end %>
64
+ &nbsp;
65
+ <% end %>
66
+
67
+ === COMMAND
68
+
69
+ -end
70
+ -
71
+ ex:###############################################
72
+ - page = 25
73
+ ##################################################
74
+ <% page = 25 %>
75
+
76
+ === EXPAND TAGS
77
+
78
+ %br
79
+ %hr
80
+ %img
81
+ %img=
82
+
data/doc/FAQ.rdoc ADDED
@@ -0,0 +1,81 @@
1
+ = Frequently Asked Questions
2
+
3
+ == W2TAGS
4
+
5
+ === How do I put a punctuation mark after an element, like:
6
+
7
+ I Like <strong class="bold"><i class="italic">cake</i></strong>!
8
+
9
+ I Like (%strong.bold (%i.italic cake%)%)!
10
+
11
+ === I have Patern in HOT with define close and autoclosing (!/) at first line. How do I use it, since patern write after define close.
12
+
13
+ If you have "ul_li" patern ( below ), it can't be use since define closing ( <</ )
14
+ immediately push to stack after "ul_li" patern called, and then perser will loop inside
15
+ "ul_li" patern line by line, it counter the first line to popup all the stack where
16
+ indentation is the same or wider, and it means current patern have same indentations.
17
+
18
+ >>ul_li
19
+ !/
20
+ <div>
21
+ %ul
22
+ ^$*
23
+ <</
24
+ </div>
25
+
26
+ to get work-around of this situations, you define two patern like this:
27
+
28
+ >>ul_li
29
+ !/
30
+ <div>
31
+ %ul
32
+ ^$*
33
+ %end_div
34
+
35
+ >>end_div
36
+ <</
37
+ </div>
38
+
39
+ the last line in "ul_li" patern, will call %end_div and it will push define closing
40
+ to stack "end".
41
+
42
+ In README.txt if patern change to have auto closing ( !/ ), the change are:
43
+
44
+ >>if
45
+ !/
46
+ - if $*
47
+ %end_if
48
+
49
+ >>end_if
50
+ <</
51
+ - end
52
+
53
+ === Why you not implement > and < (Remove White Spaces)
54
+
55
+ Not implement it, since focus on how to make it DRY in w2tags.
56
+
57
+ HAML style
58
+
59
+ %ul.tabSet
60
+ %li.tabs.off<
61
+ %a Overview
62
+ %li.tabs.off<
63
+ %a 200 calories
64
+
65
+ W2TAGS style
66
+
67
+ %ul.tabSet
68
+ ~^ <li class="tabs off"><a href="#">$0</a></li>
69
+ ^ Overview;200 calories
70
+
71
+ === Can it source have multiple w2tags command in one line
72
+
73
+ Yes it can!, just make HOT a patern like this:
74
+
75
+ >>_w
76
+ $0
77
+
78
+ -w %li inli;: input
79
+
80
+ <li>inli</li>
81
+ <input value="input"/>