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 +4 -4
- data/Gemfile.lock +2 -2
- data/bin/wexprTool +1 -1
- data/lib/wexpr/exception.rb +3 -0
- data/lib/wexpr/expression.rb +56 -83
- data/lib/wexpr/version.rb +1 -1
- data/lib/wexpr.rb +5 -5
- data/wexpr.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d69b8945baa9211cb2b896fdf425c0dc403e06a55599d0ebf917fa49e47c3e7
|
4
|
+
data.tar.gz: 9409bd300351110d65e637de80509d3402eeecbb4896c6349ebf8660b5f1338c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
+
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 (~>
|
18
|
+
rake (~> 12.3)
|
19
19
|
wexpr!
|
20
20
|
|
21
21
|
BUNDLED WITH
|
data/bin/wexprTool
CHANGED
data/lib/wexpr/exception.rb
CHANGED
data/lib/wexpr/expression.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
#
|
740
|
-
buffer[
|
741
|
-
|
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
|
-
|
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
data/lib/wexpr.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
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", "~>
|
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.
|
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:
|
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: '
|
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: '
|
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.
|
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
|