diff --git a/hmmlib2/hmmlib.h b/hmmlib2/hmmlib.h index b80361b..df20075 100644 --- a/hmmlib2/hmmlib.h +++ b/hmmlib2/hmmlib.h @@ -28,6 +28,9 @@ typedef struct { HMML_Credit* credits; size_t credit_count; + HMML_Credit* uncredits; + size_t uncredit_count; + HMML_VideoCustomMetaData* custom; size_t custom_count; @@ -697,6 +700,20 @@ static void _hmml_parse_annotations(struct _hmml_parser* p) } } +static HMML_Credit _hmml_parse_credit(struct _hmml_parser* p, struct _hmml_str value) +{ + HMML_Credit credit = {}; + char* colon = strchr(value.ptr, ':'); + if(colon) { + *colon = '\0'; + credit.name = _hmml_persist_str(p, (struct _hmml_str){ value.ptr, colon - value.ptr }); + credit.role = _hmml_persist_str(p, (struct _hmml_str){ colon+1, value.len - ((colon+1) - value.ptr) }); + } else { + credit.name = _hmml_persist_str(p, value); + } + return credit; +} + static void _hmml_parse_video(struct _hmml_parser* p) { struct str_attr { @@ -735,19 +752,14 @@ next_attr: } if(_hmml_str_eq(key, HSTR("credit"))) { - HMML_Credit credit = {}; - - char* colon = strchr(value.ptr, ':'); - if(colon) { - *colon = '\0'; - credit.name = _hmml_persist_str(p, (struct _hmml_str){ value.ptr, colon - value.ptr }); - credit.role = _hmml_persist_str(p, (struct _hmml_str){ colon+1, value.len - ((colon+1) - value.ptr) }); - } else { - credit.name = _hmml_persist_str(p, value); - } - + HMML_Credit credit = _hmml_parse_credit(p, value); _hmml_persist_array(p, &p->out.metadata.credits, &p->out.metadata.credit_count, credit); + goto next_attr; + } + if(_hmml_str_eq(key, HSTR("uncredit"))) { + HMML_Credit uncredit = _hmml_parse_credit(p, value); + _hmml_persist_array(p, &p->out.metadata.uncredits, &p->out.metadata.uncredit_count, uncredit); goto next_attr; } @@ -801,7 +813,7 @@ void hmml_free(HMML_Output* out) } const struct HMML_Version hmml_version = { - 2, 0, 6 + 2, 0, 7 }; #undef HSTX