Skip to content

Commit e83c0ff

Browse files
committed
num_newlines
1 parent 037aa7a commit e83c0ff

File tree

1 file changed

+34
-13
lines changed

1 file changed

+34
-13
lines changed

src/BlockScalars.jl

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function block(str::AbstractString, block_scalar::AbstractString="")
2424
end
2525

2626
out = IOBuffer()
27-
ending = IOBuffer()
27+
num_newlines = 0
2828

2929
if style == 'f'
3030
# The code below is equivalent to these two regexes:
@@ -43,14 +43,16 @@ function block(str::AbstractString, block_scalar::AbstractString="")
4343
elseif !isspace(prev)
4444
write(out, ' ')
4545
else
46-
write(ending, '\n')
46+
num_newlines += 1
4747
end
4848
else
49-
write(ending, '\n')
49+
num_newlines += 1
5050
end
5151
elseif curr != '\0'
52-
write(out, take!(ending))
53-
ending = IOBuffer()
52+
if num_newlines > 0
53+
write(out, "\n" ^ num_newlines)
54+
num_newlines = 0
55+
end
5456

5557
write(out, curr)
5658
end
@@ -59,32 +61,51 @@ function block(str::AbstractString, block_scalar::AbstractString="")
5961
curr = next
6062
end
6163

62-
write(out, curr)
64+
if curr == '\n'
65+
num_newlines += 1
66+
elseif curr != '\0'
67+
if num_newlines > 0
68+
write(out, "\n" ^ num_newlines)
69+
num_newlines = 0
70+
end
71+
72+
write(out, curr)
73+
end
6374
elseif style == 'l'
6475
curr = '\0'
6576
for next in str
6677
if curr == '\n'
67-
write(ending, '\n')
78+
num_newlines += 1
6879
elseif curr != '\0'
69-
write(out, take!(ending))
70-
ending = IOBuffer()
80+
if num_newlines > 0
81+
write(out, "\n" ^ num_newlines)
82+
num_newlines = 0
83+
end
7184

7285
write(out, curr)
7386
end
7487

7588
curr = next
7689
end
7790

78-
write(out, curr)
91+
if curr == '\n'
92+
num_newlines += 1
93+
elseif curr != '\0'
94+
if num_newlines > 0
95+
write(out, "\n" ^ num_newlines)
96+
num_newlines = 0
97+
end
98+
99+
write(out, curr)
100+
end
79101
else
80102
throw(ArgumentError("Unknown block style indicator: $(repr(style))"))
81103
end
82104

83-
seekstart(ending)
84105
if chomp == 'c'
85-
!eof(ending) && write(out, read(ending, Char))
106+
num_newlines > 0 && write(out, '\n')
86107
elseif chomp == 'k'
87-
write(out, ending)
108+
write(out, "\n" ^ num_newlines)
88109
elseif chomp != 's'
89110
throw(ArgumentError("Unknown block chomping indicator: $(repr(chomp))"))
90111
end

0 commit comments

Comments
 (0)