Exemplo n.º 1
0
int mlt_tokeniser_parse_new( mlt_tokeniser tokeniser, char *string, const char *delimiter )
{
	if ( !string || !delimiter ) return 0;
	int count = 0;
	int length = strlen( string );
	int delimiter_size = strlen( delimiter );
	int index = 0;
	char *token = strdup( string );

	mlt_tokeniser_clear( tokeniser );
	tokeniser->input = strdup( string );
	strcpy( token, "" );

	for ( index = 0; index < length; )
	{
		char *start = string + index;
		char *end = strstr( start, delimiter );

		if ( end == NULL )
		{
			strcat( token, start );
			mlt_tokeniser_append( tokeniser, token );
			index = length;
			count ++;
		}
		else if ( start != end )
		{
			strncat( token, start, end - start );
			index += end - start;
			if ( strchr( token, '\"' ) == NULL || token[ strlen( token ) - 1 ] == '\"' )
			{
				mlt_tokeniser_append( tokeniser, token );
				strcpy( token, "" );
				count ++;
			}
			else while ( strncmp( string + index, delimiter, delimiter_size ) == 0 )
			{
				strncat( token, delimiter, delimiter_size );
				index += delimiter_size;
			}
		}
		else
		{
			index += delimiter_size;
		}
	}

	/* Special case - malformed string condition */
	if ( !strcmp( token, "" ) )
	{
		count = 0 - ( count - 1 );
		mlt_tokeniser_append( tokeniser, token );
	}

	free( token );
	return count;
}
Exemplo n.º 2
0
void mlt_tokeniser_close( mlt_tokeniser tokeniser )
{
	mlt_tokeniser_clear( tokeniser );
	free( tokeniser->tokens );
	free( tokeniser );
}