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/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"/>