xmllite/reader: Return qualified names for attributes.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
3fe5f25b17
commit
ce84b20554
|
@ -229,6 +229,7 @@ struct attribute
|
|||
struct list entry;
|
||||
strval prefix;
|
||||
strval localname;
|
||||
strval qname;
|
||||
strval value;
|
||||
};
|
||||
|
||||
|
@ -386,7 +387,8 @@ static void reader_clear_attrs(xmlreader *reader)
|
|||
|
||||
/* attribute data holds pointers to buffer data, so buffer shrink is not possible
|
||||
while we are on a node with attributes */
|
||||
static HRESULT reader_add_attr(xmlreader *reader, strval *prefix, strval *localname, strval *value)
|
||||
static HRESULT reader_add_attr(xmlreader *reader, strval *prefix, strval *localname, strval *qname,
|
||||
strval *value)
|
||||
{
|
||||
struct attribute *attr;
|
||||
|
||||
|
@ -398,6 +400,7 @@ static HRESULT reader_add_attr(xmlreader *reader, strval *prefix, strval *localn
|
|||
else
|
||||
memset(&attr->prefix, 0, sizeof(attr->prefix));
|
||||
attr->localname = *localname;
|
||||
attr->qname = qname ? *qname : *localname;
|
||||
attr->value = *value;
|
||||
list_add_tail(&reader->attrs, &attr->entry);
|
||||
reader->attr_count++;
|
||||
|
@ -1150,7 +1153,7 @@ static HRESULT reader_parse_versioninfo(xmlreader *reader)
|
|||
/* skip "'"|'"' */
|
||||
reader_skipn(reader, 1);
|
||||
|
||||
return reader_add_attr(reader, NULL, &name, &val);
|
||||
return reader_add_attr(reader, NULL, &name, NULL, &val);
|
||||
}
|
||||
|
||||
/* ([A-Za-z0-9._] | '-') */
|
||||
|
@ -1226,7 +1229,7 @@ static HRESULT reader_parse_encdecl(xmlreader *reader)
|
|||
/* skip "'"|'"' */
|
||||
reader_skipn(reader, 1);
|
||||
|
||||
return reader_add_attr(reader, NULL, &name, &val);
|
||||
return reader_add_attr(reader, NULL, &name, NULL, &val);
|
||||
}
|
||||
|
||||
/* [32] SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) */
|
||||
|
@ -1268,7 +1271,7 @@ static HRESULT reader_parse_sddecl(xmlreader *reader)
|
|||
/* skip "'"|'"' */
|
||||
reader_skipn(reader, 1);
|
||||
|
||||
return reader_add_attr(reader, NULL, &name, &val);
|
||||
return reader_add_attr(reader, NULL, &name, NULL, &val);
|
||||
}
|
||||
|
||||
/* [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' */
|
||||
|
@ -1737,7 +1740,7 @@ static HRESULT reader_parse_externalid(xmlreader *reader)
|
|||
if (FAILED(hr)) return hr;
|
||||
|
||||
reader_init_cstrvalue(publicW, strlenW(publicW), &name);
|
||||
hr = reader_add_attr(reader, NULL, &name, &pub);
|
||||
hr = reader_add_attr(reader, NULL, &name, NULL, &pub);
|
||||
if (FAILED(hr)) return hr;
|
||||
|
||||
cnt = reader_skipspaces(reader);
|
||||
|
@ -1748,7 +1751,7 @@ static HRESULT reader_parse_externalid(xmlreader *reader)
|
|||
if (FAILED(hr)) return S_OK;
|
||||
|
||||
reader_init_cstrvalue(systemW, strlenW(systemW), &name);
|
||||
hr = reader_add_attr(reader, NULL, &name, &sys);
|
||||
hr = reader_add_attr(reader, NULL, &name, NULL, &sys);
|
||||
if (FAILED(hr)) return hr;
|
||||
|
||||
return S_OK;
|
||||
|
@ -1762,7 +1765,7 @@ static HRESULT reader_parse_externalid(xmlreader *reader)
|
|||
if (FAILED(hr)) return hr;
|
||||
|
||||
reader_init_cstrvalue(systemW, strlenW(systemW), &name);
|
||||
return reader_add_attr(reader, NULL, &name, &sys);
|
||||
return reader_add_attr(reader, NULL, &name, NULL, &sys);
|
||||
}
|
||||
|
||||
return S_FALSE;
|
||||
|
@ -2160,7 +2163,7 @@ static HRESULT reader_parse_attribute(xmlreader *reader)
|
|||
reader_push_ns(reader, nsdef ? &strval_xmlns : &local, &value, nsdef);
|
||||
|
||||
TRACE("%s=%s\n", debug_strval(reader, &local), debug_strval(reader, &value));
|
||||
return reader_add_attr(reader, &prefix, &local, &value);
|
||||
return reader_add_attr(reader, &prefix, &local, &qname, &value);
|
||||
}
|
||||
|
||||
/* [12 NS] STag ::= '<' QName (S Attribute)* S? '>'
|
||||
|
@ -2829,6 +2832,7 @@ static HRESULT reader_move_to_first_attribute(xmlreader *reader)
|
|||
reader->attr = LIST_ENTRY(list_head(&reader->attrs), struct attribute, entry);
|
||||
reader_set_strvalue(reader, StringValue_Prefix, &reader->attr->prefix);
|
||||
reader_set_strvalue(reader, StringValue_LocalName, &reader->attr->localname);
|
||||
reader_set_strvalue(reader, StringValue_QualifiedName, &reader->attr->qname);
|
||||
reader_set_strvalue(reader, StringValue_Value, &reader->attr->value);
|
||||
|
||||
return S_OK;
|
||||
|
@ -2861,6 +2865,7 @@ static HRESULT WINAPI xmlreader_MoveToNextAttribute(IXmlReader* iface)
|
|||
This->attr = LIST_ENTRY(next, struct attribute, entry);
|
||||
reader_set_strvalue(This, StringValue_Prefix, &This->attr->prefix);
|
||||
reader_set_strvalue(This, StringValue_LocalName, &This->attr->localname);
|
||||
reader_set_strvalue(This, StringValue_QualifiedName, &This->attr->qname);
|
||||
reader_set_strvalue(This, StringValue_Value, &This->attr->value);
|
||||
}
|
||||
|
||||
|
|
|
@ -1275,9 +1275,10 @@ todo_wine {
|
|||
str = NULL;
|
||||
hr = IXmlReader_GetQualifiedName(reader, &str, &len);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
todo_wine {
|
||||
ok(len == lstrlenW(dtdnameW), "got %u\n", len);
|
||||
ok(!lstrcmpW(str, dtdnameW), "got %s\n", wine_dbgstr_w(str));
|
||||
|
||||
}
|
||||
IStream_Release(stream);
|
||||
IXmlReader_Release(reader);
|
||||
}
|
||||
|
@ -1355,9 +1356,10 @@ todo_wine {
|
|||
str = NULL;
|
||||
hr = IXmlReader_GetQualifiedName(reader, &str, &len);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
todo_wine {
|
||||
ok(len == lstrlenW(dtdnameW), "got %u\n", len);
|
||||
ok(!lstrcmpW(str, dtdnameW), "got %s\n", wine_dbgstr_w(str));
|
||||
|
||||
}
|
||||
type = XmlNodeType_None;
|
||||
hr = IXmlReader_Read(reader, &type);
|
||||
ok(hr == S_OK, "got 0x%8x\n", hr);
|
||||
|
@ -1925,12 +1927,11 @@ static void test_read_attribute(void)
|
|||
str = NULL;
|
||||
hr = IXmlReader_GetQualifiedName(reader, &str, &len);
|
||||
ok(hr == S_OK, "got 0x%08x\n", hr);
|
||||
todo_wine {
|
||||
ok(len == strlen(test->name), "got %u\n", len);
|
||||
str_exp = a2w(test->name);
|
||||
ok(!lstrcmpW(str, str_exp), "got %s\n", wine_dbgstr_w(str));
|
||||
free_str(str_exp);
|
||||
}
|
||||
|
||||
/* value */
|
||||
len = 1;
|
||||
str = NULL;
|
||||
|
|
Loading…
Reference in New Issue