//static void TBNodeRefTree::ResolveConditions(TBNode *parent_node) { bool condition_ret = false; TBNode *node = parent_node->GetFirstChild(); while (node) { bool delete_node = false; bool move_children = false; if (strcmp(node->GetName(), "@if") == 0) { condition_ret = node->GetValueFollowRef().GetInt() ? true : false; if (condition_ret) move_children = true; delete_node = true; } else if (strcmp(node->GetName(), "@else") == 0) { condition_ret = !condition_ret; if (condition_ret) move_children = true; delete_node = true; } // Make sure we'll skip any nodes added from a conditional branch. TBNode *node_next = node->GetNext(); if (move_children) { // Resolve the branch first, since we'll skip it. ResolveConditions(node); while (TBNode *content = node->GetLastChild()) { node->Remove(content); parent_node->AddAfter(content, node); } } if (delete_node) parent_node->Delete(node); else ResolveConditions(node); node = node_next; } }
void IncludeFile(int line_nr, const char *filename) { // Read the included file into a new TBNode and then // move all the children to m_target_node. TBTempBuffer include_filename; include_filename.AppendPath(m_filename); include_filename.AppendString(filename); TBNode content; if (content.ReadFile(include_filename.GetData())) { while (TBNode *content_n = content.GetFirstChild()) { content.Remove(content_n); m_target_node->Add(content_n); } } else { TBStr err; err.SetFormatted("Referenced file \"%s\" was not found!", include_filename.GetData()); OnError(line_nr, err); } }