Import Geant4 10.3.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-12-09 12:35:28 +01:00
parent 4ec577e5c4
commit a3452e42ac
3514 changed files with 210500 additions and 89628 deletions
@@ -313,4 +313,197 @@ protected:
}}
#include "tree"
#include "../vmanip"
namespace tools {
namespace xml {
inline void load_style(styles& a_styles,const tree& a_tree) {
std::string name;
a_tree.attribute_value("name",name);
if(name.empty()) {
a_styles.out() << "tools::sg::gui_viewer::load_style :"
<< " <style> without name."
<< std::endl;
return;
}
styles::style_t sty;
{looper _for(a_tree);
while(element* _elem = _for.next_element()) {
if(_elem->name()=="copy") {
std::string from;
_elem->attribute_value("from",from); //expect another style name.
if(from.empty()) {
a_styles.out() << "tools::sg::gui_viewer::load_style :"
<< " <copy> without from."
<< std::endl;
return;
}
const styles::style_t* csty = a_styles.find_style(from);
if(!csty) {
a_styles.out() << "tools::sg::gui_viewer::load_style :"
<< " <copy> : from " << sout(from) << " not found."
<< std::endl;
return;
}
append(sty,*csty);
} else {
sty.push_back(styles::style_item_t(_elem->name(),_elem->value()));
}
}}
if(sty.size()) a_styles.add_style(name,sty);
}
inline void load_plotter_style(styles& a_styles,const tree& a_tree) {
std::string pname;
a_tree.attribute_value("name",pname);
if(pname.empty()) {
a_styles.out() << "tools::sg::gui_viewer::load_plotter_style :"
<< " <plotter_style> without name."
<< std::endl;
return;
}
{styles::style_t sty;
sty.push_back(styles::style_item_t("tag","plotter_style"));
{looper _for(a_tree);
while(element* _elem = _for.next_element()) {
if(_elem->name()=="copy") {
std::string from;
_elem->attribute_value("from",from); //expect a plotter_style name.
if(from.empty()) {
a_styles.out() << "tools::sg::gui_viewer::load_plotter_style :"
<< " <copy> without from."
<< std::endl;
return;
}
const styles::style_t* csty = a_styles.find_style(from);
if(!csty) {
a_styles.out() << "tools::sg::gui_viewer::load_plotter_style :"
<< " <copy> : from " << sout(from) << " not found."
<< std::endl;
return;
}
if(csty->size()) a_styles.add_style(pname,*csty);
if(styles::is_plotter_style(*csty)) {
//search all <from>.<sub_style> styles :
std::string head = from+".";
std::string::size_type l = head.size();
styles sts(a_styles.out());
const std::vector<styles::named_style_t>& nss =
a_styles.named_styles();
tools_vforcit(styles::named_style_t,nss,it){
const std::string& name = (*it).first;
if(name.substr(0,l)==head) {
std::string tail = name.substr(l,name.size()-l);
const styles::style_t& ssty = (*it).second;
if(ssty.size()) {
sts.add_style(pname+"."+tail,ssty);
}
}
}
a_styles.append(sts);
}
} else {
sty.push_back(styles::style_item_t(_elem->name(),_elem->value()));
}
}}
if(sty.size()) a_styles.add_style(pname,sty);}
{looper _for(a_tree);
while(tree* _tree = _for.next_tree()) {
const std::string& tag = _tree->tag_name();
if(tag=="style") {
std::string name;
_tree->attribute_value("name",name);
if(name.empty()) {
a_styles.out() << "tools::sg::gui_viewer::load_plotter_style :"
<< " <style> without name."
<< std::endl;
return;
}
{styles::style_t sty;
{looper _for2(*_tree);
while(element* _elem = _for2.next_element()) {
sty.push_back(styles::style_item_t(_elem->name(),_elem->value()));
}}
if(sty.size()) {
std::string path = pname+"."+name;
a_styles.add_style(path,sty);
}}
} else {
a_styles.out() << "tools::sg::gui_viewer::load_plotter_style :"
<< " unexpected tag " << sout(tag) << "."
<< std::endl;
}
}}
}
inline bool scan_style_tree(styles& a_styles,const tree& a_tree) {
if(a_tree.tag_name()!="styles") return false;
// look for aliases :
{looper _for(a_tree);
while(element* _elem = _for.next_element()) {
std::string name;
_elem->attribute_value("name",name);
if(name.empty()) {
a_styles.out() << "tools::sg::gui_viewer::load_style :"
<< " <alias> without name."
<< std::endl;
continue;
}
add<std::string,std::string>(a_styles.aliases(),name,_elem->value());
}}
// scan children :
{looper _for(a_tree);
while(tree* _tree = _for.next_tree()) {
const std::string& tag = _tree->tag_name();
if(tag=="style") {
load_style(a_styles,*_tree);
} else if(tag=="plotter_style") {
load_plotter_style(a_styles,*_tree);
}
}}
return true;
}
}}
#endif