Skip to content

Commit

Permalink
Drop Char::Reader#@end (crystal-lang#13920)
Browse files Browse the repository at this point in the history
  • Loading branch information
straight-shoota authored and Blacksmoke16 committed Dec 11, 2023
1 parent 170b640 commit ad01d58
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 18 deletions.
5 changes: 5 additions & 0 deletions spec/std/char/reader_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -102,15 +102,18 @@ describe "Char::Reader" do
reader.pos.should eq(0)
reader.current_char.ord.should eq(0)
reader.has_previous?.should be_false
reader.has_next?.should be_false
end

it "gets previous char (ascii)" do
reader = Char::Reader.new(at_end: "hello")
reader.pos.should eq(4)
reader.current_char.should eq('o')
reader.has_previous?.should be_true
reader.has_next?.should be_true

reader.previous_char.should eq('l')
reader.has_next?.should be_true
reader.previous_char.should eq('l')
reader.previous_char.should eq('e')
reader.previous_char.should eq('h')
Expand All @@ -126,8 +129,10 @@ describe "Char::Reader" do
reader.pos.should eq(9)
reader.current_char.should eq('語')
reader.has_previous?.should be_true
reader.has_next?.should be_true

reader.previous_char.should eq('本')
reader.has_next?.should be_true
reader.previous_char.should eq('日')
reader.previous_char.should eq('á')
reader.previous_char.should eq('h')
Expand Down
30 changes: 12 additions & 18 deletions src/char/reader.cr
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ struct Char
@pos = pos.to_i
@current_char = '\0'
@current_char_width = 0
@end = false
decode_current_char
end

Expand All @@ -69,7 +68,6 @@ struct Char
@pos = @string.bytesize
@current_char = '\0'
@current_char_width = 0
@end = false
decode_previous_char
end

Expand All @@ -83,7 +81,7 @@ struct Char
# reader.peek_next_char # => '\0'
# ```
def has_next? : Bool
!@end
@pos < @string.bytesize
end

# Reads the next character in the string,
Expand Down Expand Up @@ -177,7 +175,7 @@ struct Char
# C
# ```
def each(&) : Nil
while @pos < @string.bytesize
while has_next?
yield current_char

@pos += @current_char_width
Expand Down Expand Up @@ -251,26 +249,22 @@ struct Char
private def decode_current_char
decode_char_at(@pos) do |code_point, width, error|
@current_char_width = width
@end = @pos == @string.bytesize
@error = error
@current_char = code_point.unsafe_chr
end
end

private def decode_previous_char
if @pos == 0
@end = @pos == @string.bytesize
else
while @pos > 0
@pos -= 1
break if (byte_at(@pos) & 0xC0) != 0x80
end
decode_char_at(@pos) do |code_point, width, error|
@current_char_width = width
@end = @pos == @string.bytesize
@error = error
@current_char = code_point.unsafe_chr
end
return if @pos == 0

while @pos > 0
@pos -= 1
break if (byte_at(@pos) & 0xC0) != 0x80
end
decode_char_at(@pos) do |code_point, width, error|
@current_char_width = width
@error = error
@current_char = code_point.unsafe_chr
end
end

Expand Down

0 comments on commit ad01d58

Please sign in to comment.