playlist/xspf: add State::TAG
This commit is contained in:
parent
3e97058151
commit
e0a8fd398c
|
@ -45,7 +45,7 @@ struct XspfParser {
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
ROOT, PLAYLIST, TRACKLIST, TRACK,
|
ROOT, PLAYLIST, TRACKLIST, TRACK,
|
||||||
LOCATION,
|
TAG, LOCATION,
|
||||||
} state = ROOT;
|
} state = ROOT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -99,7 +99,6 @@ xspf_start_element(void *user_data, const XML_Char *element_name,
|
||||||
if (strcmp(element_name, "track") == 0) {
|
if (strcmp(element_name, "track") == 0) {
|
||||||
parser->state = XspfParser::TRACK;
|
parser->state = XspfParser::TRACK;
|
||||||
parser->location.clear();
|
parser->location.clear();
|
||||||
parser->tag_type = TAG_NUM_OF_ITEM_TYPES;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -107,12 +106,16 @@ xspf_start_element(void *user_data, const XML_Char *element_name,
|
||||||
case XspfParser::TRACK:
|
case XspfParser::TRACK:
|
||||||
if (strcmp(element_name, "location") == 0)
|
if (strcmp(element_name, "location") == 0)
|
||||||
parser->state = XspfParser::LOCATION;
|
parser->state = XspfParser::LOCATION;
|
||||||
else if (!parser->location.empty())
|
else if (!parser->location.empty()) {
|
||||||
parser->tag_type = tag_table_lookup(xspf_tag_elements,
|
parser->tag_type = tag_table_lookup(xspf_tag_elements,
|
||||||
element_name);
|
element_name);
|
||||||
|
if (parser->tag_type != TAG_NUM_OF_ITEM_TYPES)
|
||||||
|
parser->state = XspfParser::TAG;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case XspfParser::TAG:
|
||||||
case XspfParser::LOCATION:
|
case XspfParser::LOCATION:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -146,11 +149,11 @@ xspf_end_element(void *user_data, const XML_Char *element_name)
|
||||||
parser->tag_builder.Commit());
|
parser->tag_builder.Commit());
|
||||||
|
|
||||||
parser->state = XspfParser::TRACKLIST;
|
parser->state = XspfParser::TRACKLIST;
|
||||||
} else
|
}
|
||||||
parser->tag_type = TAG_NUM_OF_ITEM_TYPES;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case XspfParser::TAG:
|
||||||
case XspfParser::LOCATION:
|
case XspfParser::LOCATION:
|
||||||
parser->state = XspfParser::TRACK;
|
parser->state = XspfParser::TRACK;
|
||||||
break;
|
break;
|
||||||
|
@ -166,13 +169,12 @@ xspf_char_data(void *user_data, const XML_Char *s, int len)
|
||||||
case XspfParser::ROOT:
|
case XspfParser::ROOT:
|
||||||
case XspfParser::PLAYLIST:
|
case XspfParser::PLAYLIST:
|
||||||
case XspfParser::TRACKLIST:
|
case XspfParser::TRACKLIST:
|
||||||
|
case XspfParser::TRACK:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XspfParser::TRACK:
|
case XspfParser::TAG:
|
||||||
if (parser->tag_type != TAG_NUM_OF_ITEM_TYPES)
|
parser->tag_builder.AddItem(parser->tag_type,
|
||||||
parser->tag_builder.AddItem(parser->tag_type,
|
StringView(s, len));
|
||||||
StringView(s, len));
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XspfParser::LOCATION:
|
case XspfParser::LOCATION:
|
||||||
|
|
Loading…
Reference in New Issue