67 { NULL, 0 }, |
67 { NULL, 0 }, |
68 }; |
68 }; |
69 |
69 |
70 /// lm.message.new |
70 /// lm.message.new |
71 /// Creates new message object. |
71 /// Creates new message object. |
|
72 /// Note: you can specify nil as to argument to send message to server. |
72 /// A: string (to), message type, message sub type (optional) |
73 /// A: string (to), message type, message sub type (optional) |
73 /// R: lm message object |
74 /// R: lm message object |
74 static int new_lm_message (lua_State *L) |
75 static int new_lm_message (lua_State *L) |
75 { |
76 { |
76 const char *to = luaL_checkstring (L, 1); |
77 const char *to = NULL; |
77 int type = luaL_checkenum (L, 2, type_lm_message); |
78 int type = luaL_checkenum (L, 2, type_lm_message); |
78 LmMessage *message; |
79 LmMessage *message; |
|
80 |
|
81 if (lua_type (L, 1) != LUA_TNIL) |
|
82 to = luaL_checkstring (L, 1); |
79 if (lua_gettop (L) > 2) |
83 if (lua_gettop (L) > 2) |
80 message = lm_message_new_with_sub_type (to, type, |
84 message = lm_message_new_with_sub_type (to, type, |
81 luaL_checkenum (L, 3, sub_type_lm_message)); |
85 luaL_checkenum (L, 3, sub_type_lm_message)); |
82 else |
86 else |
83 message = lm_message_new (to, type); |
87 message = lm_message_new (to, type); |
140 } |
144 } |
141 |
145 |
142 static const luaL_Reg reg_f_lm_message[] = { |
146 static const luaL_Reg reg_f_lm_message[] = { |
143 { "new", new_lm_message }, |
147 { "new", new_lm_message }, |
144 { "bless", bless_lua_lm_message }, |
148 { "bless", bless_lua_lm_message }, |
145 { NULL, NULL }, |
149 { NULL, NULL }, |
146 }; |
150 }; |
147 |
151 |
148 static const luaL_Reg reg_m_lm_message[] = { |
152 static const luaL_Reg reg_m_lm_message[] = { |
149 { "node", node_lm_message }, |
153 { "node", node_lm_message }, |
150 { "type", kind_lm_message }, |
154 { "type", kind_lm_message }, |
151 // These methods are common for message and message node |
155 // These methods are common for message and message node |
152 { "next", next_lm_node }, |
156 { "next", next_lm_node }, |
153 { "prev", prev_lm_node }, |
157 { "prev", prev_lm_node }, |
154 { "children", children_lm_node }, |
158 { "children", children_lm_node }, |
155 { "parent", parent_lm_node }, |
159 { "parent", parent_lm_node }, |
159 { "attribute", attribute_lm_node }, |
163 { "attribute", attribute_lm_node }, |
160 { "raw", raw_lm_node }, |
164 { "raw", raw_lm_node }, |
161 { "xml", xml_lm_node }, |
165 { "xml", xml_lm_node }, |
162 { "path", path_lm_node }, |
166 { "path", path_lm_node }, |
163 // End common methods |
167 // End common methods |
164 { "pointer", pointer_lm_message }, |
168 { "pointer", pointer_lm_message }, |
165 { "__gc", gc_lm_message }, |
169 { "__gc", gc_lm_message }, |
166 { NULL, NULL }, |
170 { NULL, NULL }, |
167 }; |
171 }; |
168 |
172 |
169 int luaopen_lm_message (lua_State *L) |
173 int luaopen_lm_message (lua_State *L) |
170 { |
174 { |
171 luaL_newmetatable (L, "loudmouth.message"); |
175 luaL_newmetatable (L, "loudmouth.message"); |