wexpr 0.1.5 → 0.1.6

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb137f82e5ce0df3bc01eeef752306037f9d954cd0b932f0b4d33a09ced8790a
4
- data.tar.gz: 5dc50feec919b6c33aedf3085032dd913bf459a767c89f6e6777413931b1b9cf
3
+ metadata.gz: 7d69b8945baa9211cb2b896fdf425c0dc403e06a55599d0ebf917fa49e47c3e7
4
+ data.tar.gz: 9409bd300351110d65e637de80509d3402eeecbb4896c6349ebf8660b5f1338c
5
5
  SHA512:
6
- metadata.gz: accc6c25a9a27e0ccfb83d8e0d8231a1e644d6ed63925be277b23427877895e9d5831c0fffcdec5db0f72c028cfe5b01f74516edffa0cece4840b8f49e8a2546
7
- data.tar.gz: 691cb77e3b8cb21eef9c76954cba54dbf37d2efeecac94087d570fddd36f2868ed455e1ac6377208f0d6e823fd6f790a9be6457e9b11fef3ffe930933ab11fac
6
+ metadata.gz: cc3f65916ce7267cc67cbd0461163f7e6fde51f6a7bfc02a5b249776fefebef0a74e83a3871e09ab6c912a3c77523e549b15d440ab7626df7c2438e7c59eb106
7
+ data.tar.gz: 035c0f7df69a0b73241f8e839885bca8a392d1b5ddf6c6d079a3f1af297124e4e4153b5029bba4e0797a4ff496076c24e74e1285e64ac0765e742b57c155b5a7
data/Gemfile.lock CHANGED
@@ -7,7 +7,7 @@ GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  minitest (5.11.3)
10
- rake (10.5.0)
10
+ rake (12.3.3)
11
11
 
12
12
  PLATFORMS
13
13
  ruby
@@ -15,7 +15,7 @@ PLATFORMS
15
15
  DEPENDENCIES
16
16
  bundler (~> 1.16)
17
17
  minitest (~> 5.0)
18
- rake (~> 10.0)
18
+ rake (~> 12.3)
19
19
  wexpr!
20
20
 
21
21
  BUNDLED WITH
data/bin/wexprTool CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "wexpr"
4
+ require_relative "../lib/wexpr"
5
5
 
6
6
  require 'optparse'
7
7
 
@@ -44,6 +44,9 @@ module Wexpr
44
44
  class MapNoValueError < Exception
45
45
  end
46
46
 
47
+ class StringMissingQuoteError < Exception
48
+ end
49
+
47
50
  class ReferenceMissingEndBracketError < Exception
48
51
  end
49
52
 
@@ -546,19 +546,13 @@ module Wexpr
546
546
  end
547
547
 
548
548
  def self.s_is_not_bareword_safe(c)
549
- return (c == '*' \
550
- or c == '#' \
551
- or c == '@' \
552
- or c == '(' or c == ')' \
553
- or c == '[' or c == ']' \
554
- or c == '^' \
555
- or c == '<' or c == '>' \
556
- or c == '"' \
557
- or c == ';' \
558
- or self.s_is_whitespace(c) \
559
- )
549
+ return /^(\*|\#|\@|\(|\)|\[|\]|\^|<|>|"|;|\s)$/.match? c
560
550
  end
561
551
 
552
+ def self.s_index_of_first_non_bareword(s, startIndex)
553
+ return s.index(/(\*|\#|\@|\(|\)|\[|\]|\^|<|>|"|;|\s)/, startIndex)
554
+ end
555
+
562
556
  def self.s_is_escape_valid(c)
563
557
  return (c == '"' || c == 'r' || c == 'n' || c == 't' || c == "\\")
564
558
  end
@@ -647,11 +641,6 @@ module Wexpr
647
641
 
648
642
  # will copy out the value of the string to a new buffer, will parse out quotes as needed
649
643
  def self.s_create_value_of_string(str, parserState)
650
- # two pass:
651
- # first pass, get the length of the size
652
- # second pass, store the buffer
653
-
654
- bufferLength = 0
655
644
  isQuotedString = false
656
645
  isEscaped = false
657
646
  pos = 0 # position we're parsing at
@@ -661,91 +650,75 @@ module Wexpr
661
650
  pos += 1
662
651
  end
663
652
 
664
- while pos < str.size
665
- c = str[pos]
666
-
667
- if isQuotedString
668
- if isEscaped
669
- # we're in an escape. Is it valid?
670
- if self.s_is_escape_valid(c)
671
- bufferLength += 1 # counts
672
- isEscaped = false # escape ended
673
- else
674
- raise InvalidStringEscapeError.new(parserState.line, parserState.column, "Invalid escape found in the string")
675
- end
676
- else
677
- if c == '"'
678
- # end quote, part of us
679
- pos += 1
680
- break
681
- elsif c == "\\"
682
- # we're escaping
683
- isEscaped = true
684
- else
685
- # otherwise it's a character
686
- bufferLength += 1
687
- end
688
- end
689
- else
690
- # have we ended the word?
691
- if self.s_is_not_bareword_safe(c)
692
- # ended - not part of us
693
- break
694
- end
695
-
696
- # otherwise, its a character
697
- bufferLength += 1
698
- end
699
-
700
- pos += 1
701
- end
702
-
703
- if bufferLength == 0 and !isQuotedString # cannot have an empty barewords string
704
- raise EmptyStringError.new(parserState.line, parserState.column, "Was told to parse an empty string")
705
- end
706
-
707
- endVal = pos
708
-
709
- # we now know our buffer size and the string has been checked
710
- # ... not that we needed this in ruby
653
+ # parse out and write the string
711
654
  buffer = ""
712
655
  writePos = 0
713
656
  pos = 0
714
657
  if isQuotedString
715
658
  pos = 1
716
- end
717
-
718
- while writePos < bufferLength
719
- c = str[pos]
720
-
721
- if isQuotedString
659
+ while pos < str.size
722
660
  if isEscaped
661
+ c = str[pos]
723
662
  escapedValue = self.s_value_for_escape(c)
724
663
  buffer[writePos] = escapedValue
725
664
  writePos += 1
726
665
  isEscaped = false
727
666
  else
728
- if c == "\\"
667
+ # move forward to the next escape or end of string
668
+ ni = str.index(/["\\]/, pos)
669
+ if ni == nil
670
+ # uhhhh no possible end to string - missing a quote?
671
+ raise StringMissingQuoteError.new(parserState.line, parserState.column, "String was quoted, but couldnt find an ending quote")
672
+ end
673
+
674
+ # otherwise, copy up to the pos
675
+ if ni != 0
676
+ sub = str[pos..ni-1]
677
+ buffer += sub
678
+ pos += sub.size
679
+ writePos += sub.size
680
+ end
681
+
682
+ # Now we're on top of a special character
683
+ c = str[pos]
684
+ if c == '"'
685
+ # end quote, part of us and we're done
686
+ pos += 1
687
+ break
688
+ elsif c == "\\"
729
689
  # we're escaping
730
690
  isEscaped = true
731
691
  else
732
- # otherwise it's a character
733
- buffer[writePos] = c
734
- writePos += 1
692
+ raise StandardError.new("INTERNAL ERROR: reached a special character, but not an expected special character??? (was: #{c} at #{pos})")
735
693
  end
736
694
  end
737
695
 
696
+ # next character
697
+ pos += 1
698
+ end
699
+ else # !isQuotedString
700
+
701
+ # figure out where we would end the word
702
+ sub = str[pos..-1]
703
+ i = self.s_index_of_first_non_bareword(sub, pos)
704
+ if i == nil
705
+ # entire rest is fine
706
+ buffer += sub
707
+ pos += sub.size
708
+ writePos += sub.size
738
709
  else
739
- # it's a character
740
- buffer[writePos] = c
741
- writePos += 1
710
+ # up to i is fine
711
+ buffer += sub[0..i-1]
712
+ pos += i
713
+ writePos += i
742
714
  end
743
-
744
- # next character
745
- pos += 1
746
715
  end
747
-
748
- return buffer, endVal
716
+
717
+ if writePos == 0 and !isQuotedString # cannot have an empty barewords string
718
+ raise EmptyStringError.new(parserState.line, parserState.column, "Was told to parse an empty string")
719
+ end
720
+
721
+ return buffer, pos
749
722
  end
750
723
 
751
724
  # returns information about a string
@@ -950,7 +923,7 @@ module Wexpr
950
923
  # will load into self, setting up everything. Assumes we're empty/null to start.
951
924
  def p_parse_from_string(str, parseFlags, parserState)
952
925
  if str.size == 0
953
- raise EmptyStringError(parserState.line, parserState.column, "Was told to parse an empty string")
926
+ raise EmptyStringError.new(parserState.line, parserState.column, "Was told to parse an empty string")
954
927
  end
955
928
 
956
929
  # now we parse
@@ -1029,7 +1002,7 @@ module Wexpr
1029
1002
  str = keyExpression.p_parse_from_string(str, parseFlags, parserState)
1030
1003
 
1031
1004
  if keyExpression.type != :value
1032
- raise MapKeyMustBeAValueError.new(prevLine, prevColumn, "Map keys must be a value")
1005
+ raise MapKeyMustBeAValueError.new(prevLine, prevColumn, "Map keys must be a value: was #{keyExpression.type}")
1033
1006
  end
1034
1007
 
1035
1008
  valueExpression = Expression.create_invalid()
data/lib/wexpr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Wexpr
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
data/lib/wexpr.rb CHANGED
@@ -1,8 +1,8 @@
1
- require 'wexpr/exception'
2
- require 'wexpr/expression'
3
- require 'wexpr/object_ext'
4
- require 'wexpr/uvlq64'
5
- require 'wexpr/version'
1
+ require_relative 'wexpr/exception'
2
+ require_relative 'wexpr/expression'
3
+ require_relative 'wexpr/object_ext'
4
+ require_relative 'wexpr/uvlq64'
5
+ require_relative 'wexpr/version'
6
6
 
7
7
  #
8
8
  # Ruby-Wexpr library
data/wexpr.gemspec CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.require_paths = ["lib"]
35
35
 
36
36
  spec.add_development_dependency "bundler", "~> 1.16"
37
- spec.add_development_dependency "rake", "~> 10.0"
37
+ spec.add_development_dependency "rake", "~> 12.3"
38
38
  spec.add_development_dependency "minitest", "~> 5.0"
39
39
 
40
40
  spec.required_ruby_version = '>= 2.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wexpr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenneth Perry (thothonegan)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-08 00:00:00.000000000 Z
11
+ date: 2021-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '12.3'
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: '10.0'
40
+ version: '12.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  version: '0'
100
100
  requirements: []
101
101
  rubyforge_project:
102
- rubygems_version: 2.7.6.2
102
+ rubygems_version: 2.7.6.3
103
103
  signing_key:
104
104
  specification_version: 4
105
105
  summary: Wexpr parser and emitter for ruby