lm_message_node.c
changeset 7 5db1448eb857
parent 6 90073cbb535d
child 8 951f92c66821
equal deleted inserted replaced
6:90073cbb535d 7:5db1448eb857
    22 }
    22 }
    23 
    23 
    24 /// message_node:name
    24 /// message_node:name
    25 /// Gets a name of message node.
    25 /// Gets a name of message node.
    26 /// R: string
    26 /// R: string
    27 static int llm_message_node_name (lua_State *L)
    27 int llm_message_node_name (lua_State *L)
    28 {
    28 {
    29 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
    29 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
    30 	lua_pushstring (L, object->message_node->name);
    30 	lua_pushstring (L, node->name);
    31 	return 1;
    31 	return 1;
    32 }
    32 }
    33 
    33 
    34 /// message_node:next
    34 /// message_node:next
    35 /// Gets next message node.
    35 /// Gets next message node.
    36 /// R: lm message node object or nil
    36 /// R: lm message node object or nil
    37 static int llm_message_node_next (lua_State *L)
    37 int llm_message_node_next (lua_State *L)
    38 {
    38 {
    39 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
    39 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
    40 	LmMessageNode *node = object->message_node->next;
    40 	LmMessageNode *next = node->next;
    41 	if (node)
    41 	if (next)
    42 		llm_message_node_bless (L, node);
    42 		llm_message_node_bless (L, next);
    43 	else
    43 	else
    44 		lua_pushnil (L);
    44 		lua_pushnil (L);
    45 	return 1;
    45 	return 1;
    46 }
    46 }
    47 
    47 
    48 /// message_node:prev
    48 /// message_node:prev
    49 /// Gets previous message node.
    49 /// Gets previous message node.
    50 /// R: lm message node object or nil
    50 /// R: lm message node object or nil
    51 static int llm_message_node_prev (lua_State *L)
    51 int llm_message_node_prev (lua_State *L)
    52 {
    52 {
    53 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
    53 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
    54 	LmMessageNode *node = object->message_node->prev;
    54 	LmMessageNode *prev = node->prev;
    55 	if (node)
    55 	if (prev)
    56 		llm_message_node_bless (L, node);
    56 		llm_message_node_bless (L, prev);
    57 	else
    57 	else
    58 		lua_pushnil (L);
    58 		lua_pushnil (L);
    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 /// R: lm message node object or nil
    64 /// R: lm message node object or nil
    65 static int llm_message_node_children (lua_State *L)
    65 int llm_message_node_children (lua_State *L)
    66 {
    66 {
    67 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
    67 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
    68 	LmMessageNode *node = object->message_node->children;
    68 	LmMessageNode *child = node->children;
    69 	if (node)
    69 	if (child)
    70 		llm_message_node_bless (L, node);
    70 		llm_message_node_bless (L, child);
    71 	else
    71 	else
    72 		lua_pushnil (L);
    72 		lua_pushnil (L);
    73 	return 1;
    73 	return 1;
    74 }
    74 }
    75 
    75 
    76 /// message_node:parent
    76 /// message_node:parent
    77 /// Gets parent message node.
    77 /// Gets parent message node.
    78 /// R: lm message node object or nil
    78 /// R: lm message node object or nil
    79 static int llm_message_node_parent (lua_State *L)
    79 int llm_message_node_parent (lua_State *L)
    80 {
    80 {
    81 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
    81 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
    82 	LmMessageNode *node = object->message_node->parent;
    82 	LmMessageNode *parent = node->parent;
    83 	if (node)
    83 	if (parent)
    84 		llm_message_node_bless (L, node);
    84 		llm_message_node_bless (L, parent);
    85 	else
    85 	else
    86 		lua_pushnil (L);
    86 		lua_pushnil (L);
    87 	return 1;
    87 	return 1;
    88 }
    88 }
    89 
    89 
    90 /// message_node:value
    90 /// message_node:value
    91 /// Gets or sets a value of message node.
    91 /// Gets or sets a value of message node.
    92 /// A: string (optional value)
    92 /// A: string (optional value)
    93 /// R: string (if called without arguments) or lm message node object
    93 /// R: string (if called without arguments) or lm message node object
    94 static int llm_message_node_value (lua_State *L)
    94 int llm_message_node_value (lua_State *L)
    95 {
    95 {
    96 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
    96 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
    97 	if (lua_gettop (L) > 1) { // Set
    97 	if (lua_gettop (L) > 1) { // Set
    98 		const char *value = luaL_checkstring (L, 2);
    98 		const char *value = luaL_checkstring (L, 2);
    99 		lm_message_node_set_value (object->message_node, value);
    99 		lm_message_node_set_value (node, value);
   100 		lua_pop (L, 1);
   100 		lua_pop (L, 1);
   101 	} else // Get
   101 	} else // Get
   102 		lua_pushstring (L, lm_message_node_get_value (object->message_node));
   102 		lua_pushstring (L, lm_message_node_get_value (node));
   103 	return 1;
   103 	return 1;
   104 }
   104 }
   105 
   105 
   106 /// message_node:child
   106 /// message_node:child
   107 /// Gets or creates child node object with given name.
   107 /// Gets or creates child node object with given name.
   108 /// A: string (name), string (optional value)
   108 /// A: string (name), string (optional value)
   109 /// R: lm message node object or nil
   109 /// R: lm message node object or nil
   110 static int llm_message_node_child (lua_State *L)
   110 int llm_message_node_child (lua_State *L)
   111 {
   111 {
   112 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
   112 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   113 	const char *name = luaL_checkstring (L, 2);
   113 	const char *name = luaL_checkstring (L, 2);
   114 	LmMessageNode *child;
   114 	LmMessageNode *child;
   115 
   115 
   116 	if (lua_gettop (L) > 2) // Add
   116 	if (lua_gettop (L) > 2) // Add
   117 		child = lm_message_node_add_child (object->message_node, name,
   117 		child = lm_message_node_add_child (node, name,
   118 						   luaL_checkstring (L, 3));
   118 						   luaL_checkstring (L, 3));
   119 	else { // Get
   119 	else { // Get
   120 		child = lm_message_node_get_child (object->message_node, name);
   120 		child = lm_message_node_get_child (node, name);
   121 		if (!child) {
   121 		if (!child) {
   122 			lua_pushnil (L);
   122 			lua_pushnil (L);
   123 			return 1;
   123 			return 1;
   124 		}
   124 		}
   125 	}
   125 	}
   130 
   130 
   131 /// message_node:find_child
   131 /// message_node:find_child
   132 /// Searches for node with a given name over all node subtree.
   132 /// Searches for node with a given name over all node subtree.
   133 /// A: string (name)
   133 /// A: string (name)
   134 /// R: lm message node object or nil
   134 /// R: lm message node object or nil
   135 static int llm_message_node_find_child (lua_State *L)
   135 int llm_message_node_find_child (lua_State *L)
   136 {
   136 {
   137 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
   137 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   138 	const char *name = luaL_checkstring (L, 2);
   138 	const char *name = luaL_checkstring (L, 2);
   139 	LmMessageNode *child;
   139 	LmMessageNode *child;
   140 
   140 
   141 	child = lm_message_node_get_child (object->message_node, name);
   141 	child = lm_message_node_get_child (node, name);
   142 	if (!child)
   142 	if (!child)
   143 		lua_pushnil (L);
   143 		lua_pushnil (L);
   144 	else {
   144 	else {
   145 		llm_message_node_bless (L, child);
   145 		llm_message_node_bless (L, child);
   146 		// XXX lm_message_node_unref (child);
   146 		// XXX lm_message_node_unref (child);
   151 /// message_node:raw
   151 /// message_node:raw
   152 /// Gets or sets raw mode flag for node.
   152 /// Gets or sets raw mode flag for node.
   153 /// When set, value of node will not be escaped.
   153 /// When set, value of node will not be escaped.
   154 /// A: boolean (optional)
   154 /// A: boolean (optional)
   155 /// V: boolean (if called with no apguments) or lm message node object
   155 /// V: boolean (if called with no apguments) or lm message node object
   156 static int llm_message_node_raw (lua_State *L)
   156 int llm_message_node_raw (lua_State *L)
   157 {
   157 {
   158 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
   158 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   159 	if (lua_gettop (L) > 1) { // Set
   159 	if (lua_gettop (L) > 1) { // Set
   160 		luaL_checktype (L, 2, LUA_TBOOLEAN);
   160 		luaL_checktype (L, 2, LUA_TBOOLEAN);
   161 		lm_message_node_set_raw_mode (object->message_node, lua_toboolean (L, 2));
   161 		lm_message_node_set_raw_mode (node, lua_toboolean (L, 2));
   162 		lua_pop (L, 1);
   162 		lua_pop (L, 1);
   163 	} else // Get
   163 	} else // Get
   164 		lua_pushboolean (L, lm_message_node_get_raw_mode (object->message_node));
   164 		lua_pushboolean (L, lm_message_node_get_raw_mode (node));
   165 	return 1;
   165 	return 1;
   166 }
   166 }
   167 
   167 
   168 /// message_node:attribute
   168 /// message_node:attribute
   169 /// Gets or sets value of node attribute with a given name.
   169 /// Gets or sets value of node attribute with a given name.
   170 /// A: string (name), string (optional value)
   170 /// A: string (name), string (optional value)
   171 /// R: string (when called with one aprgument) or lm message node object
   171 /// R: string (when called with one aprgument) or lm message node object
   172 static int llm_message_node_attribute (lua_State *L)
   172 int llm_message_node_attribute (lua_State *L)
   173 {
   173 {
   174 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
   174 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   175 	const char *name = luaL_checkstring (L, 2);
   175 	const char *name = luaL_checkstring (L, 2);
   176 	if (lua_gettop (L) > 2) { // Set
   176 	if (lua_gettop (L) > 2) { // Set
   177 		lm_message_node_set_attribute (object->message_node, name, luaL_checkstring (L, 3));
   177 		lm_message_node_set_attribute (node, name, luaL_checkstring (L, 3));
   178 		lua_pop (L, 2);
   178 		lua_pop (L, 2);
   179 	} else // Get
   179 	} else // Get
   180 		lua_pushstring (L, lm_message_node_get_attribute (object->message_node, name));
   180 		lua_pushstring (L, lm_message_node_get_attribute (node, name));
   181 	return 1;
   181 	return 1;
   182 }
   182 }
   183 
   183 
   184 /// message_node:xml
   184 /// message_node:xml
   185 /// Returns node representation in xml.
   185 /// Returns node representation in xml.
   186 /// R: string
   186 /// R: string
   187 static int llm_message_node_xml (lua_State *L)
   187 int llm_message_node_xml (lua_State *L)
   188 {
   188 {
   189 	llm_message_node_t *object = luaL_checklm_message_node (L, 1);
   189 	LmMessageNode *node = luaL_checkLmMessageNode (L, 1);
   190 	lua_pushstring (L, lm_message_node_to_string (object->message_node));
   190 	lua_pushstring (L, lm_message_node_to_string (node));
   191 	return 1;
   191 	return 1;
   192 }
   192 }
   193 
   193 
   194 /// message_node:pointer
   194 /// message_node:pointer
   195 /// Returns pointer to underlying C structure.
   195 /// Returns pointer to underlying C structure.