diff --git a/doc/syntax.md b/doc/syntax.md
index ac512823..2007cb2a 100644
--- a/doc/syntax.md
+++ b/doc/syntax.md
@@ -1,14 +1,15 @@
# Format String Syntax
-Formatting functions such as [`fmt::format`](api.md#format) and [`fmt::print`](
-api.md#print) use the same format string syntax described in this section.
+The formatting functions in this library — most notably
+[`fmt::format`](api.md#format) and [`fmt::print`](api.md#print) — accept
+format strings written in the syntax described here.
-Format strings contain "replacement fields" surrounded by curly braces `{}`.
-Anything that is not contained in braces is considered literal text, which is
-copied unchanged to the output. If you need to include a brace character in
-the literal text, it can be escaped by doubling: `{{` and `}}`.
+A format string is plain text with embedded *replacement fields* delimited by
+the braces `{` and `}`. Characters outside of any replacement field are
+copied to the output unchanged. To emit a literal brace, double it: `{{`
+yields a single `{` in the output, and `}}` yields a single `}`.
-The grammar for a replacement field is as follows:
+A replacement field is described by the grammar below.
-
- | Type |
- Meaning |
-
-
- 'b' |
-
- Binary format. Outputs the number in base 2. Using the '#'
- option with this type adds the prefix "0b" to the output value.
- |
-
-
- 'B' |
-
- Binary format. Outputs the number in base 2. Using the '#'
- option with this type adds the prefix "0B" to the output value.
- |
-
-
- 'c' |
- Character format. Outputs the number as a character. |
-
-
- 'd' |
- Decimal integer. Outputs the number in base 10. |
-
-
- 'o' |
- Octal format. Outputs the number in base 8. |
-
-
- 'x' |
-
- Hex format. Outputs the number in base 16, using lower-case letters for the
- digits above 9. Using the '#' option with this type adds the
- prefix "0x" to the output value.
- |
-
-
- 'X' |
-
- Hex format. Outputs the number in base 16, using upper-case letters for the
- digits above 9. Using the '#' option with this type adds the
- prefix "0X" to the output value.
- |
-
-
- | none |
- The same as 'd'. |
-
-
+A `0` placed immediately before *width* enables sign-aware zero padding for
+numeric types. Zeros are inserted between the sign (or base prefix, if any)
+and the most significant digit, so that a sign or `0x` prefix stays adjacent
+to the digits rather than being separated by spaces. For example, `{:+08d}`
+applied to `120` produces `+0000120`.
-Integer presentation types can also be used with character and Boolean values
-with the only exception that `'c'` cannot be used with `bool`. Boolean values
-are formatted using textual representation, either `true` or `false`, if the
-presentation type is not specified.
+Zero padding:
-The available presentation types for floating-point values are:
+- applies only to numeric types;
+- has no effect on `inf` or `nan`;
+- is silently ignored when an explicit *align* is also present.
-
-
- | Type |
- Meaning |
-
-
- 'a' |
-
- Hexadecimal floating point format. Prints the number in base 16 with
- prefix "0x" and lower-case letters for digits above 9.
- Uses 'p' to indicate the exponent.
- |
-
-
- 'A' |
-
- Same as 'a' except it uses upper-case letters for the
- prefix, digits above 9 and to indicate the exponent.
- |
-
-
- 'e' |
-
- Exponent notation. Prints the number in scientific notation using
- the letter 'e' to indicate the exponent.
- |
-
-
- 'E' |
-
- Exponent notation. Same as 'e' except it uses an
- upper-case 'E' as the separator character.
- |
-
-
- 'f' |
- Fixed point. Displays the number as a fixed-point number. |
-
-
- 'F' |
-
- Fixed point. Same as 'f', but converts nan
- to NAN and inf to INF.
- |
-
-
- 'g' |
-
- General format. For a given precision p >= 1,
- this rounds the number to p significant digits and then
- formats the result in either fixed-point format or in scientific
- notation, depending on its magnitude.
- A precision of 0 is treated as equivalent to a precision
- of 1.
- |
-
-
- 'G' |
-
- General format. Same as 'g' except switches to
- 'E' if the number gets too large. The representations of
- infinity and NaN are uppercased, too.
- |
-
-
- | none |
-
- Similar to 'g', except that the default precision is as
- high as needed to represent the particular value.
- |
-
-
+### Width
-The available presentation types for pointers are:
+*width* is a non-negative decimal integer giving the minimum number of
+characters that the field should occupy. If the formatted value is shorter
+than *width*, it is padded according to *align* and *fill*; if it is longer,
+the value is written in full. *width* never causes the value to be
+truncated.
-