1 |
|
2006-02-14 Wakaba <wakaba@suika.fam.cx> |
2 |
|
|
3 |
|
* XMLParser.dis: The |xp:wf-parsed-entity| and the |xp:wf-no-recursion| |
4 |
|
WFC errors are implemented. Reports a |xp:wf-syntax-error| |
5 |
|
if a parameter entity declaration contains |NDATA| keyword. |
6 |
|
(setEmptyEntityState): Set |name| attribute. |
7 |
|
|
8 |
|
* Tree.dis (createEntityReference): Don't enter into inifinite |
9 |
|
loop even if entity replacement tree contains recursive |
10 |
|
reference directly or indirectly. |
11 |
|
|
12 |
|
2006-02-13 Wakaba <wakaba@suika.fam.cx> |
13 |
|
|
14 |
|
* XMLParser.dis (_GeneralEntityReferenceAE): The |xp:wf-entity-declared| |
15 |
|
WFC error is implemented. |
16 |
|
|
17 |
|
2006-02-13 Wakaba <wakaba@suika.fam.cx> |
18 |
|
|
19 |
|
* XMLParser.dis: Set |cfg:clone-entity-reference-subtree| |
20 |
|
configuration parameter |true| during tree construction |
21 |
|
to ensure default attribute value is cloned as is |
22 |
|
including entity reference subtree. |
23 |
|
|
24 |
|
* Tree.dis (cfg:clone-entity-reference-subtree): New configuration |
25 |
|
parameter. |
26 |
|
(Node.cloneNode): The |cfg:clone-entity-reference-subtree| |
27 |
|
configuration parameter support is added. |
28 |
|
|
29 |
|
2006-02-12 Wakaba <wakaba@suika.fam.cx> |
30 |
|
|
31 |
|
* XMLParser.dis (parseString): General |Entity| replacement |
32 |
|
tree is not constructed because of a typo. Clears |EntityReference| |
33 |
|
content before constructing |Entity| replacement tree. |
34 |
|
The |xp:wf-entity-declared| well-formedness constraint |
35 |
|
for entity references in attribute value literal is implemented. |
36 |
|
|
37 |
|
2006-02-11 Wakaba <wakaba@suika.fam.cx> |
38 |
|
|
39 |
|
* XMLParser.dis: |xp:wf-entity-declared| well-formedness |
40 |
|
constaraint for entity references that appear in |
41 |
|
content of elements is implemented. Set |EntityReference.isExpanded| |
42 |
|
attribute. |
43 |
|
(getEmptyEntityState): New code. |
44 |
|
|
45 |
|
* XDoctype.dis (DocumentTypeDefinition.nodeType): Duplicate |
46 |
|
definition is removed. |
47 |
|
|
48 |
|
* DOMXML.dis (Entity.isExternallyDeclared): New attribute. |
49 |
|
(EntityReference.isExpanded): Setter is added. |
50 |
|
|
51 |
|
2006-02-11 Wakaba <wakaba@suika.fam.cx> |
52 |
|
|
53 |
|
* XMLParser.dis: |xp:wf-no-lt-in-attribute-values| |
54 |
|
and |xp:wf-no-external-entity-references| well-formedness |
55 |
|
constraints are implemented. |
56 |
|
|
57 |
|
2006-02-11 Wakaba <wakaba@suika.fam.cx> |
58 |
|
|
59 |
|
* XMLParser.dis ($self->{has_error}): Removed. |
60 |
|
(parseString): Don't throw |DOMLS:PARSE_ERR| if all fatal |
61 |
|
errors (including well-formedness constraint errors) are |
62 |
|
traped by the error handler. |
63 |
|
(PubidLiteral, SystemLiteral): Set |publicId| or |systemId| |
64 |
|
attribute of the node. Reports an error if |publidLiteral| |
65 |
|
contains a non-|pubidChar|. |
66 |
|
|
67 |
|
* XDoctype.dis (d:DeclFeature30): New feature (|fe:XDoctypeDeclaration| |
68 |
|
version |3.0|). |
69 |
|
(ManakaiDOMDocumentTypeDefinition): The class no longer |
70 |
|
inherits |x:ManakaiDOMDocumentType| class. Instead, |
71 |
|
it inherits |d:ManakaiDOMDocumentTypeDeclaration| |
72 |
|
and |t:ManakaiDOMNOde| classes. It still implements |x:DocumentType| |
73 |
|
interface (except unimplemented |notations| and |internalSubset| |
74 |
|
attributes). |
75 |
|
(ManakaiDOMDocumentTypeDefinition.entities): New attribute |
76 |
|
for compatibility with |x:DocumentType| interface. |
77 |
|
(ManakaiDOMDocumentTypeDefinition.lookupPrefix): New method. |
78 |
|
(ManakaiDOMDocumentTypeDefinition.getFeature): New method. |
79 |
|
(ManakaiDOMDocumentTypeDefinition.nodeType, |
80 |
|
ManakaiDOMDocumentTypeDefinition.textContent): New attributes. |
81 |
|
(DocumentTypeDeclaration): New interface. |
82 |
|
|
83 |
|
* Tree.dis (Node/@f:implements): Typos fixed. |
84 |
|
(Node.MUErrorHandler): Missing |last A| statement is added. |
85 |
|
(createDocumentType): Throws an exception if |qualifiedName| |
86 |
|
is illegal. Calls |DocumentTypeDefinition.newObject| |
87 |
|
instead of obsolete |DocumentType.newObject|. |
88 |
|
|
89 |
|
* DOMXML.dis (DocumentType.name, DocumentType.entities, |
90 |
|
DocumentType.publicId, DocumentType.systemId, |
91 |
|
DocumentType.lookupPrefix, DocumentType.getFeature): Now they are defined |
92 |
|
as clones of similar attributes or methods |
93 |
|
in |MDOM:XDoctype| module. |
94 |
|
(DocumentType.newObject): Removed (use |DocumentTypeDefinition.newObject| |
95 |
|
instead). |
96 |
|
(DocumentType.childNodes): Removed (|Node.childNodes| definition |
97 |
|
is used). |
98 |
|
|
99 |
|
2006-02-10 Wakaba <wakaba@suika.fam.cx> |
100 |
|
|
101 |
|
* XMLParser.dis (xp:fatal-xml11-end-of-line-in-xml-declaration): New |
102 |
|
fatal error. |
103 |
|
|
104 |
|
2006-02-09 Wakaba <wakaba@suika.fam.cx> |
105 |
|
|
106 |
|
* XMLParser.dis (CommentDeclaration): |STRING| is now |
107 |
|
defined as a |?default-token|. |
108 |
|
(XMLTests): Tests for |Char - RestrictedChar| matchness, |
109 |
|
comment declarations, cdata sections, and |MSE| in |content| |
110 |
|
added. |
111 |
|
(XMLTests/PerlDef): Bug fixed: |pop| -> |shift|. |
112 |
|
(get-location-from-token): |$token->{location_d}| |
113 |
|
for |?default-token| column counting support added. |
114 |
|
|
115 |
|
* DOMCore.dis (c:erred): It is now a |DISCore:OrderedList| property. |
116 |
|
|
117 |
|
2006-02-08 Wakaba <wakaba@suika.fam.cx> |
118 |
|
|
119 |
|
* Tree.dis (createProcessingInstruction): Don't |
120 |
|
throw |MDOMX:MDOM_BAD_NAME| exception if |Document.strictErrorChecking| |
121 |
|
is |false|. |
122 |
|
|
123 |
|
* XMLParser.dis (parseString): Initializes |$self->{location}|. |
124 |
|
It enables improved error position report. |
125 |
|
(XDO): It now includes |S+| following target name |xml| as |
126 |
|
part of the token. (PI with target starting with |xml| |
127 |
|
was unable to be placed at the beginning of the document entity.) |
128 |
|
(_ProcessingInstruction, _ProcessingInstructionDTD): Creates |
129 |
|
a processing instruction node with |#INVALID| node name |
130 |
|
if target name is not given and recovered from the error. |
131 |
|
(S): Variable |$s| added. |
132 |
|
(XMLTests): Tests for XML declarations and processing |
133 |
|
instructions are added. Prints error type name if unexpected |
134 |
|
error with severity of error or fatal error has been reported. |
135 |
|
Catch unexpected exceptions thrown in parser (different |
136 |
|
from |LSException|), prints its message, and invoke |$test->not_ok| |
137 |
|
for the ease of testing. |
138 |
|
(xp:get-location-from-token): Location values now take |$self->{char}| |
139 |
|
stack into acount. |
140 |
|
|
141 |
|
2006-02-08 Wakaba <wakaba@suika.fam.cx> |
142 |
|
|
143 |
|
* XMLParser.dis (shiftChar): Line and column number counting |
144 |
|
is fixed. Although the DOM Level 3 Core specification |
145 |
|
is unclear about whether the first number is zero or one, |
146 |
|
in most programs the first line is "one" and |
147 |
|
the first column is "one", manakai follows the practice. |
148 |
|
(_XMLDeclaration): Don't set |xmlStandalone| value |
149 |
|
if |standalone| pseudo-attribute value is |no|. XML declaration |
150 |
|
tests (successful cases) added. |
151 |
|
(xp:get-location-from-token): Sets |lineNumber| and |columnNumber| |
152 |
|
properties. |
153 |
|
|
154 |
|
2006-02-08 Wakaba <wakaba@suika.fam.cx> |
155 |
|
|
156 |
|
* XMLParser.dis (XMLTests): Tests for |c:erred| is supported. |
157 |
|
|
158 |
|
2006-02-06 Wakaba <wakaba@suika.fam.cx> |
159 |
|
|
160 |
|
* DOMCore.dis (c:erred): New property. |
161 |
|
(c:DOMErrorType): It should have been a subset |
162 |
|
of |ecore:AnyErrorCode|. |
163 |
|
|
164 |
|
* XMLParser.dis (XMLTests): Empty input tests added. |
165 |
|
|
166 |
|
2006-01-30 Wakaba <wakaba@suika.fam.cx> |
167 |
|
|
168 |
|
* XDoctype.dis (d:Feature): New canonical feature |
169 |
|
name |fe:XDoctype| is added. |
170 |
|
|
171 |
|
* XMLParser.dis: Predefined general entity references |
172 |
|
are implemented. Creates |Entity| nodes from general entities |
173 |
|
declared in internal subset. |Entity| nodes created from internal |
174 |
|
general parsed entities now have replacement tree. |
175 |
|
Sets |cfg:entity-reference-read-only| flag off during |
176 |
|
the tree generation. Some parsing rules use |$self->{doc}| |
177 |
|
rather than |$doc| parameter. Similarly, |$self->{docx}| (document |
178 |
|
node with |fe:XDoctype| feature) and |$self->{dtdef}| are |
179 |
|
introduced. General entity references in attribute value literal |
180 |
|
are supported. |
181 |
|
|
182 |
|
2006-01-29 Wakaba <wakaba@suika.fam.cx> |
183 |
|
|
184 |
|
* Tree.dis (ManakaiDOM:entity-reference-read-only): Configuration |
185 |
|
parameter name changed to |cfg:entity-reference-read-only|. |
186 |
|
(createEntityReference): Set |c:read-only| flag of |
187 |
|
the created entity reference, too. |
188 |
|
|
189 |
|
* DOMLS.dis (min): New canonical feature name |fe:Min| added. |
190 |
|
|
191 |
|
* GenericLS.dis: Don't refer |DOMMain:DOMString|; use |f:MIString| |
192 |
|
from |DOMFeature| module instead. Use |idl:Object| |
193 |
|
instead of |DOMMain:DOMObject| as well. |
194 |
|
(Generic): New canonical feature name |fe:GenericLS| added. |
195 |
|
(DOMLS:ParserRole, DOMLS:SerializerRole): Their |
196 |
|
canonical name changed to |gls:ParserRole| and |gls:SerializerRole| |
197 |
|
respectively. |
198 |
|
|
199 |
|
* DOMXML.dis (entities, notations): Perl code removed. |
200 |
|
It will be reimplemented using |DocumentTypeDefinition| |
201 |
|
class from |XDoctype| module. |
202 |
|
|
203 |
|
* DOMFeature.dis, DOMCore.dis, DOMMain.dis, DOMXML.dis, |
204 |
|
Tree.dis, DOMLS.dis, GenericLS.dis, ManakaiDOMLS2003.dis, |
205 |
|
SimpleLS.dis: Cleaned up unused definitions. |
206 |
|
|
207 |
|
* DOMCore.dis, DOMLS.dis (CParam): Definitions |
208 |
|
for LS module moved from |DOMCore| module to |DOMLS| module. |
209 |
|
This change makes |DOMCore| to |DOMLS| dependency removed. |
210 |
|
|
211 |
|
* .cvsignore (.html.pm, .ls.pm): Removed. |
212 |
|
|
213 |
|
* Makefile (.html.pm, .ls.pm): Removed. |
214 |
|
(feature.dae): Include |GenericLS| module. |
215 |
|
(core.dae): Don't include |DOMLS| and |GenericLS| module. |
216 |
|
(ls.dae): Include |DOMLS| module. |
217 |
|
|
218 |
|
2006-01-29 Wakaba <wakaba@suika.fam.cx> |
219 |
|
|
220 |
|
* XMLParser.dis: Tests on default attributes and their |specified| |
221 |
|
attribute are added. |
222 |
|
|
223 |
|
* XDoctype.dis (createGeneralEntity): New method. |
224 |
|
(generalEntities): New attribute. |
225 |
|
(getGeneralEntityNode, setGeneralEntityNode): New methods. |
226 |
|
|
227 |
|
* Tree.dis (ManakaiDOMEntities): Removed. |
228 |
|
(ManakaiDOMEntityMap): New class. |
229 |
|
(ManakaiDOM:entity-reference-read-only): New configuration parameter. |
230 |
|
(createEntityReference): If there is a corresponding |Entity| |
231 |
|
node in the document type definition, then copies its |
232 |
|
subtree. |
233 |
|
|
234 |
|
* DOMXML.dis (Entity): Documentation updated. |
235 |
|
(publicId, systemId, notationName, xmlEncoding, |
236 |
|
xmlVersion): These attributes are now settable |
237 |
|
if |ManakaiDOM:ManakaiDOMLatest| mode. |
238 |
|
(hasReplacementTree): New attribute for |ManakaiDOM:ManakaiDOMLatest| |
239 |
|
mode. |
240 |
|
(ownerDocumentTypeDefinition): New attribute |
241 |
|
for |ManakaiDOM:ManakaiDOMLatest| mode. |
242 |
|
(isExpanded): New attribute for |ManakaiDOM:ManakaiDOMLatest| mode. |
243 |
|
|
244 |
|
2006-01-28 Wakaba <wakaba@suika.fam.cx> |
245 |
|
|
246 |
|
* DOMCore.dis (ErrDef): Missing |ecore:textFormatter| property added. |
247 |
|
|
248 |
|
* DOMMain.dis (ErrDef): Missing |ecore:textFormatter| property added. |
249 |
|
|
250 |
|
* Tree.dis (ErrDef): Missing |ecore:textFormatter| property added. |
251 |
|
(ManakaiDOMAttributes): Removed. |
252 |
|
(ManakaiDOMAttrMap): New class. |
253 |
|
(ManakaiDOMAttrMapArray): New class. |
254 |
|
(namespaceURI): Bug to return a string representation |
255 |
|
of a reference to the namespace URI string is fixed. |
256 |
|
(selectAttrNodeObject, selectAttrNodeObjectNodeNS): Reimplemented. |
257 |
|
(removeAttribute, removeAttributeNS): DTD default attributes |
258 |
|
are supported. Don't throw |NO_MODIFICATION_ALLOWED_ERR| |
259 |
|
if there is no attribute node. |
260 |
|
(createElement, createElementNS): DTD default attributes are supported. |
261 |
|
(setAttributeNode): Reimplemented. |
262 |
|
|
263 |
|
2006-01-27 Wakaba <wakaba@suika.fam.cx> |
264 |
|
|
265 |
|
* DOMCore.dis (ManakaiDOMDTDTypeInfo): New class. |
266 |
|
|
267 |
|
* Tree.dis (STORESIZE): Index bound bug fixed. |
268 |
|
(Attr.value): Redefined to consist with |AttributeDefinition.nodeValue|. |
269 |
|
(schemaTypeInfo): Implemented for XML DTD. |
270 |
|
(isId): Returns |true| if [attribute type] is |ID|. |
271 |
|
(setAttribute, setAttributeNS): Sets [attribute type] |
272 |
|
of the newly created |Attr| node (if any) when attribute |
273 |
|
definition is available. |
274 |
|
(doctype, documentElement): Reimplemented with tests. |
275 |
|
|
276 |
|
* XMLParser.dis: Sets [attribute type] information |
277 |
|
to created |Attr| nodes. Normalize namespace URIs |
278 |
|
when such information are available (unlikely but legal). |
279 |
|
(_HexadecimalCharacterReference): Number to character |
280 |
|
convertion bug fixed. |
281 |
|
(_DocumentTypeDeclaration): Sets |schema-type| |
282 |
|
configuration parameter to XML DTD URI. |
283 |
|
|
284 |
|
2006-01-26 Wakaba <wakaba@suika.fam.cx> |
285 |
|
|
286 |
|
* XMLParser.dis (_AttlistDeclaration): Now it can generate |
287 |
|
attribute definition nodes. |
288 |
|
|
289 |
|
* XDoctype.dis: |UNKNOWN_ATTR| is renamed as |NO_TYPE_ATTR| |
290 |
|
and another |UNKNOWN_ATTR| constant is introduced |
291 |
|
for consistency with XML Infoset. |
292 |
|
|
293 |
|
* DOMCore.dis (TypeInfo): Documentation updated. |
294 |
|
|
295 |
|
2006-01-26 Wakaba <wakaba@suika.fam.cx> |
296 |
|
|
297 |
|
* XDoctype.dis: A bug in test code fixed. |
298 |
|
|
299 |
|
* Tree.dis (NamedNodeMap): Element type or attribute |
300 |
|
definition named node maps now can be dereferenced |
301 |
|
as if they are array or hash references. |
302 |
|
(removeNamedItem, item, ___report_error): Implemented for element type |
303 |
|
or attribute definitions. |
304 |
|
(length): Tests added. |
305 |
|
(NamedNodeMapArray): New classes. |
306 |
|
|
307 |
|
2006-01-25 Wakaba <wakaba@suika.fam.cx> |
308 |
|
|
309 |
|
* XDoctype.dis (setElementTypeDefinitionNode, |
310 |
|
setAttributeDefinitionNode): Throws |c:INUSE_DEFINITION_ERR| |
311 |
|
if the new node is already used for another definition. |
312 |
|
(DocumentTypeDefinition, ElementTypeDefinition): Node |
313 |
|
property name was incorrect. |
314 |
|
(elementTypes, attributeDefinitions): Checks to |
315 |
|
ensure the collection is empty added. |
316 |
|
|
317 |
|
* Tree.dis: Property name typos fixed. |
318 |
|
(setNamedItem, setAttributeNode): Don't return any node |
319 |
|
if it replace itself. |
320 |
|
(c:userDeterminedId): Missing definition added. |
321 |
|
|
322 |
|
* DOMXML.dis (Notation): Missing property specification |
323 |
|
of|c:ownerDocument| as |mn:xrefnode0| is added. |
324 |
|
|
325 |
|
2006-01-23 Wakaba <wakaba@suika.fam.cx> |
326 |
|
|
327 |
|
* DOMCore.dis (Test): Missing argument added. |
328 |
|
(setNamedItem): If |DocumentType| with no |ownerDocument|, |
329 |
|
addition always fails with |WRONG_DOCUMENT_ERR|. Some |
330 |
|
error conditions were incorrect. |
331 |
|
|
332 |
|
* .cvsignore: Dummy files added. |
333 |
|
|
334 |
|
2006-01-22 Wakaba <wakaba@suika.fam.cx> |
335 |
|
|
336 |
|
* DOMCore.dis (NO_NAMED_NODE_ERR, NO_NAMED_NODE_NS_ERR, |
337 |
|
INUSE_DEFINITION_ERR, NO_NS_NAMEDNODEMAP_ERR): New error subtypes. |
338 |
|
|
339 |
|
* DOMMain.dis (ensureXMLName): Checks definesness of |$XMLVERSION| |
340 |
|
to avoid uninitialized value warning. |
341 |
|
|
342 |
|
* Tree.dis (ManakaiDOMElementTypeDefMap, ManakaiDOMAttrDefMap): New |
343 |
|
classes (work in progress). |
344 |
|
|
345 |
|
* XDoctype.dis (elementTypes, attributeDefinitions): New attributes. |
346 |
|
|
347 |
|
2006-01-22 Wakaba <wakaba@suika.fam.cx> |
348 |
|
|
349 |
|
* Tree.dis (getAttribute): Returns |null| if there |
350 |
|
is no attribute in |ManakaiDOM:DOMLatest| for compatibility |
351 |
|
with Web browser implementations. |
352 |
|
(getAttributeNS): It returned |null| if there |
353 |
|
is no attribute in any |For| unintentionally. It now |
354 |
|
returns an empty string in DOM levels less than or equals |
355 |
|
to three. |
356 |
|
|
357 |
|
* XMLParser.dis (shiftChar): Fixed not to be warned as |
358 |
|
uninitialized value or substring out of range. |
359 |
|
|
360 |
|
2006-01-21 Wakaba <wakaba@suika.fam.cx> |
361 |
|
|
362 |
|
* DOMXML.dis (DocumentType.childNodes): Removed |
363 |
|
from |ManakaiDOM:ManakaiDOMLatest| variant. |
364 |
|
|
365 |
|
* XMLParser.dis: Parsing of general internal entities implemented. |
366 |
|
(_DocumentTypeDeclaration): Appends a document type definition |
367 |
|
node to the document. |
368 |
|
(_ProcessingInstructionDTD): Appends a processing |
369 |
|
instruction node to the document type definition. |
370 |
|
(Element_): Document element could not be an |EmptyElemTag|. |
371 |
|
|
372 |
|
2006-01-21 Wakaba <wakaba@suika.fam.cx> |
373 |
|
|
374 |
|
* DOMFeature.dis (featuresParamToFeaturesHash): New block |
375 |
|
code (seprated from |InputProcessor|). Now |
376 |
|
a |features| parameter's version can be specified by |
377 |
|
an array reference that contains a set of version |
378 |
|
numbers. A test added. |
379 |
|
|
380 |
|
* XMLParser.dis: A test added. |
381 |
|
|
382 |
|
2006-01-07 Wakaba <wakaba@suika.fam.cx> |
383 |
|
|
384 |
|
* DOMCore.dis (Test): Don't invoke |DESTROY| method |
385 |
|
because it does not work with dummy object used in the test code. |
386 |
|
|
387 |
|
2006-01-07 Wakaba <wakaba@suika.fam.cx> |
388 |
|
|
389 |
|
* DOMMain.dis (checkXMLNamesQName): Checks whether |
390 |
|
namespace URI is defined for not being warned. |
391 |
|
|
392 |
|
* XDoctype.dis: New module. |
393 |
|
|
394 |
|
* DOMCore.dis (DOMStringList): Test added. |
395 |
|
|
396 |
|
* Makefile: |XDoctype.pm| added. |
397 |
|
|
398 |
|
* Tree.dis (Require): Requires |XDoctype.dis|. |
399 |
|
(ManakaiDOMNodeObjectNode.eq): Added. |
400 |
|
(Test): |DOMError.location| must return a |DOMLocator| |
401 |
|
object (it was incorrectly tested to return |null|). |
402 |
|
(EmptyNodeList.DESTROY): Removed. |
403 |
|
|
404 |
|
2006-01-04 Wakaba <wakaba@suika.fam.cx> |
405 |
|
|
406 |
|
* Tree.dis (NodeType): |ELEMENT_TYPE_DEFINITION_NODE| and |
407 |
|
|ATTRIBUTE_DEFINITION_NODE| node types added. |
408 |
|
(appendChild, insertBefore, replaceChild): New |
409 |
|
two node types added and processing instruction nodes |
410 |
|
as document type definition node child is allowed |
411 |
|
in |ManakaiDOM:ManakaiDOMLatest| mode. |
412 |
|
(getNodeReference): New |interface| parameter |
413 |
|
to filter classes by interface is added. |
414 |
|
(ElementTypeDefinitionRole): New role. |
415 |
|
(AttributeDefinitionRole): New role. |
416 |
|
|
417 |
|
2006-01-02 Wakaba <wakaba@suika.fam.cx> |
418 |
|
|
419 |
|
* DOMCore.dis (DOMStringList): Reimplemented as tied array. |
420 |
|
|
421 |
2005-12-31 Wakaba <wakaba@suika.fam.cx> |
2005-12-31 Wakaba <wakaba@suika.fam.cx> |
422 |
|
|
423 |
* DOMCore.dis (DOMError.location): Returns an empty |DOMLocator| |
* DOMCore.dis (DOMError.location): Returns an empty |DOMLocator| |