Skip to content

Commit 6dff83b

Browse files
committed
Fix right-aligned underline
1 parent 97bc9d0 commit 6dff83b

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

lib/mudbrick/text_block/output.ex

+14-14
Original file line numberDiff line numberDiff line change
@@ -92,53 +92,53 @@ defmodule Mudbrick.TextBlock.Output do
9292
output
9393
|> leading(line)
9494
|> reset_offset(x_offsetter.(line))
95-
|> reduce_parts(line, TJ, :first_line, x_offsetter)
95+
|> reduce_parts(line, TJ, :first_line, x_offsetter.(line))
9696
|> offset(x_offsetter.(line))
9797
end
9898

9999
defp reduce_lines(output, [line | lines], x_offsetter) do
100100
output
101101
|> leading(line)
102102
|> reset_offset(x_offsetter.(line))
103-
|> reduce_parts(line, TJ, nil, x_offsetter)
103+
|> reduce_parts(line, TJ, nil, x_offsetter.(line))
104104
|> offset(x_offsetter.(line))
105105
|> reduce_lines(lines, x_offsetter)
106106
end
107107

108-
defp reduce_parts(output, %Line{parts: []}, _operator, :first_line, _x_offsetter) do
108+
defp reduce_parts(output, %Line{parts: []}, _operator, :first_line, _x_offset) do
109109
output
110110
end
111111

112-
defp reduce_parts(output, %Line{parts: [part]} = line, _operator, :first_line, x_offsetter) do
112+
defp reduce_parts(output, %Line{parts: [part]}, _operator, :first_line, x_offset) do
113113
output
114114
|> add_part(part, TJ)
115-
|> underline(part, x_offsetter.(line))
115+
|> underline(part, x_offset)
116116
end
117117

118-
defp reduce_parts(output, %Line{parts: []}, _operator, nil, _x_offsetter) do
118+
defp reduce_parts(output, %Line{parts: []}, _operator, nil, _x_offset) do
119119
output
120120
|> add(%TJ{font: output.font, text: ""})
121121
|> add(%TStar{})
122122
end
123123

124-
defp reduce_parts(output, %Line{parts: [part]} = line, _operator, nil, x_offsetter) do
124+
defp reduce_parts(output, %Line{parts: [part]}, _operator, nil, x_offset) do
125125
output
126126
|> add_part(part, TJ)
127127
|> add(%TStar{})
128-
|> underline(part, x_offsetter.(line))
128+
|> underline(part, x_offset)
129129
end
130130

131131
defp reduce_parts(
132132
output,
133133
%Line{parts: [part | parts]} = line,
134134
operator,
135135
line_kind,
136-
x_offsetter
136+
x_offset
137137
) do
138138
output
139139
|> add_part(part, operator)
140-
|> underline(part, x_offsetter.(line))
141-
|> reduce_parts(%{line | parts: parts}, TJ, line_kind, x_offsetter)
140+
|> underline(part, x_offset)
141+
|> reduce_parts(%{line | parts: parts}, TJ, line_kind, x_offset)
142142
end
143143

144144
defp leading(output, line) do
@@ -163,11 +163,11 @@ defmodule Mudbrick.TextBlock.Output do
163163
end
164164

165165
defp underline_path(output, part, line_x_offset) do
166-
{x, y} = output.position
166+
{initial_x, initial_y} = output.position
167167
{offset_x, offset_y} = part.left_offset
168168

169-
x = x + offset_x - line_x_offset
170-
y = y + offset_y - part.font_size / 10
169+
x = initial_x + offset_x - line_x_offset
170+
y = initial_y + offset_y - part.font_size / 10
171171

172172
Path.new()
173173
|> Path.move(to: {x, y})

test/mudbrick/text_block_test.exs

+20
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,26 @@ defmodule Mudbrick.TextBlockTest do
478478
|> operations()
479479
end
480480

481+
test "underlines are correctly aligned" do
482+
assert [
483+
"q",
484+
"-173.59199999999998 498.8 m",
485+
"0 0 0 RG",
486+
"1 w",
487+
"-111.624 498.8 l",
488+
"S",
489+
"Q"
490+
| _
491+
] =
492+
output(fn %{fonts: fonts} ->
493+
TextBlock.new(font: fonts.regular, position: {0, 500}, align: :right)
494+
|> TextBlock.write("not underlined ")
495+
|> TextBlock.write("underlined ", underline: [width: 1])
496+
|> TextBlock.write("not underlined again")
497+
end)
498+
|> operations()
499+
end
500+
481501
test "inline font sizes affect alignment offset of whole line" do
482502
assert offset_with_partial_font_size(50) < offset_with_partial_font_size(12)
483503
end

0 commit comments

Comments
 (0)