Skip to content

Commit 49f52ea

Browse files
author
Ary Borenszweig
committedDec 2, 2016
sprintf: make negative width left-justify. Fixes #3619
1 parent dd4c33e commit 49f52ea

File tree

2 files changed

+4
-7
lines changed

2 files changed

+4
-7
lines changed
 

Diff for: ‎spec/std/string_spec.cr

+1
Original file line numberDiff line numberDiff line change
@@ -1395,6 +1395,7 @@ describe "String" do
13951395
("%20s" % 'a').should eq(" a")
13961396
("%-20s" % 'a').should eq("a ")
13971397
("%*s" % [10, 123]).should eq(" 123")
1398+
("%*s" % [-10, 123]).should eq("123 ")
13981399
("%.5s" % "foo bar baz").should eq("foo b")
13991400
("%.*s" % [5, "foo bar baz"]).should eq("foo b")
14001401
("%*.*s" % [20, 5, "foo bar baz"]).should eq(" foo b")

Diff for: ‎src/string/formatter.cr

+3-7
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ struct String::Formatter(A)
292292

293293
def pad(consumed, flags)
294294
padding_char = flags.padding_char
295-
(flags.width - consumed).times do
295+
(flags.width.abs - consumed).times do
296296
@io << padding_char
297297
end
298298
end
@@ -366,16 +366,12 @@ struct String::Formatter(A)
366366
@precision_size = 0
367367
end
368368

369-
def wants_padding?
370-
@width > 0
371-
end
372-
373369
def left_padding?
374-
wants_padding? && !@minus
370+
@minus ? @width < 0 : @width > 0
375371
end
376372

377373
def right_padding?
378-
wants_padding? && @minus
374+
@minus ? @width > 0 : @width < 0
379375
end
380376

381377
def padding_char

0 commit comments

Comments
 (0)
Please sign in to comment.