Re-write bit ranges in the docs
diff --git a/doc/note/base38-and-fourcc.md b/doc/note/base38-and-fourcc.md
index dc3c83f..dc51351 100644
--- a/doc/note/base38-and-fourcc.md
+++ b/doc/note/base38-and-fourcc.md
@@ -33,7 +33,7 @@
 instead of 32 bits. This is achieved by using a smaller alphabet of 38 possible
 values (space, 0-9, ? or a-z), so that it cannot distinguish between e.g. an
 upper case 'X' and a lower case 'x'. There's also the happy coincidence that
-`38 ** 4` is slightly smaller than `2 ** 21`.
+`38 ** 4`, `2085136`, is slightly smaller than `2 ** 21`, `2097152`.
 
 The base38 encoding of `"JPEG"` is `0x122FF6`, which is `1191926`, which is
 `((21 * (38 ** 3)) + (27 * (38 ** 2)) + (16 * (38 ** 1)) + (18 * (38 ** 0)))`.
@@ -45,9 +45,9 @@
 packages (assuming that there aren't e.g. two `"JPEG"` Wuffs packages in the
 same library). The conventional `uint32_t` packing is:
 
-- Bit        31 is reserved (zero).
-- Bits 30 .. 10 are the base38 value, shifted by 10.
-- Bits  9 ..  0 are the enumeration value.
+- Bit         `31`  (1 bit)  is reserved (zero).
+- Bits `10 ..= 30` (21 bits) are the base38 value, shifted by 10.
+- Bits  `0 ..=  9` (10 bits) are the enumeration value.
 
 For example, [quirk values](/doc/note/quirks.md) use this `((base38 << 10) |
 enumeration)` scheme.
diff --git a/doc/note/pixel-formats.md b/doc/note/pixel-formats.md
index bc6f26a..9eca00e 100644
--- a/doc/note/pixel-formats.md
+++ b/doc/note/pixel-formats.md
@@ -3,27 +3,27 @@
 `wuffs_base__pixel_format` is a `uint32_t` that encodes the format of the bytes
 that constitute an image frame's pixel data. Its bits:
 
-- bit        31 is reserved.
-- bits 30 .. 28 encodes color (and channel order, in terms of memory).
-- bit        27 is reserved.
-- bits 26 .. 24 encodes transparency.
-- bits 23 .. 21 are reserved.
-- bit        20 indicates big-endian/MSB-first (as opposed to little/LSB).
-- bit        19 indicates floating point (as opposed to integer).
-- bit        18 indicates palette-indexed. The number-of-planes (the next
-                field) will be 0, as the format is considered interleaved,
-                but the 8-bit N-BGRA color data is stored in plane 3.
-- bits 17 .. 16 are the number of planes, minus 1. Zero means interleaved.
-- bits 15 .. 12 encodes the number of bits (depth) in the 3rd channel.
-- bits 11 ..  8 encodes the number of bits (depth) in the 2nd channel.
-- bits  7 ..  4 encodes the number of bits (depth) in the 1st channel.
-- bits  3 ..  0 encodes the number of bits (depth) in the 0th channel.
+- Bit         `31` is reserved.
+- Bits `28 ..= 30` encodes color (and channel order, in terms of memory).
+- Bit         `27` is reserved.
+- Bits `24 ..= 26` encodes transparency.
+- Bits `21 ..= 23` are reserved.
+- Bit         `20` indicates big-endian/MSB-first (instead of little/LSB).
+- Bit         `19` indicates floating point (instead of integer).
+- Bit         `18` indicates palette-indexed. The number-of-planes (the next
+                   field) will be 0, as the format is considered interleaved,
+                   but the 8-bit N-BGRA color data is stored in plane 3.
+- Bits `16 ..= 17` are the number of planes, minus 1. Zero means interleaved.
+- Bits `12 ..= 15` encodes the number of bits (depth) in the 3rd channel.
+- Bits  `8 ..= 11` encodes the number of bits (depth) in the 2nd channel.
+- Bits  `4 ..=  7` encodes the number of bits (depth) in the 1st channel.
+- Bits  `0 ..=  3` encodes the number of bits (depth) in the 0th channel.
 
 The bit fields of a `wuffs_base__pixel_format` are not independent. For
 example, the number of planes should not be greater than the number of
-channels. Similarly, bits 15..4 are unused (and should be zero) if bits 31..24
-(color and transparency) together imply only 1 channel (gray, no alpha) and
-floating point samples should mean a bit depth of 16, 32 or 64.
+channels. Similarly, bits `4 ..= 15` are unused (and should be zero) if bits
+`24 ..= 31` (color and transparency) together imply only 1 channel (gray, no
+alpha) and floating point samples should mean a bit depth of 16, 32 or 64.
 
 Formats hold between 1 and 4 channels. For example: Y (1 channel: gray), YA (2
 channels: gray and alpha), BGR (3 channels: blue, green, red) or CMYK (4
@@ -77,7 +77,7 @@
 Bit depth is encoded in 4 bits:
 
 -  0 means the channel or index is unused.
--  x means a bit depth of  x, for x in the range 1..8.
+-  x means a bit depth of  x, for x in the range `1 ..= 8`.
 -  9 means a bit depth of 10.
 - 10 means a bit depth of 12.
 - 11 means a bit depth of 16.
diff --git a/doc/note/tokens.md b/doc/note/tokens.md
index 5577f2d..5e26d27 100644
--- a/doc/note/tokens.md
+++ b/doc/note/tokens.md
@@ -36,9 +36,9 @@
 
 A token is just a `uint64_t`. The broad divisions are:
 
-- Bits 63 .. 17 (47 bits) is the value.
-- Bits 16 .. 16  (1 bit)  is the `continued` bit.
-- Bits 15 ..  0 (16 bits) is the length.
+- Bits `17 ..= 63` (47 bits) are the value.
+- Bit         `16`  (1 bit)  is the `continued` bit.
+- Bits  `0 ..= 15` (16 bits) are the length.
 
 The `continued` bit is whether that the token chain for this token also
 contains the next token. The final token in a token chain, including
@@ -56,12 +56,12 @@
 
 The value bits can be sub-divided in multiple ways. First, the high bit:
 
-- Bits 63 .. 63  (1 bit)  denote an extended (1) or simple (0) token.
+- Bit         `63`  (1 bit)  denotes an extended (1) or simple (0) token.
 
 
 ### Extended Tokens
 
-- Bits 62 .. 17 (46 bits) is the bitwise-not (~) of the `value_extension`.
+- Bits `17 ..= 62` (46 bits) are the bitwise-not (~) of the `value_extension`.
 
 Extended tokens are typically part of a multi-token chain whose first token is
 a simple token that provides the semantics for each `value_extension`.
@@ -69,8 +69,8 @@
 
 ### Simple Tokens
 
-- Bits 62 .. 42 (21 bits) is the `value_major`.
-- Bits 41 .. 17 (25 bits) is the `value_minor`.
+- Bits `42 ..= 62` (21 bits) are the `value_major`.
+- Bits `17 ..= 41` (25 bits) are the `value_minor`.
 
 The `value_major` is a 21-bit [Base38](doc/note/base38-and-fourcc.md) number.
 For example, an HTML tokenizer might produce a combination of "base" tokens
@@ -87,8 +87,8 @@
 A zero `value_major` is reserved for Wuffs' built-in "base" package. The
 `value_minor` is further sub-divided:
 
-- Bits 41 .. 38  (4 bits) is the `VBC` (`value_base_category`).
-- Bits 37 .. 17 (21 bits) is the `VBD` (`value_base_detail`).
+- Bits `38 ..= 41`  (4 bits) are the `VBC` (`value_base_category`).
+- Bits `17 ..= 37` (21 bits) are the `VBD` (`value_base_detail`).
 
 The high 47 bits (bits 63 .. 17) only have `VBC` and `VBD` semantics when the
 high 22 bits (the `extended` and `value_major` parts) are all zero. An
@@ -132,8 +132,8 @@
 The [example/jsonfindptrs](/example/jsonfindptrs/jsonfindptrs.cc) program
 demonstrates creating a traditional DOM-like node tree from a SAX-like token
 stream. The [example/jsonptr](/example/jsonptr/jsonptr.cc) program demonstrates
-a different, lower-level approach that works directly on tokens, where the
-entire program (not just the Wuffs library) never calls `malloc`.
+a lower-level approach that works directly on tokens, where the entire program
+(not just the Wuffs library) never calls `malloc`.
 
 
 ## Example Token Stream