@@ -37,30 +37,36 @@ defmodule Mudbrick.TextBlock do
37
37
end
38
38
39
39
def write ( tb , text , opts \\ [ ] ) do
40
+ line_texts = String . split ( text , "\n " )
41
+
40
42
Map . update! ( tb , :lines , fn
41
43
[ ] ->
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 )
46
45
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 )
49
51
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 )
63
56
end
64
57
end )
65
58
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
66
72
end
0 commit comments