SignalInfo *signal;
PropertyInfo *property;
ArgInfo *arg;
+ gboolean in_annotation;
};
Parser*
parser->method ||
parser->signal ||
parser->property ||
- parser->arg)
+ parser->arg ||
+ parser->in_annotation)
{
g_set_error (error, G_MARKUP_ERROR,
G_MARKUP_ERROR_PARSE,
GError **error)
{
const char *name;
- const char *c_name;
InterfaceInfo *iface;
NodeInfo *top;
parser->signal ||
parser->property ||
parser->arg ||
+ parser->in_annotation ||
(parser->node_stack == NULL))
{
g_set_error (error, G_MARKUP_ERROR,
if (!locate_attributes (element_name, attribute_names,
attribute_values, error,
"name", &name,
- "c_name", &c_name,
NULL))
return FALSE;
top = parser->node_stack->data;
iface = interface_info_new (name);
- if (c_name)
- interface_info_set_binding_name (iface, "C", c_name);
node_info_add_interface (top, iface);
interface_info_unref (iface);
GError **error)
{
const char *name;
- const char *c_name;
MethodInfo *method;
NodeInfo *top;
parser->method ||
parser->signal ||
parser->property ||
+ parser->in_annotation ||
parser->arg)
{
g_set_error (error, G_MARKUP_ERROR,
if (!locate_attributes (element_name, attribute_names,
attribute_values, error,
"name", &name,
- "c_name", &c_name,
NULL))
return FALSE;
top = parser->node_stack->data;
method = method_info_new (name);
- if (c_name)
- method_info_set_binding_name (method, "C", c_name);
interface_info_add_method (parser->interface, method);
method_info_unref (method);
parser->signal ||
parser->method ||
parser->property ||
+ parser->in_annotation ||
parser->arg)
{
g_set_error (error, G_MARKUP_ERROR,
parser->signal ||
parser->method ||
parser->property ||
+ parser->in_annotation ||
parser->arg)
{
g_set_error (error, G_MARKUP_ERROR,
if (!(parser->method || parser->signal) ||
parser->node_stack == NULL ||
parser->property ||
+ parser->in_annotation ||
parser->arg)
{
g_set_error (error, G_MARKUP_ERROR,
return TRUE;
}
+static gboolean
+parse_annotation (Parser *parser,
+ const char *element_name,
+ const char **attribute_names,
+ const char **attribute_values,
+ GError **error)
+{
+ const char *name;
+ const char *value;
+
+ if (!(parser->method || parser->interface || parser->arg) ||
+ parser->node_stack == NULL ||
+ parser->signal ||
+ parser->in_annotation)
+ {
+ g_set_error (error, G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
+ _("Can't put <%s> element here"),
+ element_name);
+ return FALSE;
+ }
+
+ name = NULL;
+ if (!locate_attributes (element_name, attribute_names,
+ attribute_values, error,
+ "name", &name,
+ "value", &value,
+ NULL))
+ return FALSE;
+
+ /* name can be null for args */
+
+ if (name == NULL)
+ {
+ g_set_error (error, G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
+ _("\"%s\" attribute required on <%s> element "),
+ "name", element_name);
+ return FALSE;
+ }
+ if (value == NULL)
+ {
+ g_set_error (error, G_MARKUP_ERROR,
+ G_MARKUP_ERROR_PARSE,
+ _("\"%s\" attribute required on <%s> element "),
+ "value", element_name);
+ return FALSE;
+ }
+
+ if (parser->method)
+ method_info_add_annotation (parser->method, name, value);
+ else if (parser->interface)
+ interface_info_add_annotation (parser->interface, name, value);
+ else
+ g_assert_not_reached ();
+
+ parser->in_annotation = TRUE;
+
+ return TRUE;
+}
+
gboolean
parser_start_element (Parser *parser,
const char *element_name,
attribute_values, error))
return FALSE;
}
+ else if (ELEMENT_IS ("annotation"))
+ {
+ if (!parse_annotation (parser, element_name, attribute_names,
+ attribute_values, error))
+ return FALSE;
+ }
else
{
g_set_error (error, G_MARKUP_ERROR,
{
parser->arg = NULL;
}
+ else if (ELEMENT_IS ("annotation"))
+ {
+ parser->in_annotation = FALSE;
+ }
else if (ELEMENT_IS ("node"))
{
NodeInfo *top;