189 LmMessageNode *node = luaL_checkLmMessageNode (L, 1); |
189 LmMessageNode *node = luaL_checkLmMessageNode (L, 1); |
190 lua_pushstring (L, lm_message_node_to_string (node)); |
190 lua_pushstring (L, lm_message_node_to_string (node)); |
191 return 1; |
191 return 1; |
192 } |
192 } |
193 |
193 |
|
194 /// message_node:path |
|
195 /// Returns node with specified path to it. |
|
196 /// If any element in a path cannot be found, it returns nil. |
|
197 /// A: string (node name), ... |
|
198 /// R: lm message node object or nil |
|
199 int llm_message_node_path (lua_State *L) |
|
200 { |
|
201 LmMessageNode *node = luaL_checkLmMessageNode (L, 1); |
|
202 int i = 1; |
|
203 while (i++ < lua_gettop (L)) { |
|
204 node = lm_message_node_get_child (node, luaL_checkstring (L, i)); |
|
205 if (node == NULL) { |
|
206 lua_pushnil (L); |
|
207 return 1; |
|
208 } |
|
209 } |
|
210 llm_message_node_bless (L, node); |
|
211 // XXX lm_message_node_unref (child); |
|
212 return 1; |
|
213 } |
|
214 |
194 /// message_node:pointer |
215 /// message_node:pointer |
195 /// Returns pointer to underlying C structure. |
216 /// Returns pointer to underlying C structure. |
196 /// R: lightuserdata |
217 /// R: lightuserdata |
197 static int llm_message_node_pointer (lua_State *L) |
218 static int llm_message_node_pointer (lua_State *L) |
198 { |
219 { |
224 { "child", llm_message_node_child }, |
245 { "child", llm_message_node_child }, |
225 { "find_child", llm_message_node_find_child }, |
246 { "find_child", llm_message_node_find_child }, |
226 { "attribute", llm_message_node_attribute }, |
247 { "attribute", llm_message_node_attribute }, |
227 { "raw", llm_message_node_raw }, |
248 { "raw", llm_message_node_raw }, |
228 { "xml", llm_message_node_xml }, |
249 { "xml", llm_message_node_xml }, |
|
250 { "path", llm_message_node_path }, |
229 { "pointer", llm_message_node_pointer }, |
251 { "pointer", llm_message_node_pointer }, |
230 { "__gc", llm_message_node_gc }, |
252 { "__gc", llm_message_node_gc }, |
231 { NULL, NULL }, |
253 { NULL, NULL }, |
232 }; |
254 }; |
233 |
255 |