FormatOutput

A bridge between a Layout instance and a stream. This is used for the Stdout & Stderr globals, but can be used for general purpose buffer-formatting as desired. The Template type 'T' dictates the text arrangement within the target buffer ~ one of char, wchar or dchar (UTF8, UTF16, or UTF32).

FormatOutput exposes this style of usage:

auto print = new FormatOutput!(char) (...);

print ("hello");                    // => hello
print (1);                          // => 1
print (3.14);                       // => 3.14
print ('b');                        // => b
print (1, 2, 3);                    // => 1, 2, 3
print ("abc", 1, 2, 3);             // => abc, 1, 2, 3
print ("abc", 1, 2) ("foo");        // => abc, 1, 2foo
print ("abc") ("def") (3.14);       // => abcdef3.14

print.format ("abc {}", 1);         // => abc 1
print.format ("abc {}:{}", 1, 2);   // => abc 1:2
print.format ("abc {1}:{0}", 1, 2); // => abc 2:1
print.format ("abc ", 1);           // => abc

Note that the last example does not throw an exception. There are several use-cases where dropping an argument is legitimate, so we're currently not enforcing any particular trap mechanism.

Flushing the output is achieved through the flush() method, or via an empty pair of parens:

print ("hello world") ();
print ("hello world").flush;

print.format ("hello {}", "world") ();
print.format ("hello {}", "world").flush;

Special character sequences, such as "\n", are written directly to the output without any translation (though an output-filter could be inserted to perform translation as required). Platform-specific newlines are generated instead via the newline() method, which also flushes the output when configured to do so:

print ("hello ") ("world").newline;
print.format ("hello {}", "world").newline;
print.formatln ("hello {}", "world");

The format() method supports the range of formatting options exposed by tango.text.convert.Layout and extensions thereof; including the full I18N extensions where configured in that manner. To create a French instance of FormatOutput:

import tango.text.locale.Locale;

auto locale = new Locale (Culture.getCulture ("fr-FR"));
auto print = new FormatOutput!(char) (locale, ...);

Note that FormatOutput is *not* intended to be thread-safe.

Constructors

this
this(OutputStream output, const(T[]) eol)

Construct a FormatOutput instance, tying the provided stream to a layout formatter.

this
this(Layout!(T) convert, OutputStream output, const(T[]) eol)

Construct a FormatOutput instance, tying the provided stream to a layout formatter.

Members

Aliases

flush
alias flush = OutputFilter.flush
Undocumented in source.
nl
alias nl = newline
Undocumented in source.
opCall
alias opCall = print
Undocumented in source.

Functions

flush
FormatOutput flush(bool yes)

Control implicit flushing of newline(), where true enables flushing. An explicit flush() will always flush the output.

format
FormatOutput format(const(T[]) fmt, ...)

Layout using the provided formatting specification.

formatln
FormatOutput formatln(const(T[]) fmt, ...)

Layout using the provided formatting specification.

print
FormatOutput print(...)

Unformatted layout, with commas inserted between args. Currently supports a maximum of 24 arguments.

Properties

layout
Layout!(T) layout [@property setter]

Set the associated Layout.

layout
Layout!(T) layout [@property getter]

Return the associated Layout.

newline
FormatOutput newline [@property getter]

Output a newline and optionally flush.

stream
OutputStream stream [@property getter]

Return the associated output stream.

stream
OutputStream stream [@property setter]

Set the associated output stream.

Inherited Members

From OutputFilter

sink
OutputStream sink;
Undocumented in source.
conduit
IConduit conduit [@property getter]

Return the hosting conduit.

write
size_t write(const(void)[] src)

Write to conduit from a source array. The provided src content will be written to the conduit.

copy
OutputStream copy(InputStream src, size_t max)

Transfer the content of another conduit to this one. Returns a reference to this class, or throws IOException on failure.

flush
IOStream flush()

Emit/purge buffered content.

seek
long seek(long offset, Anchor anchor)

Seek on this stream. Target conduits that don't support seeking will throw an IOException.

output
OutputStream output [@property getter]

Return the upstream host of this filter.

close
void close()

Close the output.

Meta