diff options
author | Mu Qiao <qiaomuf@gentoo.org> | 2011-04-21 22:36:54 +0800 |
---|---|---|
committer | Mu Qiao <qiaomuf@gentoo.org> | 2011-04-28 11:09:04 +0800 |
commit | 9d812d19cbcfe79cdbf5daa5b42cab1c2436902b (patch) | |
tree | 33d4f3bbc01b464b7b2eb5a8c94c22c226baaac2 /utils/metadata_generator.cpp | |
parent | Builtin: implement source builtin (diff) | |
download | libbash-9d812d19cbcfe79cdbf5daa5b42cab1c2436902b.tar.gz libbash-9d812d19cbcfe79cdbf5daa5b42cab1c2436902b.tar.bz2 libbash-9d812d19cbcfe79cdbf5daa5b42cab1c2436902b.zip |
Builtin: implement inherit builtin
metadata_generator is improved to make use of the information added
by inherit builtin.
Diffstat (limited to 'utils/metadata_generator.cpp')
-rw-r--r-- | utils/metadata_generator.cpp | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/utils/metadata_generator.cpp b/utils/metadata_generator.cpp index 859839c..52b4590 100644 --- a/utils/metadata_generator.cpp +++ b/utils/metadata_generator.cpp @@ -73,20 +73,40 @@ int main(int argc, char** argv) for(auto iter_name = metadata_names.begin(); iter_name != metadata_names.end(); ++iter_name) { auto iter_value = variables.find(*iter_name); + std::string value; + if(iter_value != variables.end()) + value = iter_value->second[0]; + + // Check if global is defined + auto iter_global = variables.find("E_" + *iter_name); + if(iter_global != variables.end()) { - std::vector<std::string> formatted; - boost::trim_if(iter_value->second[0], boost::is_any_of(" \t\n")); - boost::split(formatted, - iter_value->second[0], + boost::trim_if(iter_global->second[0], boost::is_any_of(" \t\n")); + std::vector<std::string> splitted_global; + boost::split(splitted_global, + iter_global->second[0], boost::is_any_of(" \t\n"), boost::token_compress_on); - std::cout << format(string % ' ', formatted) << std::endl; - } - else - { - std::cout << std::endl; + + // Append the global value to 'value' if it doesn't cause duplication + for(auto iter_splitted_global = splitted_global.begin(); + iter_splitted_global != splitted_global.end(); + ++iter_splitted_global) + { + if(value.find(*iter_splitted_global) == std::string::npos) + value += " " + *iter_splitted_global; + } } + + boost::trim_if(value, boost::is_any_of(" \t\n")); + + std::vector<std::string> splitted_value; + boost::split(splitted_value, + value, + boost::is_any_of(" \t\n"), + boost::token_compress_on); + std::cout << format(string % ' ', splitted_value) << std::endl; } // Print defined phases @@ -97,8 +117,6 @@ int main(int argc, char** argv) if(iter_phase != phases.end()) sorted_phases.insert(iter_phase->second); } - - using namespace boost::spirit::karma; std::cout << format(string % ' ', sorted_phases) << std::endl; // Print empty lines |