215    auto isOldSchoolDecimalSeparator =
 
  216            []( 
char ch, 
double* siScaler ) -> 
bool 
  220                case 'a': *siScaler = 1.0e-18; 
return true;
 
  221                case 'f': *siScaler = 1.0e-15; 
return true;
 
  222                case 'p': *siScaler = 1.0e-12; 
return true;
 
  223                case 'n': *siScaler = 1.0e-9;  
return true;
 
  224                case 'u': *siScaler = 1.0e-6;  
return true;
 
  225                case 'm': *siScaler = 1.0e-3;  
return true;
 
  227                case 'K': *siScaler = 1.0e3;   
return true;
 
  228                case 'M': *siScaler = 1.0e6;   
return true;
 
  229                case 'G': *siScaler = 1.0e9;   
return true;
 
  230                case 'T': *siScaler = 1.0e12;  
return true;
 
  231                case 'P': *siScaler = 1.0e15;  
return true;
 
  232                case 'E': *siScaler = 1.0e18;  
return true;
 
  233                default:                       
return false;
 
  237    auto isDecimalSeparator =
 
  238            [&]( 
char ch ) -> 
bool 
  253            [&]( 
double* aScaler )
 
  255                bool   haveSeparator = 
false;
 
  256                double siScaler = 1.0;
 
  263                    if( isDecimalSeparator( ch ) )
 
  268                            haveSeparator = 
true;
 
  270                        if( isOldSchoolDecimalSeparator( ch, &siScaler ) )
 
  284                } 
while( isdigit( 
static_cast<unsigned char>( ch ) ) || isDecimalSeparator( ch ) );
 
  292            [&]( 
double* siScaler ) -> 
Unit 
  307                if( sizeLeft >= 2 && ch == 
'\xC2' && cptr[1] == 
'\xB0' )
 
  317                if( sizeLeft >= 2 && ch == 
'u' && cptr[ 1 ] == 
'm' && !isalnum( cptr[ 2 ] ) )
 
  323                if( sizeLeft >= 5 && ch == 
'p' && cptr[1] == 
's' && cptr[2] == 
'/' && cptr[3] == 
'i' 
  324                    && cptr[4] == 
'n' && !isalnum( cptr[5] ) )
 
  330                if( sizeLeft >= 5 && ch == 
'p' && cptr[1] == 
's' && cptr[2] == 
'/' && cptr[3] == 
'c' 
  331                    && cptr[4] == 
'm' && !isalnum( cptr[5] ) )
 
  337                if( sizeLeft >= 5 && ch == 
'p' && cptr[1] == 
's' && cptr[2] == 
'/' && cptr[3] == 
'm' 
  338                    && cptr[4] == 
'm' && !isalnum( cptr[5] ) )
 
  344                if( sizeLeft >= 2 && ch == 
'f' && cptr[1] == 
's' && !isalnum( cptr[2] ) )
 
  350                if( sizeLeft >= 2 && ch == 
'p' && cptr[1] == 
's' && !isalnum( cptr[2] ) )
 
  356                if( sizeLeft >= 2 && ch == 
'm' && cptr[ 1 ] == 
'm' && !isalnum( cptr[ 2 ] ) )
 
  362                if( sizeLeft >= 2 && ch == 
'c' && cptr[ 1 ] == 
'm' && !isalnum( cptr[ 2 ] ) )
 
  368                if( sizeLeft >= 2 && ch == 
'i' && cptr[ 1 ] == 
'n' && !isalnum( cptr[ 2 ] ) )
 
  374                if( sizeLeft >= 3 && ch == 
'm' && cptr[ 1 ] == 
'i' && cptr[ 2 ] == 
'l' 
  375                        && !isalnum( cptr[ 3 ] ) )
 
  381                if( sizeLeft >= 4 && ch == 
't' && cptr[ 1 ] == 
'h' && cptr[ 2 ] == 
'o' 
  382                        && cptr[ 3 ] == 
'u' && !isalnum( cptr[ 4 ] ) )
 
  389                        && isOldSchoolDecimalSeparator( ch, siScaler ) )
 
  411    double siScaler = 1.0;
 
  418    else if( isdigit( 
static_cast<unsigned char>( ch ) ) || isDecimalSeparator( ch ) )
 
  423        extractNumber( &siScaler );
 
  427    else if( ( convertFrom = checkUnit( &siScaler ) ) != 
Unit::Invalid )
 
  439            switch( convertFrom )
 
  452            switch( convertFrom )
 
  465            switch( convertFrom )
 
  486            switch( convertFrom )
 
  496            switch( convertFrom )
 
  506            switch( convertFrom )
 
  517            switch( convertFrom )
 
  528            switch( convertFrom )
 
  538    else if( isalpha( ch ) )
 
  544        while( isalnum( *cptr ) )
 
  550        if( bytesToCopy >= 
sizeof( retval.
value.
text ) )
 
  551            bytesToCopy = 
sizeof( retval.
value.
text ) - 1;
 
  564        case '*': retval.
token = MULT;   
break;
 
  566        case '(': retval.
token = PARENL; 
break;
 
  567        case ')': retval.
token = PARENR; 
break;
 
  568        case '=': retval.
token = ASSIGN; 
break;
 
  569        case ';': retval.
token = SEMCOL; 
break;