8#if !defined(ALIB_C20_MODULES) || ((ALIB_C20_MODULES != 0) && (ALIB_C20_MODULES != 1))
9# error "Configuration MACRO 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 case '\\': c1=
'\\' ;
break;
136 default: c1=
'?' ;
break;
142 else if( c1 ==
'%' && c2 ==
'n' ) {
173 states state= POSITION;
174 #define NEXTSTATE(s) { state= s; continue; }
183 if (
parser.ConsumeChar(
'<') ) {
187 while( i <
parser.Length()
188 && isdigit(
parser.CharAt<
NC>(i) ) )
191 if( i > 0 &&
parser.CharAt<
NC>(i) ==
'$') {
193 parser.ConsumeChar(
'$') ,
true )
203 bool flagsDone=
false;
205 switch (
parser.CharAtStart() ) {
220 placeholder.NF.Flags += NumberFormatFlags::ForceDecimalPoint;
221 placeholder.NF.Flags -= NumberFormatFlags::OmitTrailingFractionalZeros;
235 placeholder.NF.Flags += NumberFormatFlags::WriteGroupChars;
256 if( isdigit(
parser.CharAtStart() ) )
278 if ( typeCharLower ==
'a' ) {
298 if(
NCString(
"egf").IndexOf(
static_cast<nchar>(typeCharLower) ) < 0 )
310 switch ( typeCharLower ) {
321 placeholder.NF.Flags+= NumberFormatFlags::ForceScientific;
break;
377 NEXTSTATE(TYPE_SUFFIX)
389 default:
ALIB_ERROR(
"FORMAT",
"Illegal switch state." )
break;
398 if( startIdx >= 0 &&
placeholderJS.ConversionUpper && target ==
nullptr )
#define ALIB_ASSERT_RESULT_EQUALS( func, value)
#define ALIB_CALLER_NULLED
#define ALIB_ERROR(domain,...)
void InsertDerived(TArgs &&... args)
@ Center
Chooses centered alignment.
@ Right
Chooses right alignment.
@ Left
Chooses left alignment.
containers::SharedPtr< format::Formatter > SPFormatter
strings::TCString< nchar > NCString
Type alias in namespace alib.
lang::integer integer
Type alias in namespace alib.
strings::TString< character > String
Type alias in namespace alib.
characters::nchar nchar
Type alias in namespace alib.
exceptions::Exception Exception
Type alias in namespace alib.
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace alib.
characters::character character
Type alias in namespace alib.