dang 1.0.0 → 2.0.0

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.
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 })")