X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FConsole%2FNode.cc;h=69e1bfb243da359cd7ba2c2575297981d58e9c9b;hb=bd9f9d3fd6fbcff0112a7bf48ab9284da9576b11;hp=41c17797186f9d40fd02e1ab0061adddc0db84b7;hpb=c60d49c7a219b1069c2ce1abc4a0971a9f4ff1f4;p=senf.git diff --git a/Utils/Console/Node.cc b/Utils/Console/Node.cc index 41c1779..69e1bfb 100644 --- a/Utils/Console/Node.cc +++ b/Utils/Console/Node.cc @@ -39,6 +39,31 @@ prefix_ senf::console::DirectoryNode & senf::console::root() return *rootNode; } +namespace { + void dodump(std::ostream & output, unsigned level, senf::console::DirectoryNode & node) + { + std::string pad (2*level, ' '); + senf::console::DirectoryNode::child_iterator i (node.children().begin()); + senf::console::DirectoryNode::child_iterator const i_end (node.children().end()); + for (; i != i_end; ++i) { + output << pad << i->first; + if (i->second->isDirectory()) { + output << "/\n"; + dodump(output, level+1,static_cast(*i->second)); + } + else if (i->second->isLink()) + output << "@ -> " << i->second->followLink().path() << '\n'; + else + output << '\n'; + } + } +} + +prefix_ void senf::console::dump(std::ostream & os, DirectoryNode & dir) +{ + dodump(os,0,dir); +} + /////////////////////////////////////////////////////////////////////////// // senf::console::GenericNode @@ -95,10 +120,15 @@ prefix_ bool senf::console::GenericNode::isChildOf(DirectoryNode & parent) prefix_ void senf::console::LinkNode::v_help(std::ostream & os) const { - os << "link to "; follow().help(os); } +prefix_ std::string senf::console::LinkNode::v_shorthelp() + const +{ + return follow().shorthelp(); +} + /////////////////////////////////////////////////////////////////////////// //senf::console::DirectoryNode @@ -161,6 +191,14 @@ prefix_ void senf::console::DirectoryNode::v_help(std::ostream & output) output << doc_ << "\n"; } +prefix_ std::string senf::console::DirectoryNode::v_shorthelp() + const +{ + if (! shortdoc_.empty()) + return shortdoc_; + return doc_.substr(0,doc_.find('\n')); +} + /////////////////////////////////////////////////////////////////////////// // senf::console::detail::NodeTraverser @@ -217,6 +255,14 @@ prefix_ void senf::console::SimpleCommandNode::v_help(std::ostream & output) output << doc_ << "\n"; } +prefix_ std::string senf::console::SimpleCommandNode::v_shorthelp() + const +{ + if (! shortdoc_.empty()) + return shortdoc_; + return doc_.substr(0,doc_.find('\n')); +} + prefix_ void senf::console::SimpleCommandNode::v_execute(boost::any & rv, std::ostream & os, ParseCommandInfo const & command) const