Skip to content

Commit e689365

Browse files
committed
Refactor
1 parent c4d47ec commit e689365

File tree

1 file changed

+25
-19
lines changed

1 file changed

+25
-19
lines changed

lib/mudbrick/text_block.ex

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,30 +37,36 @@ defmodule Mudbrick.TextBlock do
3737
end
3838

3939
def write(tb, text, opts \\ []) do
40+
line_texts = String.split(text, "\n")
41+
4042
Map.update!(tb, :lines, fn
4143
[] ->
42-
for text <- String.split(text, "\n"), reduce: [] do
43-
acc ->
44-
[Line.wrap(text, opts) | acc]
45-
end
44+
add_texts([], line_texts, opts)
4645

47-
[%Line{} = previous_line | existing_lines] ->
48-
[first_new_line_text | new_line_texts] = String.split(text, "\n")
46+
existing_lines ->
47+
case line_texts do
48+
["" | new_line_texts] ->
49+
existing_lines
50+
|> add_texts(new_line_texts, opts)
4951

50-
new_previous_line =
51-
if first_new_line_text == "" do
52-
previous_line
53-
else
54-
Map.update!(previous_line, :parts, fn
55-
parts ->
56-
[Part.wrap(first_new_line_text, opts) | parts]
57-
end)
58-
end
59-
60-
for text <- new_line_texts, reduce: [new_previous_line | existing_lines] do
61-
acc ->
62-
[Line.wrap(text, opts) | acc]
52+
[first_new_line_text | new_line_texts] ->
53+
existing_lines
54+
|> update_previous_line(first_new_line_text, opts)
55+
|> add_texts(new_line_texts, opts)
6356
end
6457
end)
6558
end
59+
60+
defp update_previous_line([previous_line | existing_lines], first_new_line_text, opts) do
61+
[
62+
Map.update!(previous_line, :parts, &[Part.wrap(first_new_line_text, opts) | &1])
63+
| existing_lines
64+
]
65+
end
66+
67+
defp add_texts(existing_lines, new_line_texts, opts) do
68+
for text <- new_line_texts, reduce: existing_lines do
69+
acc -> [Line.wrap(text, opts) | acc]
70+
end
71+
end
6672
end

0 commit comments

Comments
 (0)