1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #include "nsSAXAttributes.h"
7
NS_IMPL_ISUPPORTS(nsSAXAttributes,nsISAXAttributes)8 NS_IMPL_ISUPPORTS(nsSAXAttributes, nsISAXAttributes)
9
10 NS_IMETHODIMP
11 nsSAXAttributes::GetIndexFromName(const nsAString &aURI,
12 const nsAString &aLocalName,
13 int32_t *aResult) {
14 int32_t len = mAttrs.Length();
15 int32_t i;
16 for (i = 0; i < len; ++i) {
17 const SAXAttr &att = mAttrs[i];
18 if (att.localName.Equals(aLocalName) && att.uri.Equals(aURI)) {
19 *aResult = i;
20 return NS_OK;
21 }
22 }
23 *aResult = -1;
24
25 return NS_OK;
26 }
27
28 NS_IMETHODIMP
GetIndexFromQName(const nsAString & aQName,int32_t * aResult)29 nsSAXAttributes::GetIndexFromQName(const nsAString &aQName, int32_t *aResult) {
30 int32_t len = mAttrs.Length();
31 int32_t i;
32 for (i = 0; i < len; ++i) {
33 const SAXAttr &att = mAttrs[i];
34 if (att.qName.Equals(aQName)) {
35 *aResult = i;
36 return NS_OK;
37 }
38 }
39 *aResult = -1;
40
41 return NS_OK;
42 }
43
44 NS_IMETHODIMP
GetLength(int32_t * aResult)45 nsSAXAttributes::GetLength(int32_t *aResult) {
46 *aResult = mAttrs.Length();
47 return NS_OK;
48 }
49
50 NS_IMETHODIMP
GetLocalName(uint32_t aIndex,nsAString & aResult)51 nsSAXAttributes::GetLocalName(uint32_t aIndex, nsAString &aResult) {
52 uint32_t len = mAttrs.Length();
53 if (aIndex >= len) {
54 aResult.SetIsVoid(true);
55 } else {
56 const SAXAttr &att = mAttrs[aIndex];
57 aResult = att.localName;
58 }
59
60 return NS_OK;
61 }
62
63 NS_IMETHODIMP
GetQName(uint32_t aIndex,nsAString & aResult)64 nsSAXAttributes::GetQName(uint32_t aIndex, nsAString &aResult) {
65 uint32_t len = mAttrs.Length();
66 if (aIndex >= len) {
67 aResult.SetIsVoid(true);
68 } else {
69 const SAXAttr &att = mAttrs[aIndex];
70 aResult = att.qName;
71 }
72
73 return NS_OK;
74 }
75
76 NS_IMETHODIMP
GetType(uint32_t aIndex,nsAString & aResult)77 nsSAXAttributes::GetType(uint32_t aIndex, nsAString &aResult) {
78 uint32_t len = mAttrs.Length();
79 if (aIndex >= len) {
80 aResult.SetIsVoid(true);
81 } else {
82 const SAXAttr &att = mAttrs[aIndex];
83 aResult = att.type;
84 }
85
86 return NS_OK;
87 }
88
89 NS_IMETHODIMP
GetTypeFromName(const nsAString & aURI,const nsAString & aLocalName,nsAString & aResult)90 nsSAXAttributes::GetTypeFromName(const nsAString &aURI,
91 const nsAString &aLocalName,
92 nsAString &aResult) {
93 int32_t index = -1;
94 GetIndexFromName(aURI, aLocalName, &index);
95 if (index >= 0) {
96 aResult = mAttrs[index].type;
97 } else {
98 aResult.SetIsVoid(true);
99 }
100
101 return NS_OK;
102 }
103
104 NS_IMETHODIMP
GetTypeFromQName(const nsAString & aQName,nsAString & aResult)105 nsSAXAttributes::GetTypeFromQName(const nsAString &aQName, nsAString &aResult) {
106 int32_t index = -1;
107 GetIndexFromQName(aQName, &index);
108 if (index >= 0) {
109 aResult = mAttrs[index].type;
110 } else {
111 aResult.SetIsVoid(true);
112 }
113
114 return NS_OK;
115 }
116
117 NS_IMETHODIMP
GetURI(uint32_t aIndex,nsAString & aResult)118 nsSAXAttributes::GetURI(uint32_t aIndex, nsAString &aResult) {
119 uint32_t len = mAttrs.Length();
120 if (aIndex >= len) {
121 aResult.SetIsVoid(true);
122 } else {
123 const SAXAttr &att = mAttrs[aIndex];
124 aResult = att.uri;
125 }
126
127 return NS_OK;
128 }
129
130 NS_IMETHODIMP
GetValue(uint32_t aIndex,nsAString & aResult)131 nsSAXAttributes::GetValue(uint32_t aIndex, nsAString &aResult) {
132 uint32_t len = mAttrs.Length();
133 if (aIndex >= len) {
134 aResult.SetIsVoid(true);
135 } else {
136 const SAXAttr &att = mAttrs[aIndex];
137 aResult = att.value;
138 }
139
140 return NS_OK;
141 }
142
143 NS_IMETHODIMP
GetValueFromName(const nsAString & aURI,const nsAString & aLocalName,nsAString & aResult)144 nsSAXAttributes::GetValueFromName(const nsAString &aURI,
145 const nsAString &aLocalName,
146 nsAString &aResult) {
147 int32_t index = -1;
148 GetIndexFromName(aURI, aLocalName, &index);
149 if (index >= 0) {
150 aResult = mAttrs[index].value;
151 } else {
152 aResult.SetIsVoid(true);
153 }
154
155 return NS_OK;
156 }
157
158 NS_IMETHODIMP
GetValueFromQName(const nsAString & aQName,nsAString & aResult)159 nsSAXAttributes::GetValueFromQName(const nsAString &aQName,
160 nsAString &aResult) {
161 int32_t index = -1;
162 GetIndexFromQName(aQName, &index);
163 if (index >= 0) {
164 aResult = mAttrs[index].value;
165 } else {
166 aResult.SetIsVoid(true);
167 }
168
169 return NS_OK;
170 }
171
AddAttribute(const nsAString & aURI,const nsAString & aLocalName,const nsAString & aQName,const nsAString & aType,const nsAString & aValue)172 nsresult nsSAXAttributes::AddAttribute(const nsAString &aURI,
173 const nsAString &aLocalName,
174 const nsAString &aQName,
175 const nsAString &aType,
176 const nsAString &aValue) {
177 SAXAttr *att = mAttrs.AppendElement();
178 if (!att) {
179 return NS_ERROR_OUT_OF_MEMORY;
180 }
181
182 att->uri = aURI;
183 att->localName = aLocalName;
184 att->qName = aQName;
185 att->type = aType;
186 att->value = aValue;
187
188 return NS_OK;
189 }
190