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; }
void mlt_tokeniser_close( mlt_tokeniser tokeniser ) { mlt_tokeniser_clear( tokeniser ); free( tokeniser->tokens ); free( tokeniser ); }