59 return 1; |
59 return 1; |
60 } |
60 } |
61 |
61 |
62 /// message_node:children |
62 /// message_node:children |
63 /// Gets first child node (raw access used). |
63 /// Gets first child node (raw access used). |
|
64 /// Note: this method is deprecated and soon will be removed. |
|
65 /// Use child without arguments instead. |
64 /// R: lm message node object or nil |
66 /// R: lm message node object or nil |
65 int children_lm_node (lua_State *L) |
67 int children_lm_node (lua_State *L) |
66 { |
68 { |
67 LmMessageNode *node = luaL_checkLmMessageNode (L, 1); |
69 LmMessageNode *node = luaL_checkLmMessageNode (L, 1); |
68 LmMessageNode *child = node->children; |
70 LmMessageNode *child = node->children; |
103 return 1; |
105 return 1; |
104 } |
106 } |
105 |
107 |
106 /// message_node:child |
108 /// message_node:child |
107 /// Gets or creates child node object with given name. |
109 /// Gets or creates child node object with given name. |
108 /// A: string (name), string (optional value) |
110 /// If name is omitted, first child node is returned. |
|
111 /// A: string (name, optional), string (optional value) |
109 /// R: lm message node object or nil |
112 /// R: lm message node object or nil |
110 int child_lm_node (lua_State *L) |
113 int child_lm_node (lua_State *L) |
111 { |
114 { |
112 LmMessageNode *node = luaL_checkLmMessageNode (L, 1); |
115 LmMessageNode *node = luaL_checkLmMessageNode (L, 1); |
113 const char *name = luaL_checkstring (L, 2); |
|
114 LmMessageNode *child; |
116 LmMessageNode *child; |
115 |
117 int top = lua_gettop (L); |
116 if (lua_gettop (L) > 2) // Add |
118 if (top > 1) { |
117 child = lm_message_node_add_child (node, name, |
119 const char *name = luaL_checkstring (L, 2); |
118 luaL_checkstring (L, 3)); |
120 |
119 else { // Get |
121 if (top > 2) // Add |
120 child = lm_message_node_get_child (node, name); |
122 child = lm_message_node_add_child (node, name, |
121 if (!child) { |
123 luaL_checkstring (L, 3)); |
122 lua_pushnil (L); |
124 else // Get |
123 return 1; |
125 child = lm_message_node_get_child (node, name); |
124 } |
126 } else |
125 } |
127 child = node->children; |
126 bless_lm_node (L, child); |
128 |
127 // XXX lm_message_node_unref (child); |
129 if (child) |
|
130 bless_lm_node (L, child); |
|
131 // XXX lm_message_node_unref (child); // may be necessary on _get/_add'ed nodes |
|
132 else |
|
133 lua_pushnil (L); |
128 return 1; |
134 return 1; |
129 } |
135 } |
130 |
136 |
131 /// message_node:find_child |
137 /// message_node:find_child |
132 /// Searches for node with a given name over all node subtree. |
138 /// Searches for node with a given name over all node subtree. |