dang 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -3
  3. data/History.md +10 -0
  4. data/Manifest.txt +24 -25
  5. data/README.md +3 -3
  6. data/Rakefile +3 -3
  7. data/dang.gemspec +8 -8
  8. data/lib/dang/dang.rb +6 -6
  9. data/lib/dang/parser.kpeg +57 -23
  10. data/lib/dang/parser.rb +202 -71
  11. data/{spectory → specs}/attribute_spec.rb +1 -1
  12. data/{spectory → specs}/comment_spec.rb +1 -1
  13. data/{spectory → specs}/conditional_comment_spec.rb +1 -1
  14. data/{spectory → specs}/data_attribute_spec.rb +1 -1
  15. data/{spectory → specs}/doctype_spec.rb +1 -1
  16. data/{spectory → specs}/embedded_ruby_spec.rb +1 -1
  17. data/{spectory/v2 → specs/experiments}/array_classes_spec.rb +1 -1
  18. data/{spectory/v2 → specs/experiments}/filters/markdown_spec.rb +1 -1
  19. data/{spectory/v2 → specs/experiments}/hash_attribute_spec.rb +2 -2
  20. data/{spectory/v2 → specs/experiments}/script_exception_spec.rb +1 -1
  21. data/{spectory/v2 → specs/experiments}/style_exception_spec.rb +1 -1
  22. data/{spectory → specs}/file_spec.rb +1 -1
  23. data/{spectory → specs}/files/iamshane-com.html +0 -0
  24. data/{spectory → specs}/files/iamshane-com.html.dang +0 -0
  25. data/{spectory → specs}/filter_spec.rb +1 -1
  26. data/{spectory → specs}/helper.rb +0 -0
  27. data/specs/interpolation_spec.rb +12 -0
  28. data/{spectory → specs}/sanity_spec.rb +1 -1
  29. data/{spectory → specs}/script_spec.rb +1 -1
  30. data/{spectory → specs}/selector_spec.rb +1 -1
  31. data/{spectory → specs}/style_spec.rb +1 -1
  32. data/{spectory → specs}/tag_spec.rb +1 -1
  33. data/{spectory → specs}/well_formedness_spec.rb +1 -1
  34. data/{spectory → specs}/whitespace_spec.rb +1 -1
  35. metadata +28 -30
  36. data/TODO.md +0 -0
  37. data/spectory/v2/interpolation_spec.rb +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c8392c3b94db03612f7a2ea518733d37540b7439
4
- data.tar.gz: 2244fda90a145eb7fb343df496c1ea6f9ad9d28f
3
+ metadata.gz: d7de06baa99ae1e305941525514814cfed5206f2
4
+ data.tar.gz: 30763edb48c45e9242a76a27ad9f090d89025a50
5
5
  SHA512:
6
- metadata.gz: 612aa96b31e4e957fbda3f44ff4cb48a5ed3408b1ddb83c0af78b3d87b2684dec3dd63eb6b43e2bc47989f63980960cbff238b23b359d78397cb02bccad063b6
7
- data.tar.gz: a03efa39aa4fe532c8390d84d19722dc49cf16e0763e36bdeef1bbee4e6b0d4dcc9386bd88d3a0dd06f1d3dbfbe5d97b51ba2f81523eec087ccc6ddfdd2b5ab0
6
+ metadata.gz: a8ca0079ed5a497a796bdf81f88f134f3f09d2b6f96670aef9cf20a83630418dd1a4a87199700a5a74a72afa3da9f1d97adaf0fbbafd35d3966e40645dac62c7
7
+ data.tar.gz: 8470423a9c391400fd10cfcf8c1671fe7f232e5d58286a36cc1e6b90f1592385d1a3a39576b86856dfea917f4914ff18be48d84066056013a332228cd9a4f406
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dang (1.0.0)
4
+ dang (2.0.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -14,7 +14,7 @@ GEM
14
14
  kpeg (1.0.0)
15
15
  minitest (5.4.3)
16
16
  rake (10.3.2)
17
- rdoc (3.12.2)
17
+ rdoc (4.1.2)
18
18
  json (~> 1.4)
19
19
 
20
20
  PLATFORMS
@@ -28,4 +28,4 @@ DEPENDENCIES
28
28
  kpeg
29
29
  minitest
30
30
  rake
31
- rdoc (~> 3.10)
31
+ rdoc (~> 4.0)
data/History.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # History
2
2
 
3
+ ## 2.1.0 / 2015-02-11
4
+
5
+ ### Minor Feature
6
+
7
+ 1. Added interpolation in tag attributes
8
+
9
+ ```dang
10
+ <time[datetime=<| Time.now.strftime(%Y-%m-%d) |>] <| Time.now |> time>
11
+ ```
12
+
3
13
  ## 2.0.0 / 2014-11-20
4
14
 
5
15
  ### Major Features
@@ -5,7 +5,6 @@ History.md
5
5
  Manifest.txt
6
6
  README.md
7
7
  Rakefile
8
- TODO.md
9
8
  bin/dang
10
9
  dang.gemspec
11
10
  lib/dang.rb
@@ -13,27 +12,27 @@ lib/dang/dang.rb
13
12
  lib/dang/parser.kpeg
14
13
  lib/dang/parser.rb
15
14
  lib/dang/rails.rb
16
- spectory/attribute_spec.rb
17
- spectory/comment_spec.rb
18
- spectory/conditional_comment_spec.rb
19
- spectory/data_attribute_spec.rb
20
- spectory/doctype_spec.rb
21
- spectory/embedded_ruby_spec.rb
22
- spectory/file_spec.rb
23
- spectory/files/iamshane-com.html
24
- spectory/files/iamshane-com.html.dang
25
- spectory/filter_spec.rb
26
- spectory/helper.rb
27
- spectory/sanity_spec.rb
28
- spectory/script_spec.rb
29
- spectory/selector_spec.rb
30
- spectory/style_spec.rb
31
- spectory/tag_spec.rb
32
- spectory/v2/array_classes_spec.rb
33
- spectory/v2/filters/markdown_spec.rb
34
- spectory/v2/hash_attribute_spec.rb
35
- spectory/v2/interpolation_spec.rb
36
- spectory/v2/script_exception_spec.rb
37
- spectory/v2/style_exception_spec.rb
38
- spectory/well_formedness_spec.rb
39
- spectory/whitespace_spec.rb
15
+ specs/attribute_spec.rb
16
+ specs/comment_spec.rb
17
+ specs/conditional_comment_spec.rb
18
+ specs/data_attribute_spec.rb
19
+ specs/doctype_spec.rb
20
+ specs/embedded_ruby_spec.rb
21
+ specs/file_spec.rb
22
+ specs/filter_spec.rb
23
+ specs/helper.rb
24
+ specs/interpolation_spec.rb
25
+ specs/sanity_spec.rb
26
+ specs/script_spec.rb
27
+ specs/selector_spec.rb
28
+ specs/style_spec.rb
29
+ specs/tag_spec.rb
30
+ specs/well_formedness_spec.rb
31
+ specs/whitespace_spec.rb
32
+ specs/experiments/array_classes_spec.rb
33
+ specs/experiments/filters/markdown_spec.rb
34
+ specs/experiments/hash_attribute_spec.rb
35
+ specs/experiments/script_exception_spec.rb
36
+ specs/experiments/style_exception_spec.rb
37
+ specs/files/iamshane-com.html
38
+ specs/files/iamshane-com.html.dang
data/README.md CHANGED
@@ -51,7 +51,7 @@ Or just a snippet of dang into html:
51
51
 
52
52
  ## Current Version
53
53
 
54
- 2.0.0
54
+ 2.1.0
55
55
 
56
56
 
57
57
  ## Requirements
@@ -98,8 +98,8 @@ This will install any missing dependencies.
98
98
 
99
99
  ## Authors
100
100
 
101
- * Shane Becker / [@veganstraightedge](https://github.com/veganstraightedge)
102
- * Evan Phoenix / [@evanphx](https://github.com/evanphx)
101
+ * Shane Becker / [@veganstraightedge](https://github.com/veganstraightedge)
102
+ * Evan Phoenix / [@evanphx](https://github.com/evanphx)
103
103
 
104
104
 
105
105
  ## Contributing
data/Rakefile CHANGED
@@ -25,16 +25,16 @@ $:.unshift "./lib"
25
25
  task :default => :spec
26
26
 
27
27
  task :spec do
28
- Dir[File.dirname(__FILE__) + "/spectory/**/*_spec.rb"].each do |path|
28
+ Dir[File.dirname(__FILE__) + "/specs/**/*_spec.rb"].each do |path|
29
29
  require path
30
30
  end
31
31
 
32
32
  Minitest.autorun
33
33
  end
34
34
 
35
- file "#{HOE.spec.name}.gemspec" => ['Rakefile', "lib/dang/dang.rb"] do |t|
35
+ file "#{HOE.spec.name}.gemspec" => ["Rakefile", "lib/dang/dang.rb"] do |t|
36
36
  puts "Generating #{t.name}"
37
- File.open(t.name, 'wb') { |f| f.write HOE.spec.to_ruby }
37
+ File.open(t.name, "wb") { |f| f.write HOE.spec.to_ruby }
38
38
  end
39
39
 
40
40
  desc "Generate or update the standalone gemspec file for the project"
@@ -1,19 +1,19 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: dang 2.0.0 ruby lib
2
+ # stub: dang 2.1.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "dang"
6
- s.version = "2.0.0"
6
+ s.version = "2.1.0"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib"]
10
10
  s.authors = ["Shane Becker"]
11
- s.date = "2014-11-20"
11
+ s.date = "2015-02-12"
12
12
  s.description = "Dang is a Ruby templating language.\nIt uses angle brackets and CSS syntax.\nSomewhere between ERB and Haml."
13
13
  s.email = ["veganstraightedge@gmail.com"]
14
14
  s.executables = ["dang"]
15
- s.extra_rdoc_files = ["History.md", "Manifest.txt", "README.md", "TODO.md"]
16
- s.files = [".autotest", ".gitignore", ".hoeignore", ".travis.yml", "Gemfile", "Gemfile.lock", "History.md", "Manifest.txt", "README.md", "Rakefile", "TODO.md", "bin/dang", "dang.gemspec", "lib/dang.rb", "lib/dang/dang.rb", "lib/dang/parser.kpeg", "lib/dang/parser.rb", "lib/dang/rails.rb"]
15
+ s.extra_rdoc_files = ["History.md", "Manifest.txt", "README.md"]
16
+ s.files = [".hoeignore", "Gemfile", "Gemfile.lock", "History.md", "Manifest.txt", "README.md", "Rakefile", "bin/dang", "dang.gemspec", "lib/dang.rb", "lib/dang/dang.rb", "lib/dang/parser.kpeg", "lib/dang/parser.rb", "lib/dang/rails.rb", "specs/attribute_spec.rb", "specs/comment_spec.rb", "specs/conditional_comment_spec.rb", "specs/data_attribute_spec.rb", "specs/doctype_spec.rb", "specs/embedded_ruby_spec.rb", "specs/experiments/array_classes_spec.rb", "specs/experiments/filters/markdown_spec.rb", "specs/experiments/hash_attribute_spec.rb", "specs/experiments/script_exception_spec.rb", "specs/experiments/style_exception_spec.rb", "specs/file_spec.rb", "specs/files/iamshane-com.html", "specs/files/iamshane-com.html.dang", "specs/filter_spec.rb", "specs/helper.rb", "specs/interpolation_spec.rb", "specs/sanity_spec.rb", "specs/script_spec.rb", "specs/selector_spec.rb", "specs/style_spec.rb", "specs/tag_spec.rb", "specs/well_formedness_spec.rb", "specs/whitespace_spec.rb"]
17
17
  s.homepage = "https://github.com/veganstraightedge/dang"
18
18
  s.licenses = ["PUBLIC DOMAIN", "CC0"]
19
19
  s.rdoc_options = ["--main", "README.md"]
@@ -25,13 +25,13 @@ Gem::Specification.new do |s|
25
25
 
26
26
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
27
  s.add_development_dependency(%q<rdoc>, ["~> 4.0"])
28
- s.add_development_dependency(%q<hoe>, ["~> 3.13"])
28
+ s.add_development_dependency(%q<hoe>, ["~> 3.12"])
29
29
  else
30
30
  s.add_dependency(%q<rdoc>, ["~> 4.0"])
31
- s.add_dependency(%q<hoe>, ["~> 3.13"])
31
+ s.add_dependency(%q<hoe>, ["~> 3.12"])
32
32
  end
33
33
  else
34
34
  s.add_dependency(%q<rdoc>, ["~> 4.0"])
35
- s.add_dependency(%q<hoe>, ["~> 3.13"])
35
+ s.add_dependency(%q<hoe>, ["~> 3.12"])
36
36
  end
37
37
  end
@@ -1,10 +1,10 @@
1
- require 'stringio'
2
- require 'rubygems'
3
- require 'dang/parser'
1
+ require "stringio"
2
+ require "rubygems"
3
+ require "dang/parser"
4
4
 
5
5
  class Dang
6
- VERSION = '2.0.0'
7
- CODENAME = 'Abigail'
6
+ VERSION = "2.1.0"
7
+ CODENAME = "Kira"
8
8
 
9
9
  @filters = {}
10
10
 
@@ -28,7 +28,7 @@ class Dang
28
28
  if filter = @filters[name]
29
29
  return filter[text]
30
30
  else
31
- raise "Unknown filter: \"#{name}\""
31
+ raise "Unknown filter: '#{name}'"
32
32
  end
33
33
  end
34
34
  end
@@ -80,21 +80,47 @@
80
80
  out = []
81
81
  classes = []
82
82
 
83
- (at+sel).each do |key,val|
83
+ (at+sel).flatten.each do |pair|
84
+ key = pair.key
85
+ val = pair.value
86
+
84
87
  if key == "class"
88
+ val = val.str if val.kind_of? Literal
85
89
  classes.unshift val
86
90
  elsif val == true
87
91
  out << "#{key}"
92
+ out << " "
88
93
  else
89
- out << "#{key}='#{val}'"
94
+ out << "#{key}='"
95
+ out << val
96
+ out << "'"
97
+ out << " "
90
98
  end
91
99
  end
92
100
 
93
101
  unless classes.empty?
94
- out.unshift "class='#{classes.join(' ')}'"
102
+ expanded = ["class='"]
103
+ classes.each do |c|
104
+ expanded << c
105
+ expanded << " "
106
+ end
107
+
108
+ expanded[-1] = "'"
109
+
110
+ classes = expanded
111
+
112
+ if out.empty?
113
+ return classes
114
+ end
115
+
116
+ out = classes + [" "] + out
117
+ end
118
+
119
+ if out.last == " "
120
+ out.pop
95
121
  end
96
122
 
97
- out.join(' ')
123
+ out
98
124
  end
99
125
 
100
126
  class Literal
@@ -124,7 +150,7 @@
124
150
  end
125
151
 
126
152
  def joinm(*elems)
127
- elems.map do |i|
153
+ elems.flatten.map do |i|
128
154
  if i.kind_of? String
129
155
  Literal.new(i)
130
156
  else
@@ -133,6 +159,8 @@
133
159
  end
134
160
  end
135
161
 
162
+ Pair = Struct.new(:key, :value)
163
+
136
164
  def join(f,b)
137
165
  f = Literal.new(f) if f.kind_of? String
138
166
  b = Literal.new(b) if b.kind_of? String
@@ -182,16 +210,22 @@ pclose = "|>"
182
210
  key = name
183
211
  | "'" < /[^'\n]*/ > "'" { text }
184
212
 
213
+ valsrt = "]" | "<|"
214
+ valchk = < (!valsrt .)* > { text }
215
+ valprt = puby | valchk
216
+ valraw = valprt:p valraw:b { join(p,b) }
217
+ | valprt
218
+
185
219
  val = "'" < /[^'\n]*/ > "'" { text }
186
- | < (!"]" .)* > { text }
220
+ | valraw
187
221
 
188
- dattr = "[" key:k "=" val:v "]" { "data-#{k}='#{v}'" }
189
- dattrs = dattr:a dattrs:l { "#{a} #{l}" }
190
- | dattr
222
+ dattr = "[" key:k "=" val:v "]" { Pair.new("data-#{k}", v) }
223
+ dattrs = dattr:a dattrs:l { [a] + l }
224
+ | dattr:a { [a] }
191
225
 
192
- attr = "[data" dattrs:t "]" { [t,true] }
193
- | "[" key:k "=" val:v "]" { [k, v] }
194
- | "[" key:k "]" { [k,true] }
226
+ attr = "[data" dattrs:t "]" { t }
227
+ | "[" key:k "=" val:v "]" { Pair.new(k, v) }
228
+ | "[" key:k "]" { Pair.new(k,true) }
195
229
  attrs = attr:a attrs:l { [a] + l }
196
230
  | attr:a { [a] }
197
231
 
@@ -205,8 +239,8 @@ comment = "<!" space+ < "[" space* cc_if (!"]" .)* "]" > space+ "!>"
205
239
  { "<!--#{text}-->" }
206
240
 
207
241
  simple = /[a-zA-Z0-9_\-]+/
208
- select = "#" < simple > { ["id", text] }
209
- | "." < simple > { ["class", text] }
242
+ select = "#" < simple > { Pair.new("id", text) }
243
+ | "." < simple > { Pair.new("class", text) }
210
244
 
211
245
  selects = select:s selects:t { [s] + t }
212
246
  | select:s { [s] }
@@ -219,23 +253,23 @@ filter = "<:" name:n bs* < (!end_filter(n) .)* > end_filter(n)
219
253
  tag = start:l slash { "<#{l} />" }
220
254
  | start:l space+ end:r { "<#{l}></#{r}>" }
221
255
  | start:l attrs:a slash
222
- { "<#{l} #{attrs(a)} />" }
256
+ { joinm "<#{l} ", attrs(a), " />" }
223
257
  | start:l selects:t slash
224
- { "<#{l} #{attrs(t)} />" }
258
+ { joinm "<#{l} ", attrs(t), " />" }
225
259
  | start:l selects:t attrs:a slash
226
- { "<#{l} #{attrs(t,a)} />" }
260
+ { joinm "<#{l} ", attrs(t,a), " />" }
227
261
  | start:l attrs:a space+ end:r
228
- { "<#{l} #{attrs(a)}></#{r}>" }
262
+ { joinm "<#{l} ", attrs(a), "></#{r}>" }
229
263
  | start:l selects:t space+ end:r
230
- { "<#{l} #{attrs(t)}></#{r}>" }
264
+ { joinm "<#{l} ", attrs(t), "></#{r}>" }
231
265
  | start:l selects:t attrs:a space+ end:r
232
- { "<#{l} #{attrs(t,a)}></#{r}>" }
266
+ { joinm "<#{l} ", attrs(t,a), "></#{r}>" }
233
267
  | start:l selects:t attrs:a pts body:b pts:es end:r
234
- { joinm "<#{l} #{attrs(a,t)}>",b,es,"</#{r}>" }
268
+ { joinm "<#{l} ", attrs(a,t), ">",b,es,"</#{r}>" }
235
269
  | start:l attrs:a pts body:b pts:es end:r
236
- { joinm "<#{l} #{attrs(a)}>", b, es, "</#{r}>" }
270
+ { joinm "<#{l} ", attrs(a), ">", b, es, "</#{r}>" }
237
271
  | start:l selects:t pts:s body:b pts:es end:r
238
- { joinm "<#{l} #{attrs(t)}>",s, b, es, "</#{r}>" }
272
+ { joinm "<#{l} ", attrs(t), ">",s, b, es, "</#{r}>" }
239
273
  | start:l pts:s body:b pts:es end:r
240
274
  { joinm "<#{l}>", s, b, es, "</#{r}>" }
241
275
 
@@ -435,21 +435,47 @@ class Dang::Parser
435
435
  out = []
436
436
  classes = []
437
437
 
438
- (at+sel).each do |key,val|
438
+ (at+sel).flatten.each do |pair|
439
+ key = pair.key
440
+ val = pair.value
441
+
439
442
  if key == "class"
443
+ val = val.str if val.kind_of? Literal
440
444
  classes.unshift val
441
445
  elsif val == true
442
446
  out << "#{key}"
447
+ out << " "
443
448
  else
444
- out << "#{key}='#{val}'"
449
+ out << "#{key}='"
450
+ out << val
451
+ out << "'"
452
+ out << " "
445
453
  end
446
454
  end
447
455
 
448
456
  unless classes.empty?
449
- out.unshift "class='#{classes.join(' ')}'"
457
+ expanded = ["class='"]
458
+ classes.each do |c|
459
+ expanded << c
460
+ expanded << " "
461
+ end
462
+
463
+ expanded[-1] = "'"
464
+
465
+ classes = expanded
466
+
467
+ if out.empty?
468
+ return classes
469
+ end
470
+
471
+ out = classes + [" "] + out
450
472
  end
451
473
 
452
- out.join(' ')
474
+ if out.last == " "
475
+ out.pop
476
+ end
477
+
478
+ out
453
479
  end
454
480
 
455
481
  class Literal
@@ -479,7 +505,7 @@ class Dang::Parser
479
505
  end
480
506
 
481
507
  def joinm(*elems)
482
- elems.map do |i|
508
+ elems.flatten.map do |i|
483
509
  if i.kind_of? String
484
510
  Literal.new(i)
485
511
  else
@@ -488,6 +514,8 @@ class Dang::Parser
488
514
  end
489
515
  end
490
516
 
517
+ Pair = Struct.new(:key, :value)
518
+
491
519
  def join(f,b)
492
520
  f = Literal.new(f) if f.kind_of? String
493
521
  b = Literal.new(b) if b.kind_of? String
@@ -1211,34 +1239,110 @@ class Dang::Parser
1211
1239
  return _tmp
1212
1240
  end
1213
1241
 
1214
- # val = ("'" < /[^'\n]*/ > "'" { text } | < (!"]" .)* > { text })
1215
- def _val
1242
+ # valsrt = ("]" | "<|")
1243
+ def _valsrt
1244
+
1245
+ _save = self.pos
1246
+ while true # choice
1247
+ _tmp = match_string("]")
1248
+ break if _tmp
1249
+ self.pos = _save
1250
+ _tmp = match_string("<|")
1251
+ break if _tmp
1252
+ self.pos = _save
1253
+ break
1254
+ end # end choice
1255
+
1256
+ set_failed_rule :_valsrt unless _tmp
1257
+ return _tmp
1258
+ end
1259
+
1260
+ # valchk = < (!valsrt .)* > { text }
1261
+ def _valchk
1262
+
1263
+ _save = self.pos
1264
+ while true # sequence
1265
+ _text_start = self.pos
1266
+ while true
1267
+
1268
+ _save2 = self.pos
1269
+ while true # sequence
1270
+ _save3 = self.pos
1271
+ _tmp = apply(:_valsrt)
1272
+ _tmp = _tmp ? nil : true
1273
+ self.pos = _save3
1274
+ unless _tmp
1275
+ self.pos = _save2
1276
+ break
1277
+ end
1278
+ _tmp = get_byte
1279
+ unless _tmp
1280
+ self.pos = _save2
1281
+ end
1282
+ break
1283
+ end # end sequence
1284
+
1285
+ break unless _tmp
1286
+ end
1287
+ _tmp = true
1288
+ if _tmp
1289
+ text = get_text(_text_start)
1290
+ end
1291
+ unless _tmp
1292
+ self.pos = _save
1293
+ break
1294
+ end
1295
+ @result = begin; text ; end
1296
+ _tmp = true
1297
+ unless _tmp
1298
+ self.pos = _save
1299
+ end
1300
+ break
1301
+ end # end sequence
1302
+
1303
+ set_failed_rule :_valchk unless _tmp
1304
+ return _tmp
1305
+ end
1306
+
1307
+ # valprt = (puby | valchk)
1308
+ def _valprt
1309
+
1310
+ _save = self.pos
1311
+ while true # choice
1312
+ _tmp = apply(:_puby)
1313
+ break if _tmp
1314
+ self.pos = _save
1315
+ _tmp = apply(:_valchk)
1316
+ break if _tmp
1317
+ self.pos = _save
1318
+ break
1319
+ end # end choice
1320
+
1321
+ set_failed_rule :_valprt unless _tmp
1322
+ return _tmp
1323
+ end
1324
+
1325
+ # valraw = (valprt:p valraw:b { join(p,b) } | valprt)
1326
+ def _valraw
1216
1327
 
1217
1328
  _save = self.pos
1218
1329
  while true # choice
1219
1330
 
1220
1331
  _save1 = self.pos
1221
1332
  while true # sequence
1222
- _tmp = match_string("'")
1223
- unless _tmp
1224
- self.pos = _save1
1225
- break
1226
- end
1227
- _text_start = self.pos
1228
- _tmp = scan(/\A(?-mix:[^'\n]*)/)
1229
- if _tmp
1230
- text = get_text(_text_start)
1231
- end
1333
+ _tmp = apply(:_valprt)
1334
+ p = @result
1232
1335
  unless _tmp
1233
1336
  self.pos = _save1
1234
1337
  break
1235
1338
  end
1236
- _tmp = match_string("'")
1339
+ _tmp = apply(:_valraw)
1340
+ b = @result
1237
1341
  unless _tmp
1238
1342
  self.pos = _save1
1239
1343
  break
1240
1344
  end
1241
- @result = begin; text ; end
1345
+ @result = begin; join(p,b) ; end
1242
1346
  _tmp = true
1243
1347
  unless _tmp
1244
1348
  self.pos = _save1
@@ -1248,47 +1352,54 @@ class Dang::Parser
1248
1352
 
1249
1353
  break if _tmp
1250
1354
  self.pos = _save
1355
+ _tmp = apply(:_valprt)
1356
+ break if _tmp
1357
+ self.pos = _save
1358
+ break
1359
+ end # end choice
1251
1360
 
1252
- _save2 = self.pos
1253
- while true # sequence
1254
- _text_start = self.pos
1255
- while true
1361
+ set_failed_rule :_valraw unless _tmp
1362
+ return _tmp
1363
+ end
1256
1364
 
1257
- _save4 = self.pos
1258
- while true # sequence
1259
- _save5 = self.pos
1260
- _tmp = match_string("]")
1261
- _tmp = _tmp ? nil : true
1262
- self.pos = _save5
1263
- unless _tmp
1264
- self.pos = _save4
1265
- break
1266
- end
1267
- _tmp = get_byte
1268
- unless _tmp
1269
- self.pos = _save4
1270
- end
1271
- break
1272
- end # end sequence
1365
+ # val = ("'" < /[^'\n]*/ > "'" { text } | valraw)
1366
+ def _val
1273
1367
 
1274
- break unless _tmp
1368
+ _save = self.pos
1369
+ while true # choice
1370
+
1371
+ _save1 = self.pos
1372
+ while true # sequence
1373
+ _tmp = match_string("'")
1374
+ unless _tmp
1375
+ self.pos = _save1
1376
+ break
1275
1377
  end
1276
- _tmp = true
1378
+ _text_start = self.pos
1379
+ _tmp = scan(/\A(?-mix:[^'\n]*)/)
1277
1380
  if _tmp
1278
1381
  text = get_text(_text_start)
1279
1382
  end
1280
1383
  unless _tmp
1281
- self.pos = _save2
1384
+ self.pos = _save1
1385
+ break
1386
+ end
1387
+ _tmp = match_string("'")
1388
+ unless _tmp
1389
+ self.pos = _save1
1282
1390
  break
1283
1391
  end
1284
1392
  @result = begin; text ; end
1285
1393
  _tmp = true
1286
1394
  unless _tmp
1287
- self.pos = _save2
1395
+ self.pos = _save1
1288
1396
  end
1289
1397
  break
1290
1398
  end # end sequence
1291
1399
 
1400
+ break if _tmp
1401
+ self.pos = _save
1402
+ _tmp = apply(:_valraw)
1292
1403
  break if _tmp
1293
1404
  self.pos = _save
1294
1405
  break
@@ -1298,7 +1409,7 @@ class Dang::Parser
1298
1409
  return _tmp
1299
1410
  end
1300
1411
 
1301
- # dattr = "[" key:k "=" val:v "]" { "data-#{k}='#{v}'" }
1412
+ # dattr = "[" key:k "=" val:v "]" { Pair.new("data-#{k}", v) }
1302
1413
  def _dattr
1303
1414
 
1304
1415
  _save = self.pos
@@ -1330,7 +1441,7 @@ class Dang::Parser
1330
1441
  self.pos = _save
1331
1442
  break
1332
1443
  end
1333
- @result = begin; "data-#{k}='#{v}'" ; end
1444
+ @result = begin; Pair.new("data-#{k}", v) ; end
1334
1445
  _tmp = true
1335
1446
  unless _tmp
1336
1447
  self.pos = _save
@@ -1342,7 +1453,7 @@ class Dang::Parser
1342
1453
  return _tmp
1343
1454
  end
1344
1455
 
1345
- # dattrs = (dattr:a dattrs:l { "#{a} #{l}" } | dattr)
1456
+ # dattrs = (dattr:a dattrs:l { [a] + l } | dattr:a { [a] })
1346
1457
  def _dattrs
1347
1458
 
1348
1459
  _save = self.pos
@@ -1362,7 +1473,7 @@ class Dang::Parser
1362
1473
  self.pos = _save1
1363
1474
  break
1364
1475
  end
1365
- @result = begin; "#{a} #{l}" ; end
1476
+ @result = begin; [a] + l ; end
1366
1477
  _tmp = true
1367
1478
  unless _tmp
1368
1479
  self.pos = _save1
@@ -1372,7 +1483,23 @@ class Dang::Parser
1372
1483
 
1373
1484
  break if _tmp
1374
1485
  self.pos = _save
1375
- _tmp = apply(:_dattr)
1486
+
1487
+ _save2 = self.pos
1488
+ while true # sequence
1489
+ _tmp = apply(:_dattr)
1490
+ a = @result
1491
+ unless _tmp
1492
+ self.pos = _save2
1493
+ break
1494
+ end
1495
+ @result = begin; [a] ; end
1496
+ _tmp = true
1497
+ unless _tmp
1498
+ self.pos = _save2
1499
+ end
1500
+ break
1501
+ end # end sequence
1502
+
1376
1503
  break if _tmp
1377
1504
  self.pos = _save
1378
1505
  break
@@ -1382,7 +1509,7 @@ class Dang::Parser
1382
1509
  return _tmp
1383
1510
  end
1384
1511
 
1385
- # attr = ("[data" dattrs:t "]" { [t,true] } | "[" key:k "=" val:v "]" { [k, v] } | "[" key:k "]" { [k,true] })
1512
+ # attr = ("[data" dattrs:t "]" { t } | "[" key:k "=" val:v "]" { Pair.new(k, v) } | "[" key:k "]" { Pair.new(k,true) })
1386
1513
  def _attr
1387
1514
 
1388
1515
  _save = self.pos
@@ -1406,7 +1533,7 @@ class Dang::Parser
1406
1533
  self.pos = _save1
1407
1534
  break
1408
1535
  end
1409
- @result = begin; [t,true] ; end
1536
+ @result = begin; t ; end
1410
1537
  _tmp = true
1411
1538
  unless _tmp
1412
1539
  self.pos = _save1
@@ -1446,7 +1573,7 @@ class Dang::Parser
1446
1573
  self.pos = _save2
1447
1574
  break
1448
1575
  end
1449
- @result = begin; [k, v] ; end
1576
+ @result = begin; Pair.new(k, v) ; end
1450
1577
  _tmp = true
1451
1578
  unless _tmp
1452
1579
  self.pos = _save2
@@ -1475,7 +1602,7 @@ class Dang::Parser
1475
1602
  self.pos = _save3
1476
1603
  break
1477
1604
  end
1478
- @result = begin; [k,true] ; end
1605
+ @result = begin; Pair.new(k,true) ; end
1479
1606
  _tmp = true
1480
1607
  unless _tmp
1481
1608
  self.pos = _save3
@@ -1866,7 +1993,7 @@ class Dang::Parser
1866
1993
  return _tmp
1867
1994
  end
1868
1995
 
1869
- # select = ("#" < simple > { ["id", text] } | "." < simple > { ["class", text] })
1996
+ # select = ("#" < simple > { Pair.new("id", text) } | "." < simple > { Pair.new("class", text) })
1870
1997
  def _select
1871
1998
 
1872
1999
  _save = self.pos
@@ -1888,7 +2015,7 @@ class Dang::Parser
1888
2015
  self.pos = _save1
1889
2016
  break
1890
2017
  end
1891
- @result = begin; ["id", text] ; end
2018
+ @result = begin; Pair.new("id", text) ; end
1892
2019
  _tmp = true
1893
2020
  unless _tmp
1894
2021
  self.pos = _save1
@@ -1915,7 +2042,7 @@ class Dang::Parser
1915
2042
  self.pos = _save2
1916
2043
  break
1917
2044
  end
1918
- @result = begin; ["class", text] ; end
2045
+ @result = begin; Pair.new("class", text) ; end
1919
2046
  _tmp = true
1920
2047
  unless _tmp
1921
2048
  self.pos = _save2
@@ -2101,7 +2228,7 @@ class Dang::Parser
2101
2228
  return _tmp
2102
2229
  end
2103
2230
 
2104
- # tag = (start:l slash { "<#{l} />" } | start:l space+ end:r { "<#{l}></#{r}>" } | start:l attrs:a slash { "<#{l} #{attrs(a)} />" } | start:l selects:t slash { "<#{l} #{attrs(t)} />" } | start:l selects:t attrs:a slash { "<#{l} #{attrs(t,a)} />" } | start:l attrs:a space+ end:r { "<#{l} #{attrs(a)}></#{r}>" } | start:l selects:t space+ end:r { "<#{l} #{attrs(t)}></#{r}>" } | start:l selects:t attrs:a space+ end:r { "<#{l} #{attrs(t,a)}></#{r}>" } | start:l selects:t attrs:a pts body:b pts:es end:r { joinm "<#{l} #{attrs(a,t)}>",b,es,"</#{r}>" } | start:l attrs:a pts body:b pts:es end:r { joinm "<#{l} #{attrs(a)}>", b, es, "</#{r}>" } | start:l selects:t pts:s body:b pts:es end:r { joinm "<#{l} #{attrs(t)}>",s, b, es, "</#{r}>" } | start:l pts:s body:b pts:es end:r { joinm "<#{l}>", s, b, es, "</#{r}>" })
2231
+ # tag = (start:l slash { "<#{l} />" } | start:l space+ end:r { "<#{l}></#{r}>" } | start:l attrs:a slash { joinm "<#{l} ", attrs(a), " />" } | start:l selects:t slash { joinm "<#{l} ", attrs(t), " />" } | start:l selects:t attrs:a slash { joinm "<#{l} ", attrs(t,a), " />" } | start:l attrs:a space+ end:r { joinm "<#{l} ", attrs(a), "></#{r}>" } | start:l selects:t space+ end:r { joinm "<#{l} ", attrs(t), "></#{r}>" } | start:l selects:t attrs:a space+ end:r { joinm "<#{l} ", attrs(t,a), "></#{r}>" } | start:l selects:t attrs:a pts body:b pts:es end:r { joinm "<#{l} ", attrs(a,t), ">",b,es,"</#{r}>" } | start:l attrs:a pts body:b pts:es end:r { joinm "<#{l} ", attrs(a), ">", b, es, "</#{r}>" } | start:l selects:t pts:s body:b pts:es end:r { joinm "<#{l} ", attrs(t), ">",s, b, es, "</#{r}>" } | start:l pts:s body:b pts:es end:r { joinm "<#{l}>", s, b, es, "</#{r}>" })
2105
2232
  def _tag
2106
2233
 
2107
2234
  _save = self.pos
@@ -2190,7 +2317,7 @@ class Dang::Parser
2190
2317
  self.pos = _save4
2191
2318
  break
2192
2319
  end
2193
- @result = begin; "<#{l} #{attrs(a)} />" ; end
2320
+ @result = begin; joinm "<#{l} ", attrs(a), " />" ; end
2194
2321
  _tmp = true
2195
2322
  unless _tmp
2196
2323
  self.pos = _save4
@@ -2220,7 +2347,7 @@ class Dang::Parser
2220
2347
  self.pos = _save5
2221
2348
  break
2222
2349
  end
2223
- @result = begin; "<#{l} #{attrs(t)} />" ; end
2350
+ @result = begin; joinm "<#{l} ", attrs(t), " />" ; end
2224
2351
  _tmp = true
2225
2352
  unless _tmp
2226
2353
  self.pos = _save5
@@ -2256,7 +2383,7 @@ class Dang::Parser
2256
2383
  self.pos = _save6
2257
2384
  break
2258
2385
  end
2259
- @result = begin; "<#{l} #{attrs(t,a)} />" ; end
2386
+ @result = begin; joinm "<#{l} ", attrs(t,a), " />" ; end
2260
2387
  _tmp = true
2261
2388
  unless _tmp
2262
2389
  self.pos = _save6
@@ -2302,7 +2429,7 @@ class Dang::Parser
2302
2429
  self.pos = _save7
2303
2430
  break
2304
2431
  end
2305
- @result = begin; "<#{l} #{attrs(a)}></#{r}>" ; end
2432
+ @result = begin; joinm "<#{l} ", attrs(a), "></#{r}>" ; end
2306
2433
  _tmp = true
2307
2434
  unless _tmp
2308
2435
  self.pos = _save7
@@ -2348,7 +2475,7 @@ class Dang::Parser
2348
2475
  self.pos = _save9
2349
2476
  break
2350
2477
  end
2351
- @result = begin; "<#{l} #{attrs(t)}></#{r}>" ; end
2478
+ @result = begin; joinm "<#{l} ", attrs(t), "></#{r}>" ; end
2352
2479
  _tmp = true
2353
2480
  unless _tmp
2354
2481
  self.pos = _save9
@@ -2400,7 +2527,7 @@ class Dang::Parser
2400
2527
  self.pos = _save11
2401
2528
  break
2402
2529
  end
2403
- @result = begin; "<#{l} #{attrs(t,a)}></#{r}>" ; end
2530
+ @result = begin; joinm "<#{l} ", attrs(t,a), "></#{r}>" ; end
2404
2531
  _tmp = true
2405
2532
  unless _tmp
2406
2533
  self.pos = _save11
@@ -2454,7 +2581,7 @@ class Dang::Parser
2454
2581
  self.pos = _save13
2455
2582
  break
2456
2583
  end
2457
- @result = begin; joinm "<#{l} #{attrs(a,t)}>",b,es,"</#{r}>" ; end
2584
+ @result = begin; joinm "<#{l} ", attrs(a,t), ">",b,es,"</#{r}>" ; end
2458
2585
  _tmp = true
2459
2586
  unless _tmp
2460
2587
  self.pos = _save13
@@ -2502,7 +2629,7 @@ class Dang::Parser
2502
2629
  self.pos = _save14
2503
2630
  break
2504
2631
  end
2505
- @result = begin; joinm "<#{l} #{attrs(a)}>", b, es, "</#{r}>" ; end
2632
+ @result = begin; joinm "<#{l} ", attrs(a), ">", b, es, "</#{r}>" ; end
2506
2633
  _tmp = true
2507
2634
  unless _tmp
2508
2635
  self.pos = _save14
@@ -2551,7 +2678,7 @@ class Dang::Parser
2551
2678
  self.pos = _save15
2552
2679
  break
2553
2680
  end
2554
- @result = begin; joinm "<#{l} #{attrs(t)}>",s, b, es, "</#{r}>" ; end
2681
+ @result = begin; joinm "<#{l} ", attrs(t), ">",s, b, es, "</#{r}>" ; end
2555
2682
  _tmp = true
2556
2683
  unless _tmp
2557
2684
  self.pos = _save15
@@ -2671,20 +2798,24 @@ class Dang::Parser
2671
2798
  Rules[:_part] = rule_info("part", "(ruby | puby | filter | comment | tag | chunk)")
2672
2799
  Rules[:_body] = rule_info("body", "(part:p body:b { join(p,b) } | part)")
2673
2800
  Rules[:_key] = rule_info("key", "(name | \"'\" < /[^'\\n]*/ > \"'\" { text })")
2674
- Rules[:_val] = rule_info("val", "(\"'\" < /[^'\\n]*/ > \"'\" { text } | < (!\"]\" .)* > { text })")
2675
- Rules[:_dattr] = rule_info("dattr", "\"[\" key:k \"=\" val:v \"]\" { \"data-\#{k}='\#{v}'\" }")
2676
- Rules[:_dattrs] = rule_info("dattrs", "(dattr:a dattrs:l { \"\#{a} \#{l}\" } | dattr)")
2677
- Rules[:_attr] = rule_info("attr", "(\"[data\" dattrs:t \"]\" { [t,true] } | \"[\" key:k \"=\" val:v \"]\" { [k, v] } | \"[\" key:k \"]\" { [k,true] })")
2801
+ Rules[:_valsrt] = rule_info("valsrt", "(\"]\" | \"<|\")")
2802
+ Rules[:_valchk] = rule_info("valchk", "< (!valsrt .)* > { text }")
2803
+ Rules[:_valprt] = rule_info("valprt", "(puby | valchk)")
2804
+ Rules[:_valraw] = rule_info("valraw", "(valprt:p valraw:b { join(p,b) } | valprt)")
2805
+ Rules[:_val] = rule_info("val", "(\"'\" < /[^'\\n]*/ > \"'\" { text } | valraw)")
2806
+ Rules[:_dattr] = rule_info("dattr", "\"[\" key:k \"=\" val:v \"]\" { Pair.new(\"data-\#{k}\", v) }")
2807
+ Rules[:_dattrs] = rule_info("dattrs", "(dattr:a dattrs:l { [a] + l } | dattr:a { [a] })")
2808
+ Rules[:_attr] = rule_info("attr", "(\"[data\" dattrs:t \"]\" { t } | \"[\" key:k \"=\" val:v \"]\" { Pair.new(k, v) } | \"[\" key:k \"]\" { Pair.new(k,true) })")
2678
2809
  Rules[:_attrs] = rule_info("attrs", "(attr:a attrs:l { [a] + l } | attr:a { [a] })")
2679
2810
  Rules[:_cc_if] = rule_info("cc_if", "/[iI][fF]/")
2680
2811
  Rules[:_cc_end] = rule_info("cc_end", "/[eE][nN][dD][iI][fF]/")
2681
2812
  Rules[:_comment] = rule_info("comment", "(\"<!\" space+ < \"[\" space* cc_if (!\"]\" .)* \"]\" > space+ \"!>\" { \"<!--\#{text}>\" } | \"<!\" space+ < \"[\" space* cc_end (!\"]\" .)* \"]\" > space+ \"!>\" { \"<!\#{text}-->\" } | \"<!\" < (!\"!>\" .)* > \"!>\" { \"<!--\#{text}-->\" })")
2682
2813
  Rules[:_simple] = rule_info("simple", "/[a-zA-Z0-9_\\-]+/")
2683
- Rules[:_select] = rule_info("select", "(\"\#\" < simple > { [\"id\", text] } | \".\" < simple > { [\"class\", text] })")
2814
+ Rules[:_select] = rule_info("select", "(\"\#\" < simple > { Pair.new(\"id\", text) } | \".\" < simple > { Pair.new(\"class\", text) })")
2684
2815
  Rules[:_selects] = rule_info("selects", "(select:s selects:t { [s] + t } | select:s { [s] })")
2685
2816
  Rules[:_end_filter] = rule_info("end_filter", "bs* < /[a-zA-Z]+/ > &{ n == text } \":>\"")
2686
2817
  Rules[:_filter] = rule_info("filter", "\"<:\" name:n bs* < (!end_filter(n) .)* > end_filter(n) { Filter.new(n, text) }")
2687
- Rules[:_tag] = rule_info("tag", "(start:l slash { \"<\#{l} />\" } | start:l space+ end:r { \"<\#{l}></\#{r}>\" } | start:l attrs:a slash { \"<\#{l} \#{attrs(a)} />\" } | start:l selects:t slash { \"<\#{l} \#{attrs(t)} />\" } | start:l selects:t attrs:a slash { \"<\#{l} \#{attrs(t,a)} />\" } | start:l attrs:a space+ end:r { \"<\#{l} \#{attrs(a)}></\#{r}>\" } | start:l selects:t space+ end:r { \"<\#{l} \#{attrs(t)}></\#{r}>\" } | start:l selects:t attrs:a space+ end:r { \"<\#{l} \#{attrs(t,a)}></\#{r}>\" } | start:l selects:t attrs:a pts body:b pts:es end:r { joinm \"<\#{l} \#{attrs(a,t)}>\",b,es,\"</\#{r}>\" } | start:l attrs:a pts body:b pts:es end:r { joinm \"<\#{l} \#{attrs(a)}>\", b, es, \"</\#{r}>\" } | start:l selects:t pts:s body:b pts:es end:r { joinm \"<\#{l} \#{attrs(t)}>\",s, b, es, \"</\#{r}>\" } | start:l pts:s body:b pts:es end:r { joinm \"<\#{l}>\", s, b, es, \"</\#{r}>\" })")
2818
+ Rules[:_tag] = rule_info("tag", "(start:l slash { \"<\#{l} />\" } | start:l space+ end:r { \"<\#{l}></\#{r}>\" } | start:l attrs:a slash { joinm \"<\#{l} \", attrs(a), \" />\" } | start:l selects:t slash { joinm \"<\#{l} \", attrs(t), \" />\" } | start:l selects:t attrs:a slash { joinm \"<\#{l} \", attrs(t,a), \" />\" } | start:l attrs:a space+ end:r { joinm \"<\#{l} \", attrs(a), \"></\#{r}>\" } | start:l selects:t space+ end:r { joinm \"<\#{l} \", attrs(t), \"></\#{r}>\" } | start:l selects:t attrs:a space+ end:r { joinm \"<\#{l} \", attrs(t,a), \"></\#{r}>\" } | start:l selects:t attrs:a pts body:b pts:es end:r { joinm \"<\#{l} \", attrs(a,t), \">\",b,es,\"</\#{r}>\" } | start:l attrs:a pts body:b pts:es end:r { joinm \"<\#{l} \", attrs(a), \">\", b, es, \"</\#{r}>\" } | start:l selects:t pts:s body:b pts:es end:r { joinm \"<\#{l} \", attrs(t), \">\",s, b, es, \"</\#{r}>\" } | start:l pts:s body:b pts:es end:r { joinm \"<\#{l}>\", s, b, es, \"</\#{r}>\" })")
2688
2819
  Rules[:_root] = rule_info("root", "doctype? body:b eof { @output = join(b,\"\") }")
2689
2820
  # :startdoc:
2690
2821
  end
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "attributes" do
4
4
  it "transforms Dang tag[attr=value] into HTML tag with an attribute and value" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "comments" do
4
4
  it "transforms Dang <! comment !> comments into html comments" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # from
4
4
  # <! [if IE] !>
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "data attributes" do
4
4
  it "transforms normal data attributes comments" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "doctypes" do
4
4
  # based largely on HAML's doctype with a minor variation
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "embedded ruby" do
4
4
  it "farms out to Ruby for and does not return any output" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # TODO experimental
4
4
  # for v2
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # filters
4
4
  # <:markdown
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # TODO experimental
4
4
  # for v2
@@ -12,7 +12,7 @@ require "spectory/helper"
12
12
  # # <body[foo=#{bar}]{attrs, attrs}
13
13
  # # <body{ hidden }
14
14
  # # <body#id.class.class2{ attrs }
15
- # # <body#id.class.class2<= attrs =>
15
+ # # <body#id.class.class2<| attrs |>
16
16
  #
17
17
  # # TODO experimental
18
18
  #
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # describe "script tags" do
4
4
  # it "skips js that looks like a closing dang tag" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # describe "style tags" do
4
4
  # it "skips css that looks like a closing dang tag" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "files" do
4
4
  it "can transform a whole document" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # filters
4
4
  # <:markdown
File without changes
@@ -0,0 +1,12 @@
1
+ require "specs/helper"
2
+
3
+ describe "interpolation" do
4
+ # it "should allow ruby interpolation in ids"
5
+ # it "should allow ruby interpolation in classes"
6
+
7
+ it "should interpolate in attributes" do
8
+ foo = "bar"
9
+
10
+ Dang.it("<time[name=<| foo |>-<| foo |>] <| foo |> time>", binding).must_equal "<time name='bar-bar'>bar</time>"
11
+ end
12
+ end
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "sanity" do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "script tags" do
4
4
  it "treats script tag special" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "selectors" do
4
4
  it "transforms Dang tag#id into HTML tag with an id attribute" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "style tags" do
4
4
  it "treats style tags special" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  describe "tags" do
4
4
  it "transforms Dang tag to HTML tag with no content" do
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # TODO experimental
4
4
 
@@ -1,4 +1,4 @@
1
- require "spectory/helper"
1
+ require "specs/helper"
2
2
 
3
3
  # something like HAML's aligator operator
4
4
  # http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#whitespace_removal__and_
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dang
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Becker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-20 00:00:00.000000000 Z
11
+ date: 2015-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.13'
33
+ version: '3.12'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.13'
40
+ version: '3.12'
41
41
  description: |-
42
42
  Dang is a Ruby templating language.
43
43
  It uses angle brackets and CSS syntax.
@@ -51,7 +51,6 @@ extra_rdoc_files:
51
51
  - History.md
52
52
  - Manifest.txt
53
53
  - README.md
54
- - TODO.md
55
54
  files:
56
55
  - ".hoeignore"
57
56
  - Gemfile
@@ -60,7 +59,6 @@ files:
60
59
  - Manifest.txt
61
60
  - README.md
62
61
  - Rakefile
63
- - TODO.md
64
62
  - bin/dang
65
63
  - dang.gemspec
66
64
  - lib/dang.rb
@@ -68,30 +66,30 @@ files:
68
66
  - lib/dang/parser.kpeg
69
67
  - lib/dang/parser.rb
70
68
  - lib/dang/rails.rb
71
- - spectory/attribute_spec.rb
72
- - spectory/comment_spec.rb
73
- - spectory/conditional_comment_spec.rb
74
- - spectory/data_attribute_spec.rb
75
- - spectory/doctype_spec.rb
76
- - spectory/embedded_ruby_spec.rb
77
- - spectory/file_spec.rb
78
- - spectory/files/iamshane-com.html
79
- - spectory/files/iamshane-com.html.dang
80
- - spectory/filter_spec.rb
81
- - spectory/helper.rb
82
- - spectory/sanity_spec.rb
83
- - spectory/script_spec.rb
84
- - spectory/selector_spec.rb
85
- - spectory/style_spec.rb
86
- - spectory/tag_spec.rb
87
- - spectory/v2/array_classes_spec.rb
88
- - spectory/v2/filters/markdown_spec.rb
89
- - spectory/v2/hash_attribute_spec.rb
90
- - spectory/v2/interpolation_spec.rb
91
- - spectory/v2/script_exception_spec.rb
92
- - spectory/v2/style_exception_spec.rb
93
- - spectory/well_formedness_spec.rb
94
- - spectory/whitespace_spec.rb
69
+ - specs/attribute_spec.rb
70
+ - specs/comment_spec.rb
71
+ - specs/conditional_comment_spec.rb
72
+ - specs/data_attribute_spec.rb
73
+ - specs/doctype_spec.rb
74
+ - specs/embedded_ruby_spec.rb
75
+ - specs/experiments/array_classes_spec.rb
76
+ - specs/experiments/filters/markdown_spec.rb
77
+ - specs/experiments/hash_attribute_spec.rb
78
+ - specs/experiments/script_exception_spec.rb
79
+ - specs/experiments/style_exception_spec.rb
80
+ - specs/file_spec.rb
81
+ - specs/files/iamshane-com.html
82
+ - specs/files/iamshane-com.html.dang
83
+ - specs/filter_spec.rb
84
+ - specs/helper.rb
85
+ - specs/interpolation_spec.rb
86
+ - specs/sanity_spec.rb
87
+ - specs/script_spec.rb
88
+ - specs/selector_spec.rb
89
+ - specs/style_spec.rb
90
+ - specs/tag_spec.rb
91
+ - specs/well_formedness_spec.rb
92
+ - specs/whitespace_spec.rb
95
93
  homepage: https://github.com/veganstraightedge/dang
96
94
  licenses:
97
95
  - PUBLIC DOMAIN
data/TODO.md DELETED
File without changes
@@ -1,11 +0,0 @@
1
- require "spectory/helper"
2
-
3
- # TODO experimental
4
- # for v2
5
-
6
- # describe "interpolation" do
7
- # it "should allow ruby interpolation in ids"
8
- # it "should allow ruby interpolation in classes"
9
- # it "should allow ruby interpolation in attributes"
10
- # it "should allow ruby interpolation in values"
11
- # end