Implements a Formatter according to the formatting standards of the Java language .
In general, the original specification is covered quite well. The differences and specialties are:
'.'
and the grouping character ','
. As the syntax specification does not provide a feature to switch between standard and locale setting, the corresponding fields of AlternativeNumberFormat are not used with this formatter. Instead, to enable localized output, method NumberFormat::SetFromLocale has to be invoked on field FormatterStdImpl::DefaultNumberFormat . Alternatively, attributes of this object may be changed manually or by other means to reflect a desired locale.'a'
and 'A'
) is not supported.'('
, used to write negative numbers in round brackets, is not supported.'%<'
is already allowed with the first placeholder. This Chooses the first argument. (In Java a MissingFormatArgumentException would be thrown.)'^'
is an extension to the standard and denotes center-alignment - just like '-'
in the standard denotes left-alignment. Right-alignment is the default.'s'
is given together with a precision, the field is cut, even if it cuts the number somewhere. (This is just a warning and same behavior as in original specification.)'f'
, 'g'
and 'e'
), the values specified in attributes ExponentSeparator, NANLiteral and INFLiteral of object FormatterStdImpl::AlternativeNumberFormat are used. For upper case types ('G'
and 'E'
), the corresponding attributes in FormatterStdImpl::DefaultNumberFormat apply.'f'
) is not supported to use arbitrary length. See class NumberFormat for the limits. Due to this limitation, the default number of fractional digits is not set with type 'f'
, while in Java it is set to 6
. This is to allow higher numbers up to 1.e13
to be printed in non-scientific format','
) can also be used with binary, hexadecimal and octal output. The types support different grouping separators for nibbles, bytes, 16-bit and 32-bit words. Changing the separator symbols, is not possible with the format fields of the format strings (if it was, this would become very incompatible to Java standards). Changes have to be made prior to the format operation by modifying field FormatterStdImpl::AlternativeNumberFormat which is provided through parent class FormatterStdImpl.Alternative form ('#'
) adds prefixes as specified in members
For upper case formats, those are taken from field FormatterStdImpl::DefaultNumberFormat , for lower case formats from FormatterStdImpl::AlternativeNumberFormat . All defaults may be changed by the user.
't'
.'H'
, 'k'
, 'I'
, 'l'
, 'M'
, 'S'
, 'B'
, 'b'
, 'h'
, 'A'
, 'a'
, 'Y'
, 'y'
, 'm'
, 'd'
, 'e'
, 'R'
, 'T'
, 'D'
and 'F'
'L'
, 'N'
, 'p'
, 'z'
, 'Z'
, 's'
, 'Q'
, 'C'
, 'j'
, 'r'
and 'c'
.<b>alib::lang::format::FMTExceptions</b> |
Definition at line 125 of file formatterjavastyle.hpp.
#include <formatterjavastyle.hpp>
Inner Type Index: | |
struct | PlaceholderAttributesJS |
Public Method Index: | |
ALIB_API | FormatterJavaStyle () |
virtual ALIB_API FormatterStdImpl * | Clone () override |
Public Method Index: inherited from FormatterStdImpl | |
FormatterStdImpl (const String &formatterClassName) | |
Public Method Index: inherited from Formatter | |
virtual | ~Formatter () |
ALIB_API Boxes & | Acquire (const NCString &dbgFile, int dbgLine, const NCString &dbgFunc) |
virtual ALIB_API void | CloneSettings (Formatter &reference) |
int | CountAcquirements () const |
template<typename... TArgs> | |
Formatter & | Format (AString &target, TArgs &&... args) |
ALIB_THREADS. | |
ALIB_API Formatter & | FormatArgs (AString &target) |
Formatter & | FormatArgs (AString &target, const Boxes &args) |
ALIB_API void | Release () |
defined(ALIB_DOX) | |
ALIB_API void | ReplaceDefault (Formatter *newFormatter) |
Public Method Index: inherited from ThreadLock | |
ALIB_API | ThreadLock (lang::Safeness safeness=lang::Safeness::Safe) |
ALIB_API | ~ThreadLock () |
ALIB_API void | Acquire (const NCString &dbgFile, int dbgLine, const NCString &dbgFunc) |
int | CountAcquirements () const |
Thread * | GetOwner () const |
lang::Safeness | GetSafeness () const |
bool | IsOwnedByCurrentThread () const |
ALIB_API void | Release () |
defined(ALIB_DOX) | |
ALIB_API void | SetSafeness (lang::Safeness safeness) |
bool | WillRelease () const |
Additional Inherited Members | |
Public Static Method Index: inherited from Formatter | |
static SPFormatter | AcquireDefault (const NCString &dbgFile, int dbgLine, const NCString &dbgFunc) |
static SPFormatter | GetDefault () |
Public Field Index: inherited from Formatter | |
NumberFormat | AlternativeNumberFormat |
NumberFormat | DefaultNumberFormat |
std::shared_ptr< Formatter > | Next |
Public Field Index: inherited from ThreadLock | |
NCString | DbgOwnerFile =nullptr |
NCString | DbgOwnerFunc =nullptr |
int | DbgOwnerLine |
uint16_t | DbgRecursionWarningThreshold =10 |
integer | DbgWarningAfterWaitTimeInMillis =2000L |
|
protected |
The extended placeholder attributes.
Definition at line 156 of file formatterjavastyle.hpp.
Constructs this formatter. Inherited field DefaultNumberFormat is initialized to meet the formatting defaults of Java.
Definition at line 27 of file formatterjavastyle.cpp.
|
overrideprotectedvirtual |
Makes some attribute adjustments and invokes standard implementation
true
if OK, false
if replacement should be aborted. Reimplemented from FormatterStdImpl.
Definition at line 415 of file formatterjavastyle.cpp.
|
overridevirtual |
Clones and returns a copy of this formatter.
If the formatter attached to field Formatter::Next is of type FormatterStdImpl, then that formatter is copied as well.
Implements Formatter.
Definition at line 50 of file formatterjavastyle.cpp.
|
overrideprotectedvirtual |
Searches for '%'
which is not '%' or 'n'.
Implements FormatterStdImpl.
Definition at line 85 of file formatterjavastyle.cpp.
|
overrideprotectedvirtual |
Parses placeholder field in Java syntax. The portion format_spec is not set as this is not supported by the syntax.
true
on success, false
on errors. Implements FormatterStdImpl.
Definition at line 158 of file formatterjavastyle.cpp.
|
inlineoverrideprotectedvirtual |
Does nothing. Java does not support custom format specifications.
true
to indicate success. Implements FormatterStdImpl.
Definition at line 220 of file formatterjavastyle.hpp.
All that this formatter does with this overridden method is to convert strings to upper case.
startIdx | The index of the start of the field written in targetString. -1 indicates pre-phase. |
target | The target string, only if different from field targetString, which indicates intermediate phase. |
false
, if the placeholder should be skipped (nothing is written for it). true
otherwise. Reimplemented from FormatterStdImpl.
Definition at line 407 of file formatterjavastyle.cpp.
|
overrideprotectedvirtual |
Invokes parent implementation and then applies some changes to reflect what is defined as default in the Java string format specification.
Reimplemented from FormatterStdImpl.
Definition at line 66 of file formatterjavastyle.cpp.
|
overrideprotectedvirtual |
Implementation of abstract method FormatterStdImpl::writeStringPortion .
Replaces "%%"
with '%'
and "%n"
with ascii 0x0a
. In addition applies Format::Escape on target which replaces standard codes like "\\n"
, "\\r"
or "\\t"
with corresponding ascii codes. (The latter is an extension to the standard behavior of Java formatter.)
length | The number of characters to write. |
Implements FormatterStdImpl.
Definition at line 99 of file formatterjavastyle.cpp.