diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2013-07-29 01:12:41 -0700 | 
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2013-08-07 19:21:43 -0700 | 
| commit | ffb670ffcd69ed8e7cd13a7f06375ede752349e2 (patch) | |
| tree | a3e82ac51c713a80d620128813b4fa653451da97 /src/libstd/fmt/rt.rs | |
| parent | 5b4244d917cc9341b1ec04c4e245d5f841d3facc (diff) | |
| download | rust-ffb670ffcd69ed8e7cd13a7f06375ede752349e2.tar.gz rust-ffb670ffcd69ed8e7cd13a7f06375ede752349e2.zip  | |
Add initial support for a new formatting syntax
The new macro is available under the name ifmt! (only an intermediate name)
Diffstat (limited to 'src/libstd/fmt/rt.rs')
| -rw-r--r-- | src/libstd/fmt/rt.rs | 62 | 
1 files changed, 62 insertions, 0 deletions
diff --git a/src/libstd/fmt/rt.rs b/src/libstd/fmt/rt.rs new file mode 100644 index 00000000000..6feb1d7a848 --- /dev/null +++ b/src/libstd/fmt/rt.rs @@ -0,0 +1,62 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +//! This is an internal module used by the ifmt! runtime. These structures are +//! emitted to static arrays to precompile format strings ahead of time. +//! +//! These definitions are similar to their `ct` equivalents, but differ in that +//! these can be statically allocated and are slightly optimized for the runtime + +#[allow(missing_doc)]; +#[doc(hidden)]; + +use either::Either; +use fmt::parse; +use option::Option; + +pub enum Piece<'self> { + String(&'self str), + // FIXME(#8259): this shouldn't require the unit-value here + CurrentArgument(()), + Argument(Argument<'self>), +} + +pub struct Argument<'self> { + position: Position, + format: FormatSpec, + method: Option<&'self Method<'self>> +} + +pub struct FormatSpec { + fill: char, + alignleft: bool, + flags: uint, + precision: parse::Count, + width: parse::Count, +} + +pub enum Position { + ArgumentNext, ArgumentIs(uint) +} + +pub enum Method<'self> { + Plural(Option<uint>, &'self [PluralArm<'self>], &'self [Piece<'self>]), + Select(&'self [SelectArm<'self>], &'self [Piece<'self>]), +} + +pub struct PluralArm<'self> { + selector: Either<parse::PluralKeyword, uint>, + result: &'self [Piece<'self>], +} + +pub struct SelectArm<'self> { + selector: &'self str, + result: &'self [Piece<'self>], +}  | 
