parseDefArray function
Implementation
List<dynamic> parseDefArray(
ParsingContext context,
int level
)
{
var array = <dynamic>[];
while ( context.lineIndex < context.lineArray.length )
{
var DefLine( :line, :lineSpaceCount )
= parseDefLine( context, level );
if ( lineSpaceCount == 0
&& line == ']' )
{
return array;
}
else if ( lineSpaceCount == 0
&& line == ']{}' )
{
if ( array.length == 0 )
{
return [];
}
else
{
if ( array[ 0 ] is List )
{
if ( array.length == 1 )
{
return [];
}
else
{
var keyArray = <String>[];
for ( var key in array[ 0 ] )
{
keyArray.add( getKeyText( key ) );
}
var keyCount = keyArray.length;
var objectArray = <Map<String, dynamic>>[];
var objectCount = array.length - 1;
for ( int objectIndex = 0;
objectIndex < objectCount;
++objectIndex )
{
var valueArray = array[ objectIndex + 1 ];
if ( valueArray is List
&& valueArray.length == keyCount )
{
var object = <String, dynamic>{};
for ( int keyIndex = 0;
keyIndex < keyCount;
++keyIndex )
{
object[ keyArray[ keyIndex ] ] = valueArray[ keyIndex ];
}
objectArray.add( object );
}
else
{
throwParsingError( 'Invalid DEF object array', context, level );
}
}
return objectArray;
}
}
else
{
throwParsingError( 'Invalid DEF object array', context, level );
}
}
}
else if ( lineSpaceCount == 0
&& line == ']()' )
{
if ( array.length == 0 )
{
return [];
}
else
{
if ( array[ 0 ] is List )
{
if ( array.length == 1 )
{
return [];
}
else
{
var keyArray = <String>[];
for ( var key in array[ 0 ] )
{
keyArray.add( getKeyText( key ) );
}
var keyCount = keyArray.length;
var mapArray = <Map<dynamic, dynamic>>[];
var mapCount = array.length - 1;
for ( int mapIndex = 0;
mapIndex < mapCount;
++mapIndex )
{
var valueArray = array[ mapIndex + 1 ];
if ( valueArray is List
&& valueArray.length == keyCount )
{
var map = <dynamic, dynamic>{};
for ( int keyIndex = 0;
keyIndex < keyCount;
++keyIndex )
{
map[ keyArray[ keyIndex ] ] = valueArray[ keyIndex ];
}
mapArray.add( map );
}
else
{
throwParsingError( 'Invalid DEF map array', context, level );
}
}
return mapArray;
}
}
else
{
throwParsingError( 'Invalid DEF map array', context, level );
}
}
}
else
{
context.lineIndex--;
var value = parseDefValue( context, level + 1 );
array.add( value );
}
}
throwParsingError( 'Invalid DEF array', context, level );
return [];
}