8#if !defined(ALIB_C20_MODULES) || ((ALIB_C20_MODULES != 0) && (ALIB_C20_MODULES != 1))
9# error "Symbol ALIB_C20_MODULES has to be given to the compiler as either 0 or 1"
18 module ALib.Format.FormatterJavaStyle;
20 import ALib.Characters.Functions;
22 import ALib.Exceptions;
24 import ALib.Camp.Base;
84 placeholder.NF.Flags -= NumberFormatFlags::ForceDecimalPoint;
85 placeholder.NF.Flags -= NumberFormatFlags::OmitTrailingFractionalZeros;
96 while( (idx=
parser.IndexOf(
'%', idx )) >= 0
97 && (
parser.CharAt( idx + 1 ) ==
'%'
98 ||
parser.CharAt( idx + 1 ) ==
'n' ) )
112 auto* src =
parser.Buffer();
114 parser.ConsumeChars( length );
118 while( length > 1 ) {
122 if( ( c1 ==
'%' && c2 ==
'%')
127 case 'r': c1=
'\r' ;
break;
128 case 'n': c1=
'\n' ;
break;
129 case 't': c1=
'\t' ;
break;
130 case 'a': c1=
'\a' ;
break;
131 case 'b': c1=
'\b' ;
break;
132 case 'v': c1=
'\v' ;
break;
133 case 'f': c1=
'\f' ;
break;
134 case '"': c1=
'"' ;
break;
135 default: c1=
'?' ;
break;
141 else if( c1 ==
'%' && c2 ==
'n' ) {
172 states state= POSITION;
173 #define NEXTSTATE(s) { state= s; continue; }
182 if (
parser.ConsumeChar(
'<') ) {
186 while( i <
parser.Length()
187 && isdigit(
parser.CharAt<
NC>(i) ) )
190 if( i > 0 &&
parser.CharAt<
NC>(i) ==
'$') {
192 parser.ConsumeChar(
'$') ,
true )
202 bool flagsDone=
false;
204 switch (
parser.CharAtStart() ) {
219 placeholder.NF.Flags += NumberFormatFlags::ForceDecimalPoint;
220 placeholder.NF.Flags -= NumberFormatFlags::OmitTrailingFractionalZeros;
234 placeholder.NF.Flags += NumberFormatFlags::WriteGroupChars;
255 if( isdigit(
parser.CharAtStart() ) )
277 if ( typeCharLower ==
'a' ) {
297 if(
NCString(
"egf").IndexOf(
static_cast<nchar>(typeCharLower) ) < 0 )
309 switch ( typeCharLower ) {
320 placeholder.NF.Flags+= NumberFormatFlags::ForceScientific;
break;
376 NEXTSTATE(TYPE_SUFFIX)
388 default:
ALIB_ERROR(
"FORMAT",
"Illegal switch state." )
break;
397 if( startIdx >= 0 &&
placeholderJS.ConversionUpper && target ==
nullptr )
void InsertDerived(TArgs &&... args)
#define ALIB_ASSERT_RESULT_EQUALS( func, value)
#define ALIB_CALLER_NULLED
#define ALIB_ERROR(domain,...)
@ Center
Chooses centered alignment.
@ Right
Chooses right alignment.
@ Left
Chooses left alignment.
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace alib.
lang::integer integer
Type alias in namespace alib.
strings::TCString< nchar > NCString
Type alias in namespace alib.
characters::nchar nchar
Type alias in namespace alib.
exceptions::Exception Exception
Type alias in namespace alib.
containers::SharedPtr< format::Formatter > SPFormatter
characters::character character
Type alias in namespace alib.