Replace format flags u32 by enums and bools.
This commit is contained in:
parent
db137ba7d4
commit
0abf8a0617
6 changed files with 154 additions and 62 deletions
|
@ -16,7 +16,6 @@
|
|||
|
||||
pub use Alignment::*;
|
||||
pub use Count::*;
|
||||
pub use Flag::*;
|
||||
pub use Piece::*;
|
||||
pub use Position::*;
|
||||
|
||||
|
@ -111,8 +110,14 @@ pub struct FormatSpec<'a> {
|
|||
pub fill: Option<char>,
|
||||
/// Optionally specified alignment.
|
||||
pub align: Alignment,
|
||||
/// Packed version of various flags provided.
|
||||
pub flags: u32,
|
||||
/// The `+` or `-` flag.
|
||||
pub sign: Option<Sign>,
|
||||
/// The `#` flag.
|
||||
pub alternate: bool,
|
||||
/// The `0` flag.
|
||||
pub zero_pad: bool,
|
||||
/// The `x` or `X` flag. (Only for `Debug`.)
|
||||
pub debug_hex: Option<DebugHex>,
|
||||
/// The integer precision to use.
|
||||
pub precision: Count<'a>,
|
||||
/// The span of the precision formatting flag (for diagnostics).
|
||||
|
@ -162,24 +167,22 @@ pub enum Alignment {
|
|||
AlignUnknown,
|
||||
}
|
||||
|
||||
/// Various flags which can be applied to format strings. The meaning of these
|
||||
/// flags is defined by the formatters themselves.
|
||||
/// Enum for the sign flags.
|
||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||
pub enum Flag {
|
||||
/// A `+` will be used to denote positive numbers.
|
||||
FlagSignPlus,
|
||||
/// A `-` will be used to denote negative numbers. This is the default.
|
||||
FlagSignMinus,
|
||||
/// An alternate form will be used for the value. In the case of numbers,
|
||||
/// this means that the number will be prefixed with the supplied string.
|
||||
FlagAlternate,
|
||||
/// For numbers, this means that the number will be padded with zeroes,
|
||||
/// and the sign (`+` or `-`) will precede them.
|
||||
FlagSignAwareZeroPad,
|
||||
/// For Debug / `?`, format integers in lower-case hexadecimal.
|
||||
FlagDebugLowerHex,
|
||||
/// For Debug / `?`, format integers in upper-case hexadecimal.
|
||||
FlagDebugUpperHex,
|
||||
pub enum Sign {
|
||||
/// The `+` flag.
|
||||
Plus,
|
||||
/// The `-` flag.
|
||||
Minus,
|
||||
}
|
||||
|
||||
/// Enum for the debug hex flags.
|
||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||
pub enum DebugHex {
|
||||
/// The `x` flag in `{:x?}`.
|
||||
Lower,
|
||||
/// The `X` flag in `{:X?}`.
|
||||
Upper,
|
||||
}
|
||||
|
||||
/// A count is used for the precision and width parameters of an integer, and
|
||||
|
@ -597,7 +600,10 @@ impl<'a> Parser<'a> {
|
|||
let mut spec = FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
precision_span: None,
|
||||
width: CountImplied,
|
||||
|
@ -626,13 +632,13 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
// Sign flags
|
||||
if self.consume('+') {
|
||||
spec.flags |= 1 << (FlagSignPlus as u32);
|
||||
spec.sign = Some(Sign::Plus);
|
||||
} else if self.consume('-') {
|
||||
spec.flags |= 1 << (FlagSignMinus as u32);
|
||||
spec.sign = Some(Sign::Minus);
|
||||
}
|
||||
// Alternate marker
|
||||
if self.consume('#') {
|
||||
spec.flags |= 1 << (FlagAlternate as u32);
|
||||
spec.alternate = true;
|
||||
}
|
||||
// Width and precision
|
||||
let mut havewidth = false;
|
||||
|
@ -647,7 +653,7 @@ impl<'a> Parser<'a> {
|
|||
spec.width_span = Some(self.span(end - 1, end + 1));
|
||||
havewidth = true;
|
||||
} else {
|
||||
spec.flags |= 1 << (FlagSignAwareZeroPad as u32);
|
||||
spec.zero_pad = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -678,14 +684,14 @@ impl<'a> Parser<'a> {
|
|||
// Optional radix followed by the actual format specifier
|
||||
if self.consume('x') {
|
||||
if self.consume('?') {
|
||||
spec.flags |= 1 << (FlagDebugLowerHex as u32);
|
||||
spec.debug_hex = Some(DebugHex::Lower);
|
||||
spec.ty = "?";
|
||||
} else {
|
||||
spec.ty = "x";
|
||||
}
|
||||
} else if self.consume('X') {
|
||||
if self.consume('?') {
|
||||
spec.flags |= 1 << (FlagDebugUpperHex as u32);
|
||||
spec.debug_hex = Some(DebugHex::Upper);
|
||||
spec.ty = "?";
|
||||
} else {
|
||||
spec.ty = "X";
|
||||
|
@ -708,7 +714,10 @@ impl<'a> Parser<'a> {
|
|||
let mut spec = FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
precision_span: None,
|
||||
width: CountImplied,
|
||||
|
|
|
@ -10,7 +10,10 @@ fn fmtdflt() -> FormatSpec<'static> {
|
|||
return FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
width: CountImplied,
|
||||
precision_span: None,
|
||||
|
@ -126,7 +129,10 @@ fn format_type() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
width: CountImplied,
|
||||
precision_span: None,
|
||||
|
@ -147,7 +153,10 @@ fn format_align_fill() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignRight,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
width: CountImplied,
|
||||
precision_span: None,
|
||||
|
@ -165,7 +174,10 @@ fn format_align_fill() {
|
|||
format: FormatSpec {
|
||||
fill: Some('0'),
|
||||
align: AlignLeft,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
width: CountImplied,
|
||||
precision_span: None,
|
||||
|
@ -183,7 +195,10 @@ fn format_align_fill() {
|
|||
format: FormatSpec {
|
||||
fill: Some('*'),
|
||||
align: AlignLeft,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
width: CountImplied,
|
||||
precision_span: None,
|
||||
|
@ -204,7 +219,10 @@ fn format_counts() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
precision_span: None,
|
||||
width: CountIs(10),
|
||||
|
@ -222,7 +240,10 @@ fn format_counts() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountIs(10),
|
||||
precision_span: Some(InnerSpan { start: 6, end: 9 }),
|
||||
width: CountIsParam(10),
|
||||
|
@ -240,7 +261,10 @@ fn format_counts() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountIs(10),
|
||||
precision_span: Some(InnerSpan { start: 6, end: 9 }),
|
||||
width: CountIsParam(0),
|
||||
|
@ -258,7 +282,10 @@ fn format_counts() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountIsStar(0),
|
||||
precision_span: Some(InnerSpan { start: 3, end: 5 }),
|
||||
width: CountImplied,
|
||||
|
@ -276,7 +303,10 @@ fn format_counts() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountIsParam(10),
|
||||
width: CountImplied,
|
||||
precision_span: Some(InnerSpan::new(3, 7)),
|
||||
|
@ -294,7 +324,10 @@ fn format_counts() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountIsName("b", InnerSpan { start: 6, end: 7 }),
|
||||
precision_span: Some(InnerSpan { start: 5, end: 8 }),
|
||||
width: CountIsName("a", InnerSpan { start: 3, end: 4 }),
|
||||
|
@ -312,7 +345,10 @@ fn format_counts() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountIs(4),
|
||||
precision_span: Some(InnerSpan { start: 3, end: 5 }),
|
||||
width: CountImplied,
|
||||
|
@ -333,7 +369,10 @@ fn format_flags() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: (1 << FlagSignMinus as u32),
|
||||
sign: Some(Sign::Minus),
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
width: CountImplied,
|
||||
precision_span: None,
|
||||
|
@ -351,7 +390,10 @@ fn format_flags() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: (1 << FlagSignPlus as u32) | (1 << FlagAlternate as u32),
|
||||
sign: Some(Sign::Plus),
|
||||
alternate: true,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
width: CountImplied,
|
||||
precision_span: None,
|
||||
|
@ -374,7 +416,10 @@ fn format_mixture() {
|
|||
format: FormatSpec {
|
||||
fill: None,
|
||||
align: AlignUnknown,
|
||||
flags: 0,
|
||||
sign: None,
|
||||
alternate: false,
|
||||
zero_pad: false,
|
||||
debug_hex: None,
|
||||
precision: CountImplied,
|
||||
width: CountImplied,
|
||||
precision_span: None,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue