Parse . in a regex
This commit is contained in:
parent
70b3e56de2
commit
39f164a7db
@ -214,6 +214,8 @@ module Imbecile
|
||||
au.new_alternate!
|
||||
when "\\"
|
||||
au << parse_backslash
|
||||
when "."
|
||||
au << period_character_class
|
||||
else
|
||||
au << CharacterRangeUnit.new(c)
|
||||
end
|
||||
@ -307,6 +309,13 @@ module Imbecile
|
||||
end
|
||||
end
|
||||
|
||||
def period_character_class
|
||||
ccu = CharacterClassUnit.new
|
||||
ccu << CharacterRangeUnit.new(0, "\n".ord - 1)
|
||||
ccu << CharacterRangeUnit.new("\n".ord + 1, 0xFFFFFFFF)
|
||||
ccu
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -235,7 +235,7 @@ module Imbecile
|
||||
expect(ccu[0].min_code_point).to eq "-".ord
|
||||
end
|
||||
|
||||
it "parses . as a plain character in a negated character class" do
|
||||
it "parses . as a plain character in a character class" do
|
||||
parser = Parser.new("[.]")
|
||||
expect(parser.unit).to be_a Parser::AlternatesUnit
|
||||
expect(parser.unit.alternates.size).to eq 1
|
||||
@ -279,6 +279,17 @@ module Imbecile
|
||||
expect(parser.unit.alternates[1].size).to eq 1
|
||||
end
|
||||
|
||||
it "parses a ." do
|
||||
parser = Parser.new("a.b")
|
||||
expect(parser.unit).to be_a Parser::AlternatesUnit
|
||||
expect(parser.unit.alternates.size).to eq 1
|
||||
expect(parser.unit.alternates[0]).to be_a Parser::SequenceUnit
|
||||
expect(parser.unit.alternates[0][0]).to be_a Parser::CharacterRangeUnit
|
||||
expect(parser.unit.alternates[0][1]).to be_a Parser::CharacterClassUnit
|
||||
expect(parser.unit.alternates[0][1].units.size).to eq 2
|
||||
expect(parser.unit.alternates[0][2]).to be_a Parser::CharacterRangeUnit
|
||||
end
|
||||
|
||||
it "parses something complex" do
|
||||
parser = Parser.new("(a|)*|[^^]|\\|v|[x-y]+")
|
||||
expect(parser.unit).to be_a Parser::AlternatesUnit
|
||||
|
Loading…
x
Reference in New Issue
Block a user