- else if ( context->property != NULL && context->producer_properties != NULL )
- mlt_properties_set( context->producer_properties, context->property, value );
+ // libxml2 generates an on_characters immediately after a get_entity within
+ // an element value, and we ignore it because it is called again during
+ // actual substitution.
+ else if ( context->property != NULL && context->producer_properties != NULL
+ && context->entity_is_replace == 0 )
+ {
+ char *s = mlt_properties_get( context->producer_properties, context->property );
+ if ( s != NULL )
+ {
+ // Append new text to existing content
+ char *new = calloc( strlen( s ) + len + 1, 1 );
+ strcat( new, s );
+ strcat( new, value );
+ mlt_properties_set( context->producer_properties, context->property, new );
+ free( new );
+ }
+ else
+ mlt_properties_set( context->producer_properties, context->property, value );
+ }
+ context->entity_is_replace = 0;