allow sorting of help topics, thanks to Nakee

This commit is contained in:
Jérémy Rosen 2006-03-03 14:45:22 +00:00
parent ceac434d02
commit 650dce3915
4 changed files with 48 additions and 12 deletions

View file

@ -111,6 +111,7 @@ SVN trunk (1.1.1+svn):
characters
* force a refresh after calls to ONSCREEN scrolls, to avoid refresh
problems.
* add sort_topics command to the WML of help
Version 1.1.1:
* campaigns

View file

@ -289,7 +289,7 @@ Alexander Alexiou (Santi)
title = _ "Hebrew Translation"
text = "
Oron Peled
Ely Levy
Ely Levy (Nakee)
"
[/about]
@ -467,6 +467,7 @@ Jeff Breidenbach (jab)
Laurent Birtz
Rocco J Carello (rogue)
Tomasz Sikorski (Tomsik)
Ely Levy (Nakee)
"
[/about]

View file

@ -22,12 +22,14 @@ title= _ "Traits"
topics=traits,traits_intelligent,traits_resilient,traits_strong,traits_quick,traits_dextrous,traits_undead,traits_loyal
# Not used since generated text was not really suitable.
#generator=traits
sort_topics=yes
[/section]
[section]
id=units
title= _ "Units"
generator=units
sort_topics=yes
[/section]
[section]
@ -35,18 +37,21 @@ id=abilities_section
title= _ "Abilities"
topics=abilities
generator=abilities
sort_topics=yes
[/section]
[section]
id=weapon_specials
title= _ "Weapon Specials"
generator=weapon_specials
generator=weapon_specials
sort_topics=yes
[/section]
[section]
id=terrains
title= _ "Terrains"
topics=terrain_castle,terrain_village,terrain_deep_water,terrain_shallow_water,terrain_swamp_water,terrain_ford,terrain_bridge,terrain_sand,terrain_desert,terrain_savanna,terrain_grassland,terrain_road,terrain_forest,terrain_canyon,terrain_cave,terrain_cavewall,terrain_rockbound_cave, terrain_fungus,terrain_lava,terrain_hills,terrain_mountains,terrain_tundra,terrain_ice
sort_topics=yes
[/section]
[topic]

View file

@ -420,7 +420,7 @@ private:
/// Dispatch generators to their appropriate functions.
std::vector<section> generate_sections(const std::string &generator);
std::vector<topic> generate_topics(const std::string &generator);
std::vector<topic> generate_topics(bool sort_topics,const std::string &generator);
std::string generate_topic_text(const std::string &generator);
std::string generate_about_text();
std::string generate_traits_text();
@ -815,10 +815,24 @@ void parse_config_internal(const config *help_cfg, const config *section_cfg,
const std::vector<section> generated_sections =
generate_sections((*section_cfg)["generator"]);
std::transform(generated_sections.begin(), generated_sections.end(),
std::back_inserter(sec.sections), create_section());
const std::vector<std::string> topics = utils::quoted_split((*section_cfg)["topics"]);
std::back_inserter(sec.sections), create_section());
bool sort_topics = false;
if ((*section_cfg)["sort_topics"] == "yes")
sort_topics = true;
else if ((*section_cfg)["sort_topics"] == "no")
sort_topics = false;
else if ((*section_cfg)["sort_topics"] != "") {
std::stringstream ss;
ss << "Invalid sort option: '" << (*section_cfg)["sort_topics"] << "'";
throw parse_error(ss.str());
}
const std::vector<std::string> topics_id = utils::quoted_split((*section_cfg)["topics"]);
std::vector<topic> topics;
// Find all topics in this section.
for (it = topics.begin(); it != topics.end(); it++) {
for (it = topics_id.begin(); it != topics_id.end(); it++) {
config const *topic_cfg = help_cfg->find_child("topic", "id", *it);
if (topic_cfg != NULL) {
std::string text = (*topic_cfg)["text"];
@ -829,7 +843,7 @@ void parse_config_internal(const config *help_cfg, const config *section_cfg,
ss << "Invalid ID, used for internal purpose: '" << id << "'";
throw parse_error(ss.str());
}
sec.topics.push_back(child_topic);
topics.push_back(child_topic);
}
else {
std::stringstream ss;
@ -838,10 +852,23 @@ void parse_config_internal(const config *help_cfg, const config *section_cfg,
throw parse_error(ss.str());
}
}
const std::vector<topic> generated_topics =
generate_topics((*section_cfg)["generator"]);
std::copy(generated_topics.begin(), generated_topics.end(),
std::back_inserter(sec.topics));
generate_topics(sort_topics,(*section_cfg)["generator"]);
if (sort_topics) {
std::sort(topics.begin(),topics.end(), title_less());
std::merge(generated_topics.begin(),generated_topics.end()
,topics.begin(),topics.end()
,std::back_inserter(sec.topics),title_less());
}
else {
std::copy(generated_topics.begin(), generated_topics.end(),
std::back_inserter(sec.topics));
std::copy(topics.begin(), topics.end(),
std::back_inserter(sec.topics));
}
}
}
@ -865,7 +892,7 @@ std::vector<section> generate_sections(const std::string &generator)
return empty_vec;
}
std::vector<topic> generate_topics(const std::string &generator)
std::vector<topic> generate_topics(bool sort_topics,const std::string &generator)
{
std::vector<topic> res;
if (generator == "units") {
@ -881,7 +908,9 @@ std::vector<topic> generate_topics(const std::string &generator)
// else if (generator == "terrains") {
// res = generate_terrains_topics();
// }
std::sort(res.begin(), res.end(), title_less());
if (sort_topics)
std::sort(res.begin(), res.end(), title_less());
return res;
}