|
|
|
@ -462,16 +462,14 @@ static void webvtt_domnode_AppendLast( webvtt_dom_node_t **pp_append, |
|
|
|
webvtt_domnode_AppendLast( (webvtt_dom_node_t **) a, (webvtt_dom_node_t *) b ) |
|
|
|
|
|
|
|
|
|
|
|
static webvtt_dom_node_t *webvtt_domnode_DeleteNode( webvtt_dom_node_t *p_node ) |
|
|
|
static void webvtt_domnode_DeleteNode( webvtt_dom_node_t *p_node ) |
|
|
|
{ |
|
|
|
webvtt_dom_node_t *p_child = NULL; |
|
|
|
if( p_node->type == NODE_TAG ) |
|
|
|
{ |
|
|
|
webvtt_dom_tag_t *p_tag_node = (webvtt_dom_tag_t *) p_node; |
|
|
|
text_style_Delete( p_tag_node->p_cssstyle ); |
|
|
|
free( p_tag_node->psz_attrs ); |
|
|
|
free( p_tag_node->psz_tag ); |
|
|
|
p_child = p_tag_node->p_child; |
|
|
|
} |
|
|
|
else if( p_node->type == NODE_TEXT ) |
|
|
|
{ |
|
|
|
@ -484,30 +482,51 @@ static webvtt_dom_node_t *webvtt_domnode_DeleteNode( webvtt_dom_node_t *p_node ) |
|
|
|
text_style_Delete( p_cue_node->p_cssstyle ); |
|
|
|
webvtt_cue_settings_Clean( &p_cue_node->settings ); |
|
|
|
free( p_cue_node->psz_id ); |
|
|
|
p_child = p_cue_node->p_child; |
|
|
|
} |
|
|
|
else if( p_node->type == NODE_REGION ) |
|
|
|
{ |
|
|
|
webvtt_region_t *p_region_node = (webvtt_region_t *)p_node; |
|
|
|
text_style_Delete( p_region_node->p_cssstyle ); |
|
|
|
free( p_region_node->psz_id ); |
|
|
|
p_child = p_region_node->p_child; |
|
|
|
} |
|
|
|
free( p_node ); |
|
|
|
return p_child; |
|
|
|
} |
|
|
|
|
|
|
|
static webvtt_dom_node_t * webvtt_domnode_getFirstChild( webvtt_dom_node_t *p_node ); |
|
|
|
|
|
|
|
static void webvtt_domnode_ChainDelete( webvtt_dom_node_t *p_node ) |
|
|
|
{ |
|
|
|
vlc_array_t stack; |
|
|
|
vlc_array_init( &stack ); |
|
|
|
|
|
|
|
while( p_node ) |
|
|
|
{ |
|
|
|
webvtt_dom_node_t *p_child = webvtt_domnode_getFirstChild( p_node ); |
|
|
|
webvtt_dom_node_t *p_next = p_node->p_next; |
|
|
|
webvtt_dom_node_t *p_child = webvtt_domnode_DeleteNode( p_node ); |
|
|
|
while ( p_child ) |
|
|
|
p_child = webvtt_domnode_DeleteNode( p_child ); |
|
|
|
/* delete current node, then go to child, and then siblings */ |
|
|
|
webvtt_domnode_DeleteNode( p_node ); |
|
|
|
p_node = p_child; |
|
|
|
if( p_next ) |
|
|
|
{ |
|
|
|
if( p_child ) /* go to child, process sibling later */ |
|
|
|
vlc_array_append( &stack, p_next ); |
|
|
|
else |
|
|
|
p_node = p_next; |
|
|
|
} |
|
|
|
|
|
|
|
p_node = p_next; |
|
|
|
if( !p_node ) |
|
|
|
{ |
|
|
|
/* pop saved next node */ |
|
|
|
size_t idx = vlc_array_count( &stack ); |
|
|
|
if( idx ) |
|
|
|
{ |
|
|
|
p_node = vlc_array_item_at_index( &stack, idx - 1 ); |
|
|
|
vlc_array_remove( &stack, idx - 1 ); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
vlc_array_clear( &stack ); |
|
|
|
} |
|
|
|
|
|
|
|
static webvtt_dom_text_t * webvtt_dom_text_New( webvtt_dom_node_t *p_parent ) |
|
|
|
|