lm_message.c
changeset 7 5db1448eb857
parent 6 90073cbb535d
child 8 951f92c66821
equal deleted inserted replaced
6:90073cbb535d 7:5db1448eb857
     4 #include <loudmouth/loudmouth.h>
     4 #include <loudmouth/loudmouth.h>
     5 
     5 
     6 #include "config.h"
     6 #include "config.h"
     7 #include "util.h"
     7 #include "util.h"
     8 #include "lm_types.h"
     8 #include "lm_types.h"
       
     9 #include "lm_message_node.h"
     9 
    10 
    10 /// lm.message
    11 /// lm.message
    11 /// Module, representing individual message.
    12 /// Module, representing individual message.
    12 /// Message have a type and optionally a sub type.
    13 /// Message have a type and optionally a sub type.
    13 
    14 
   102 	llm_message_node_bless (L, node);
   103 	llm_message_node_bless (L, node);
   103 	// XXX lm_message_node_unref (node);
   104 	// XXX lm_message_node_unref (node);
   104 	return 1;
   105 	return 1;
   105 }
   106 }
   106 
   107 
   107 // XXX: add node methods here to allow omitting of :node(): element
       
   108 // BTW, we can jus adapt node methods to work on messages too and register them here also
       
   109 
       
   110 /// message:type
   108 /// message:type
   111 /// Returns two strings: message type and message sub type.
   109 /// Returns two strings: message type and message sub type.
   112 /// R: message type, message sub type
   110 /// R: message type, message sub type
   113 static int llm_message_kind (lua_State *L)
   111 static int llm_message_kind (lua_State *L)
   114 {
   112 {
   141 	{ "bless", llm_message_bless_lua },
   139 	{ "bless", llm_message_bless_lua },
   142 	{ NULL,    NULL                  },
   140 	{ NULL,    NULL                  },
   143 };
   141 };
   144 
   142 
   145 static const luaL_Reg llm_message_reg_m[] = {
   143 static const luaL_Reg llm_message_reg_m[] = {
   146 	{ "node",    llm_message_node    },
   144 	{ "node",       llm_message_node            },
   147 	{ "type",    llm_message_kind    },
   145 	{ "type",       llm_message_kind            },
   148 	{ "pointer", llm_message_pointer },
   146 	// These methods are common for message and message node
   149 	{ "__gc",    llm_message_gc      },
   147 	{ "next",       llm_message_node_next       },
   150 	{ NULL,      NULL                },
   148 	{ "prev",       llm_message_node_prev       },
       
   149 	{ "children",   llm_message_node_children   },
       
   150 	{ "parent",     llm_message_node_parent     },
       
   151 	{ "value",      llm_message_node_value      },
       
   152 	{ "child",      llm_message_node_child      },
       
   153 	{ "find_child", llm_message_node_find_child },
       
   154 	{ "attribute",  llm_message_node_attribute  },
       
   155 	{ "raw",        llm_message_node_raw        },
       
   156 	{ "xml",        llm_message_node_xml        },
       
   157 	// End common methods
       
   158 	{ "pointer",    llm_message_pointer         },
       
   159 	{ "__gc",       llm_message_gc              },
       
   160 	{ NULL,         NULL                        },
   151 };
   161 };
   152 
   162 
   153 int luaopen_lm_message (lua_State *L)
   163 int luaopen_lm_message (lua_State *L)
   154 {
   164 {
   155 	luaL_newmetatable (L, "loudmouth.message");
   165 	luaL_newmetatable (L, "loudmouth.message");