WEBVTT_EXPORT webvtt_status webvtt_create_cue( webvtt_cue **pcue ) { webvtt_cue *cue; if( !pcue ) { return WEBVTT_INVALID_PARAM; } cue = (webvtt_cue *)webvtt_alloc0( sizeof(*cue) ); if( !cue ) { return WEBVTT_OUT_OF_MEMORY; } /** * From http://dev.w3.org/html5/webvtt/#parsing (10/25/2012) * * Let cue's text track cue snap-to-lines flag be true. * * Let cue's text track cue line position be auto. * * Let cue's text track cue text position be 50. * * Let cue's text track cue size be 100. * * Let cue's text track cue alignment be middle alignment. */ webvtt_ref( &cue->refs ); webvtt_init_string( &cue->id ); webvtt_init_string( &cue->body ); cue->from = 0xFFFFFFFFFFFFFFFF; cue->until = 0xFFFFFFFFFFFFFFFF; cue->snap_to_lines = 1; cue->settings.position = 50; cue->settings.size = 100; cue->settings.align = WEBVTT_ALIGN_MIDDLE; cue->settings.line = WEBVTT_AUTO; cue->settings.vertical = WEBVTT_HORIZONTAL; *pcue = cue; return WEBVTT_SUCCESS; }
WEBVTT_INTERN webvtt_status webvtt_create_head_node( webvtt_node **node ) { webvtt_status status; webvtt_string temp_annotation; webvtt_init_string( &temp_annotation ); if( WEBVTT_FAILED( status = webvtt_create_internal_node( node, NULL, WEBVTT_HEAD_NODE, NULL, &temp_annotation ) ) ) { return status; } return WEBVTT_SUCCESS; }
/** * Need to set up differently. * Get a status in order to return at end and release memeory. */ WEBVTT_INTERN webvtt_status webvtt_cuetext_tokenizer( webvtt_byte **position, webvtt_cuetext_token **token ) { webvtt_token_state token_state = DATA; webvtt_string result, annotation; webvtt_stringlist *css_classes; webvtt_timestamp time_stamp = 0; webvtt_status status = WEBVTT_UNFINISHED; if( !position ) { return WEBVTT_INVALID_PARAM; } webvtt_create_string( 10, &result ); webvtt_create_string( 10, &annotation ); webvtt_create_stringlist( &css_classes ); /** * Loop while the tokenizer is not finished. * Based on the state of the tokenizer enter a function to handle that * particular tokenizer state. Those functions will loop until they either * change the state of the tokenizer or reach a valid token end point. */ while( status == WEBVTT_UNFINISHED ) { switch( token_state ) { case DATA : status = webvtt_data_state( position, &token_state, &result ); break; case ESCAPE: status = webvtt_escape_state( position, &token_state, &result ); break; case TAG: status = webvtt_tag_state( position, &token_state, &result ); break; case START_TAG: status = webvtt_start_tag_state( position, &token_state, &result ); break; case START_TAG_CLASS: status = webvtt_class_state( position, &token_state, css_classes ); break; case START_TAG_ANNOTATION: status = webvtt_annotation_state( position, &token_state, &annotation ); break; case END_TAG: status = webvtt_end_tag_state( position, &token_state, &result ); break; case TIME_STAMP_TAG: status = webvtt_timestamp_state( position, &token_state, &result ); break; } if( token_state == START_TAG_ANNOTATION ) { webvtt_skipwhite( position ); } } if( **position == UTF8_GREATER_THAN ) { (*position)++; } if( status == WEBVTT_SUCCESS ) { /** * The state that the tokenizer left off on will tell us what kind of token * needs to be made. */ if( token_state == DATA || token_state == ESCAPE ) { status = webvtt_create_text_token( token, &result ); } else if(token_state == TAG || token_state == START_TAG || token_state == START_TAG_CLASS || token_state == START_TAG_ANNOTATION) { /** * If the tag does not accept an annotation then release the current * annotation and intialize annotation to a safe empty state */ if( !tag_accepts_annotation( &result ) ) { webvtt_release_string( &annotation ); webvtt_init_string( &annotation ); } status = webvtt_create_start_token( token, &result, css_classes, &annotation ); } else if( token_state == END_TAG ) { status = webvtt_create_end_token( token, &result ); } else if( token_state == TIME_STAMP_TAG ) { parse_timestamp( webvtt_string_text( &result ), &time_stamp ); status = webvtt_create_timestamp_token( token, time_stamp ); } else { status = WEBVTT_INVALID_TOKEN_STATE; } } webvtt_release_stringlist( &css_classes ); webvtt_release_string( &result ); webvtt_release_string( &annotation ); return status; }