- if (node->getType() == SGPropertyNode::STRING
- || node->getType() == SGPropertyNode::UNSPECIFIED)
- sanitize(value);
-
- stdString line = name + " = '" + value + "' (" + type;
-
- if (_flags->getBoolValue()) {
- stdString ext;
- if (!node->getAttribute(SGPropertyNode::READ))
- ext += 'r';
- if (!node->getAttribute(SGPropertyNode::WRITE))
- ext += 'w';
- if (node->getAttribute(SGPropertyNode::TRACE_READ))
- ext += 'R';
- if (node->getAttribute(SGPropertyNode::TRACE_WRITE))
- ext += 'W';
- if (node->getAttribute(SGPropertyNode::ARCHIVE))
- ext += 'A';
- if (node->getAttribute(SGPropertyNode::USERARCHIVE))
- ext += 'U';
- if (node->isTied())
- ext += 'T';
- if (ext.size())
- line += ", " + ext;
+ std::ostringstream line;
+ line << name;
+
+ int children = node->nChildren();
+ if (children)
+ line << '/';
+
+ if (!children || (_verbose && node->hasValue())) {
+ if (node->getType() == props::STRING
+ || node->getType() == props::UNSPECIFIED)
+ sanitize(value);
+
+ line << " = '" << value << "' (" << type;
+
+ if (_verbose) {
+ stdString ext;
+ if (!node->getAttribute(SGPropertyNode::READ))
+ ext += 'r';
+ if (!node->getAttribute(SGPropertyNode::WRITE))
+ ext += 'w';
+ if (node->getAttribute(SGPropertyNode::TRACE_READ))
+ ext += 'R';
+ if (node->getAttribute(SGPropertyNode::TRACE_WRITE))
+ ext += 'W';
+ if (node->getAttribute(SGPropertyNode::ARCHIVE))
+ ext += 'A';
+ if (node->getAttribute(SGPropertyNode::USERARCHIVE))
+ ext += 'U';
+ if (node->getAttribute(SGPropertyNode::PRESERVE))
+ ext += 'P';
+ if (node->isTied())
+ ext += 'T';
+
+ if (!ext.empty())
+ line << ", " << ext;
+
+ int num = node->nListeners();
+ if (data.listener)
+ num--;
+ if (num)
+ line << ", L" << num;
+ }
+ line << ')';
+ }
+ else
+ if ((_verbose)&&(node->getAttribute(SGPropertyNode::PRESERVE)))
+ {
+ // only preserve/protection flag matters for nodes without values
+ line << " (P)";