' output as-is
- left aligned
- width field width. If starting with 0 the
- output is zero padded
+
+ width minimum and/or maximum field width:
+ [width_min][.width_max]
+ When minimum starts with 0, the field is zero-padded.
+ String values exceeding maximum width are truncated.
+
{arg} argument such as header name etc
Format codes:
}
}
- if (fmt->width) {
+ // enforce width limits if configured
+ const bool haveMaxWidth = fmt->precision && !doint && !dooff;
+ if (haveMaxWidth || fmt->width) {
+ const int minWidth = fmt->width ?
+ static_cast<int>(fmt->width) : 0;
+ const int maxWidth = haveMaxWidth ?
+ static_cast<int>(fmt->precision) : strlen(out);
+
if (fmt->left)
- mb.Printf("%-*s", (int) fmt->width, out);
+ mb.Printf("%-*.*s", minWidth, maxWidth, out);
else
- mb.Printf("%*s", (int) fmt->width, out);
+ mb.Printf("%*.*s", minWidth, maxWidth, out);
} else
mb.append(out, strlen(out));
} else {