dang 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OGEzZDEzZTAyNGY0MWNjNjUyNTYzMzNmMmQ1ZDA3YTQ3MjVkNWYzMA==
5
- data.tar.gz: !binary |-
6
- MDUyMzJmNGE1OGUzODI2YmE3ZThlNDM2ODA3ZmQ3MTI3YTBiOWNjZg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NTJjMGEzNzc2Y2FkYmYxNTExMDY4MGE1ZmYzOGI2MDZmYzIyYTdkMTJkMzNm
10
- ODM4NTJiOGM3NjJlOTEwZGRjZjMwMzIyNDNhMjQzNjYxNmQ5NjkyOTQ3OGM2
11
- YWQ3OTc3YmI4OWFmZWZlMDI4NTc5ODllYzA2N2QyOWVlMWUzZjQ=
12
- data.tar.gz: !binary |-
13
- ZGVhNjI5MGM5NTk2OTVlZDI5ODI5MmJmODAxMWM0YzkwYmU4N2QwMzhhNjM3
14
- Nzg2MDU3MWI4ODkwNjJjOWVjMjVlNWE2OTY5NGJhZWI5OWE4NTgwNDI2ZjEz
15
- ZDYxYjc0OTk0YzQ1ODZlZmZlMWZkMWQ3OWM1YzVkZmZjY2Y4NTQ=
2
+ SHA1:
3
+ metadata.gz: c8392c3b94db03612f7a2ea518733d37540b7439
4
+ data.tar.gz: 2244fda90a145eb7fb343df496c1ea6f9ad9d28f
5
+ SHA512:
6
+ metadata.gz: 612aa96b31e4e957fbda3f44ff4cb48a5ed3408b1ddb83c0af78b3d87b2684dec3dd63eb6b43e2bc47989f63980960cbff238b23b359d78397cb02bccad063b6
7
+ data.tar.gz: a03efa39aa4fe532c8390d84d19722dc49cf16e0763e36bdeef1bbee4e6b0d4dcc9386bd88d3a0dd06f1d3dbfbe5d97b51ba2f81523eec087ccc6ddfdd2b5ab0
data/Gemfile CHANGED
@@ -1,5 +1,7 @@
1
1
  source "https://rubygems.org"
2
2
 
3
+ gemspec
4
+
3
5
  # for developing
4
6
  gem "rake"
5
7
  gem "hoe"
@@ -1,22 +1,31 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ dang (1.0.0)
5
+
1
6
  GEM
2
7
  remote: https://rubygems.org/
3
8
  specs:
4
- hoe (3.6.2)
9
+ hoe (3.13.0)
5
10
  rake (>= 0.8, < 11.0)
6
11
  hoe-doofus (1.0.0)
7
- hoe-git (1.5.0)
8
- hoe (>= 2.2.0)
9
- kpeg (0.10.0)
10
- minitest (5.0.3)
11
- rake (10.0.4)
12
+ hoe-git (1.6.0)
13
+ json (1.8.1)
14
+ kpeg (1.0.0)
15
+ minitest (5.4.3)
16
+ rake (10.3.2)
17
+ rdoc (3.12.2)
18
+ json (~> 1.4)
12
19
 
13
20
  PLATFORMS
14
21
  ruby
15
22
 
16
23
  DEPENDENCIES
24
+ dang!
17
25
  hoe
18
26
  hoe-doofus
19
27
  hoe-git
20
28
  kpeg
21
29
  minitest
22
30
  rake
31
+ rdoc (~> 3.10)
data/History.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # History
2
2
 
3
+ ## 2.0.0 / 2014-11-20
4
+
5
+ ### Major Features
6
+
7
+ 1. Fixed two major and obvious syntax mistakes.
8
+
9
+ `<- non-printing ruby ->` : As a syntax works great in a vaccum,
10
+ but not in Ruby 1.9 or higher because of the `->` stabby proc.
11
+ Duh. That's our bad. Sorry that we didn't catch it in our design
12
+ and testing.
13
+
14
+ `<= printing ruby =>` : Same goes for this. `=>` is used in hashes.
15
+ Double duh. Both of these should've never made it into the spec.
16
+
17
+ For 2.0, we've changed both of them to similar but different syntaxes.
18
+
19
+ * `<- non-printing ruby ->` becomes `<: non-printing ruby :>`
20
+ * `<= printing ruby =>` becomes `<| printing ruby |>`
21
+
22
+ Our reason for using `<: :>` is because we were already using a similar
23
+ syntax for `filters`. `<:raw raw:>`, `<:markdown markdown:>`, etc.
24
+ Following this pattern, `<: :>` is the default filter and therefore
25
+ an alias/shorthand for `<:ruby ruby:>`.
26
+
27
+ `<| |>` was chosen for visual symmetry/balance and because pipes are
28
+ already used in Ruby, so they won't feel out of place in Ruby/Rals views.
29
+ We didn't want to introduce **another** symbol to the aesthic of views.
30
+
31
+
3
32
  ## 1.0.0 / 2013-09-18
4
33
 
5
34
  ### Major Features
@@ -1,7 +1,4 @@
1
- .autotest
2
- .gitignore
3
1
  .hoeignore
4
- .travis.yml
5
2
  Gemfile
6
3
  Gemfile.lock
7
4
  History.md
@@ -16,3 +13,27 @@ lib/dang/dang.rb
16
13
  lib/dang/parser.kpeg
17
14
  lib/dang/parser.rb
18
15
  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
data/README.md CHANGED
@@ -5,7 +5,7 @@ https://github.com/veganstraightedge/dang
5
5
 
6
6
  ## Description
7
7
 
8
- Dang is a Ruby templating language
8
+ Dang is a Ruby templating language.
9
9
  It uses angle brackets and CSS syntax.
10
10
  Somewhere between ERB and Haml.
11
11
 
@@ -33,8 +33,8 @@ Somewhere between ERB and Haml.
33
33
  * `<p.class lorem ipsum p>`
34
34
  * `<a[href=/] Home a>`
35
35
  * `<! html comment !>`
36
- * `<- non_printing(ruby) ->`
37
- * `<= printing(ruby) =>`
36
+ * `<: non_printing(ruby) :>`
37
+ * `<| printing(ruby) |>`
38
38
  * `!!!` doctype shorthand inspired by HAML
39
39
 
40
40
 
@@ -51,7 +51,7 @@ Or just a snippet of dang into html:
51
51
 
52
52
  ## Current Version
53
53
 
54
- 1.0.0.rc6
54
+ 2.0.0
55
55
 
56
56
 
57
57
  ## Requirements
@@ -82,7 +82,7 @@ Or install it yourself as:
82
82
  gem install dang
83
83
  ```
84
84
 
85
- You may need to use`sudo` to install it manually.
85
+ You may need to use `sudo` to install it manually.
86
86
 
87
87
 
88
88
  ## Developers
data/Rakefile CHANGED
@@ -16,7 +16,7 @@ HOE = Hoe.spec "dang" do
16
16
  end
17
17
 
18
18
  task :parser do
19
- sh "ruby -I../kpeg/lib ../kpeg/bin/kpeg -o lib/dang/parser.rb -f -n Dang::Parser -s lib/dang/parser.kpeg"
19
+ sh "kpeg -o lib/dang/parser.rb -f -n Dang::Parser -s lib/dang/parser.kpeg"
20
20
  end
21
21
 
22
22
  $:.unshift "."
data/bin/dang CHANGED
@@ -5,7 +5,6 @@ require 'optparse'
5
5
 
6
6
  to_eval = nil
7
7
  path = nil
8
- version = false
9
8
 
10
9
  opt = OptionParser.new do |o|
11
10
  o.banner = "Usage: dang [options] [input.dang] [output.html]"
@@ -16,7 +15,7 @@ opt = OptionParser.new do |o|
16
15
 
17
16
  o.on "-v", "--version", "Print the version of Dang" do
18
17
  puts "dang #{Dang::VERSION}, codename: #{Dang::CODENAME}"
19
- version = true
18
+ exit
20
19
  end
21
20
 
22
21
  o.on "-h", "--help", "Print, well, this" do
@@ -34,7 +33,6 @@ else
34
33
  input = ARGV.shift
35
34
 
36
35
  if !input
37
- exit if version
38
36
  puts opt
39
37
  exit 1
40
38
  end
@@ -46,7 +44,7 @@ else
46
44
  f.puts data
47
45
  end
48
46
 
49
- puts "Wrote HTML to '#{output}'"
47
+ $stderr.puts "Wrote HTML to '#{output}'"
50
48
  else
51
49
  puts data
52
50
  end
@@ -1,37 +1,37 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # stub: dang 2.0.0 ruby lib
2
3
 
3
4
  Gem::Specification.new do |s|
4
5
  s.name = "dang"
5
- s.version = "1.0.0"
6
+ s.version = "2.0.0"
6
7
 
7
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib"]
8
10
  s.authors = ["Shane Becker"]
9
- s.date = "2013-08-09"
10
- s.description = "Dang is a Ruby templating language\nIt uses angle brackets and CSS syntax.\nSomewhere between ERB and Haml."
11
+ s.date = "2014-11-20"
12
+ s.description = "Dang is a Ruby templating language.\nIt uses angle brackets and CSS syntax.\nSomewhere between ERB and Haml."
11
13
  s.email = ["veganstraightedge@gmail.com"]
12
14
  s.executables = ["dang"]
13
- s.extra_rdoc_files = ["Manifest.txt"]
15
+ s.extra_rdoc_files = ["History.md", "Manifest.txt", "README.md", "TODO.md"]
14
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
17
  s.homepage = "https://github.com/veganstraightedge/dang"
16
18
  s.licenses = ["PUBLIC DOMAIN", "CC0"]
17
19
  s.rdoc_options = ["--main", "README.md"]
18
- s.require_paths = ["lib"]
19
- s.rubyforge_project = "dang"
20
- s.rubygems_version = "2.0.3"
21
- s.summary = "Dang is a Ruby templating language It uses angle brackets and CSS syntax"
20
+ s.rubygems_version = "2.2.2"
21
+ s.summary = "Dang is a Ruby templating language"
22
22
 
23
23
  if s.respond_to? :specification_version then
24
24
  s.specification_version = 4
25
25
 
26
26
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
- s.add_development_dependency(%q<rdoc>, ["~> 3.10"])
28
- s.add_development_dependency(%q<hoe>, ["~> 3.5"])
27
+ s.add_development_dependency(%q<rdoc>, ["~> 4.0"])
28
+ s.add_development_dependency(%q<hoe>, ["~> 3.13"])
29
29
  else
30
- s.add_dependency(%q<rdoc>, ["~> 3.10"])
31
- s.add_dependency(%q<hoe>, ["~> 3.5"])
30
+ s.add_dependency(%q<rdoc>, ["~> 4.0"])
31
+ s.add_dependency(%q<hoe>, ["~> 3.13"])
32
32
  end
33
33
  else
34
- s.add_dependency(%q<rdoc>, ["~> 3.10"])
35
- s.add_dependency(%q<hoe>, ["~> 3.5"])
34
+ s.add_dependency(%q<rdoc>, ["~> 4.0"])
35
+ s.add_dependency(%q<hoe>, ["~> 3.13"])
36
36
  end
37
37
  end
@@ -3,8 +3,8 @@ require 'rubygems'
3
3
  require 'dang/parser'
4
4
 
5
5
  class Dang
6
- VERSION = '1.0.0'
7
- CODENAME = 'Zoe'
6
+ VERSION = '2.0.0'
7
+ CODENAME = 'Abigail'
8
8
 
9
9
  @filters = {}
10
10
 
@@ -166,14 +166,14 @@ doctype = "!!!" space* rest:r { @doctype = r.empty? ? "html" : r }
166
166
  end = name:n ">" { n }
167
167
  slash = - "/>"
168
168
 
169
- marker = start | "<!" | "<=" | "<-" | (- end)
169
+ marker = start | "<!" | "<|" | "<:" | (- end)
170
170
  chunk = < (!marker .)* > { text }
171
171
 
172
- rclose = "->"
173
- ruby = "<-" < (!rclose .)* > rclose { code(text, false) }
172
+ rclose = ":>"
173
+ ruby = "<:" bs+ < (!rclose .)* > rclose { code(text, false) }
174
174
 
175
- pclose = "=>"
176
- puby = "<=" < (!pclose .)* > pclose { code(text) }
175
+ pclose = "|>"
176
+ puby = "<|" < (!pclose .)* > pclose { code(text) }
177
177
 
178
178
  part = ruby | puby| filter | comment | tag | chunk
179
179
  body = part:p body:b { join(p,b) }
@@ -13,8 +13,7 @@ class Dang::Parser
13
13
  # Prepares for parsing +str+. If you define a custom initialize you must
14
14
  # call this method before #parse
15
15
  def setup_parser(str, debug=false)
16
- @string = str
17
- @pos = 0
16
+ set_string str, 0
18
17
  @memoizations = Hash.new { |h,k| h[k] = {} }
19
18
  @result = nil
20
19
  @failed_rule = nil
@@ -27,7 +26,6 @@ class Dang::Parser
27
26
  attr_reader :failing_rule_offset
28
27
  attr_accessor :result, :pos
29
28
 
30
-
31
29
  def current_column(target=pos)
32
30
  if c = string.rindex("\n", target-1)
33
31
  return target - c - 1
@@ -61,6 +59,13 @@ class Dang::Parser
61
59
  @string[start..@pos-1]
62
60
  end
63
61
 
62
+ # Sets the string and current parsing position for the parser.
63
+ def set_string string, pos
64
+ @string = string
65
+ @string_size = string ? string.size : 0
66
+ @pos = pos
67
+ end
68
+
64
69
  def show_pos
65
70
  width = 10
66
71
  if @pos < width
@@ -167,19 +172,19 @@ class Dang::Parser
167
172
  return nil
168
173
  end
169
174
 
170
- if "".respond_to? :getbyte
175
+ if "".respond_to? :ord
171
176
  def get_byte
172
- if @pos >= @string.size
177
+ if @pos >= @string_size
173
178
  return nil
174
179
  end
175
180
 
176
- s = @string.getbyte @pos
181
+ s = @string[@pos].ord
177
182
  @pos += 1
178
183
  s
179
184
  end
180
185
  else
181
186
  def get_byte
182
- if @pos >= @string.size
187
+ if @pos >= @string_size
183
188
  return nil
184
189
  end
185
190
 
@@ -228,8 +233,7 @@ class Dang::Parser
228
233
  old_pos = @pos
229
234
  old_string = @string
230
235
 
231
- @pos = other.pos
232
- @string = other.string
236
+ set_string other.string, other.pos
233
237
 
234
238
  begin
235
239
  if val = __send__(rule, *args)
@@ -240,8 +244,7 @@ class Dang::Parser
240
244
  end
241
245
  val
242
246
  ensure
243
- @pos = old_pos
244
- @string = old_string
247
+ set_string old_string, old_pos
245
248
  end
246
249
  end
247
250
 
@@ -860,7 +863,7 @@ class Dang::Parser
860
863
  return _tmp
861
864
  end
862
865
 
863
- # marker = (start | "<!" | "<=" | "<-" | - end)
866
+ # marker = (start | "<!" | "<|" | "<:" | - end)
864
867
  def _marker
865
868
 
866
869
  _save = self.pos
@@ -871,10 +874,10 @@ class Dang::Parser
871
874
  _tmp = match_string("<!")
872
875
  break if _tmp
873
876
  self.pos = _save
874
- _tmp = match_string("<=")
877
+ _tmp = match_string("<|")
875
878
  break if _tmp
876
879
  self.pos = _save
877
- _tmp = match_string("<-")
880
+ _tmp = match_string("<:")
878
881
  break if _tmp
879
882
  self.pos = _save
880
883
 
@@ -948,19 +951,34 @@ class Dang::Parser
948
951
  return _tmp
949
952
  end
950
953
 
951
- # rclose = "->"
954
+ # rclose = ":>"
952
955
  def _rclose
953
- _tmp = match_string("->")
956
+ _tmp = match_string(":>")
954
957
  set_failed_rule :_rclose unless _tmp
955
958
  return _tmp
956
959
  end
957
960
 
958
- # ruby = "<-" < (!rclose .)* > rclose { code(text, false) }
961
+ # ruby = "<:" bs+ < (!rclose .)* > rclose { code(text, false) }
959
962
  def _ruby
960
963
 
961
964
  _save = self.pos
962
965
  while true # sequence
963
- _tmp = match_string("<-")
966
+ _tmp = match_string("<:")
967
+ unless _tmp
968
+ self.pos = _save
969
+ break
970
+ end
971
+ _save1 = self.pos
972
+ _tmp = apply(:_bs)
973
+ if _tmp
974
+ while true
975
+ _tmp = apply(:_bs)
976
+ break unless _tmp
977
+ end
978
+ _tmp = true
979
+ else
980
+ self.pos = _save1
981
+ end
964
982
  unless _tmp
965
983
  self.pos = _save
966
984
  break
@@ -968,19 +986,19 @@ class Dang::Parser
968
986
  _text_start = self.pos
969
987
  while true
970
988
 
971
- _save2 = self.pos
989
+ _save3 = self.pos
972
990
  while true # sequence
973
- _save3 = self.pos
991
+ _save4 = self.pos
974
992
  _tmp = apply(:_rclose)
975
993
  _tmp = _tmp ? nil : true
976
- self.pos = _save3
994
+ self.pos = _save4
977
995
  unless _tmp
978
- self.pos = _save2
996
+ self.pos = _save3
979
997
  break
980
998
  end
981
999
  _tmp = get_byte
982
1000
  unless _tmp
983
- self.pos = _save2
1001
+ self.pos = _save3
984
1002
  end
985
1003
  break
986
1004
  end # end sequence
@@ -1012,19 +1030,19 @@ class Dang::Parser
1012
1030
  return _tmp
1013
1031
  end
1014
1032
 
1015
- # pclose = "=>"
1033
+ # pclose = "|>"
1016
1034
  def _pclose
1017
- _tmp = match_string("=>")
1035
+ _tmp = match_string("|>")
1018
1036
  set_failed_rule :_pclose unless _tmp
1019
1037
  return _tmp
1020
1038
  end
1021
1039
 
1022
- # puby = "<=" < (!pclose .)* > pclose { code(text) }
1040
+ # puby = "<|" < (!pclose .)* > pclose { code(text) }
1023
1041
  def _puby
1024
1042
 
1025
1043
  _save = self.pos
1026
1044
  while true # sequence
1027
- _tmp = match_string("<=")
1045
+ _tmp = match_string("<|")
1028
1046
  unless _tmp
1029
1047
  self.pos = _save
1030
1048
  break
@@ -2644,12 +2662,12 @@ class Dang::Parser
2644
2662
  Rules[:_pts] = rule_info("pts", "(space+ { \"\" } | < eol bs* > { text })")
2645
2663
  Rules[:_end] = rule_info("end", "name:n \">\" { n }")
2646
2664
  Rules[:_slash] = rule_info("slash", "- \"/>\"")
2647
- Rules[:_marker] = rule_info("marker", "(start | \"<!\" | \"<=\" | \"<-\" | - end)")
2665
+ Rules[:_marker] = rule_info("marker", "(start | \"<!\" | \"<|\" | \"<:\" | - end)")
2648
2666
  Rules[:_chunk] = rule_info("chunk", "< (!marker .)* > { text }")
2649
- Rules[:_rclose] = rule_info("rclose", "\"->\"")
2650
- Rules[:_ruby] = rule_info("ruby", "\"<-\" < (!rclose .)* > rclose { code(text, false) }")
2651
- Rules[:_pclose] = rule_info("pclose", "\"=>\"")
2652
- Rules[:_puby] = rule_info("puby", "\"<=\" < (!pclose .)* > pclose { code(text) }")
2667
+ Rules[:_rclose] = rule_info("rclose", "\":>\"")
2668
+ Rules[:_ruby] = rule_info("ruby", "\"<:\" bs+ < (!rclose .)* > rclose { code(text, false) }")
2669
+ Rules[:_pclose] = rule_info("pclose", "\"|>\"")
2670
+ Rules[:_puby] = rule_info("puby", "\"<|\" < (!pclose .)* > pclose { code(text) }")
2653
2671
  Rules[:_part] = rule_info("part", "(ruby | puby | filter | comment | tag | chunk)")
2654
2672
  Rules[:_body] = rule_info("body", "(part:p body:b { join(p,b) } | part)")
2655
2673
  Rules[:_key] = rule_info("key", "(name | \"'\" < /[^'\\n]*/ > \"'\" { text })")