diff options
author | 2021-10-05 19:16:42 +0200 | |
---|---|---|
committer | 2021-10-05 19:16:42 +0200 | |
commit | eae75824d3c8d697216a9782b9f7ca6494ef431d (patch) | |
tree | eb98e1e99941c8843fe2196480927eefb00e2784 /src/emu/softlist.cpp | |
parent | 716c9f4c863ca150ff519429b24168df9890f1b1 (diff) |
softlist.cpp: Add support for a 'notes' field to store information ab… (#8482)
* softlist.cpp: Add support for a 'notes' field to store information about a software list or software list item. [Wilbert Pol]
* Add software list and software notes to minimaws
Diffstat (limited to 'src/emu/softlist.cpp')
-rw-r--r-- | src/emu/softlist.cpp | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp index 34517aa13ce..8ee8d0d8500 100644 --- a/src/emu/softlist.cpp +++ b/src/emu/softlist.cpp @@ -196,6 +196,7 @@ public: std::string_view filename, std::string &listname, std::string &description, + std::string ¬es, std::list<software_info> &infolist, std::ostream &errors); @@ -236,6 +237,7 @@ private: void parse_soft_start(const char *tagname, const char **attributes); void parse_part_start(const char *tagname, const char **attributes); void parse_data_start(const char *tagname, const char **attributes); + void parse_main_end(const char *tagname); void parse_soft_end(const char *name); // internal parsing state @@ -245,6 +247,7 @@ private: struct XML_ParserStruct * m_parser; std::string & m_listname; std::string & m_description; + std::string & m_notes; bool m_data_accum_expected; std::string m_data_accum; software_info * m_current_info; @@ -262,6 +265,7 @@ softlist_parser::softlist_parser( std::string_view filename, std::string &listname, std::string &description, + std::string ¬es, std::list<software_info> &infolist, std::ostream &errors) : m_filename(filename), @@ -269,6 +273,7 @@ softlist_parser::softlist_parser( m_errors(errors), m_listname(listname), m_description(description), + m_notes(notes), m_data_accum_expected(false), m_current_info(nullptr), m_current_part(nullptr), @@ -472,6 +477,7 @@ void softlist_parser::end_handler(void *data, const char *name) break; case POS_MAIN: + state->parse_main_end(name); state->m_current_info = nullptr; break; @@ -563,13 +569,25 @@ void softlist_parser::parse_main_start(const char *tagname, const char **attribu else parse_error("No name defined for item"); } + // <notes> + else if (strcmp(tagname, "notes") == 0) + { + m_data_accum_expected = true; + } else unknown_tag(tagname); } +void softlist_parser::parse_main_end(const char *tagname) +{ + if (strcmp(tagname, "notes") == 0) + m_notes = m_data_accum; +} + + //------------------------------------------------- -// parse_main_start - handle tag start within +// parse_soft_start - handle tag start within // a software tag //------------------------------------------------- @@ -594,6 +612,10 @@ void softlist_parser::parse_soft_start(const char *tagname, const char **attribu else if (strcmp(tagname, "publisher") == 0) m_data_accum_expected = true; + // <notes> + else if (strcmp(tagname, "notes") == 0) + m_data_accum_expected = true; + // <info name='' value=''> else if (strcmp(tagname, "info") == 0) { @@ -859,6 +881,10 @@ void softlist_parser::parse_soft_end(const char *tagname) else if (strcmp(tagname, "publisher") == 0) m_current_info->m_publisher = m_data_accum; + // <notes> + else if (strcmp(tagname, "notes") == 0) + m_current_info->m_notes = m_data_accum; + // </part> else if (strcmp(tagname, "part") == 0) { @@ -887,10 +913,11 @@ void parse_software_list( std::string_view filename, std::string &listname, std::string &description, + std::string ¬es, std::list<software_info> &infolist, std::ostream &errors) { - detail::softlist_parser(file, filename, listname, description, infolist, errors); + detail::softlist_parser(file, filename, listname, description, notes, infolist, errors); } |