parseDefQuotedString function

dynamic parseDefQuotedString(
  1. ParsingContext context,
  2. int level
)

Implementation

dynamic parseDefQuotedString(
    ParsingContext context,
    int level
    )
{
    var firstLineIndex = context.lineIndex + 1;
    var string = '';
    var quote = '';
    var escapedQuote = '';

    while ( context.lineIndex < context.lineArray.length )
    {
        var DefLine( :line, :lineSpaceCount )
            = parseDefLine( context, level );

        if ( context.lineIndex == firstLineIndex )
        {
            quote = line[ 0 ];
            line = line.substring( 1 );
            escapedQuote = '\\' + quote;
        }

        var tokenArray = getTokenArray( line );
        var lastToken = tokenArray.isNotEmpty ? tokenArray.last : '';

        if ( lastToken == '\\' )
        {
            tokenArray.removeLast();

            string += getUnescapedText( tokenArray );
        }
        else if ( lastToken.endsWith( quote )
                  && lastToken != escapedQuote )
        {
            tokenArray[ tokenArray.length - 1 ] = lastToken.substring( 0, lastToken.length - 1 );

            string += getUnescapedText( tokenArray );

            if ( quote == context.stringProcessingQuote
                 && context.processQuotedStringFunction != null )
            {
                return context.processQuotedStringFunction!( string, context, level );
            }
            else
            {
                return string;
            }
        }
        else
        {
            if ( lastToken.endsWith( '¨' )
                 && lastToken != '\\¨' )
            {
                tokenArray[ tokenArray.length - 1 ] = lastToken.substring( 0, lastToken.length - 1 );
            }

            string += getUnescapedText( tokenArray ) + '\n';
        }
    }

    throwParsingError( 'Invalid DEF quoted string', context, level );

    return '';
 }