OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> | 2 * Copyright (C) 2005 Frerich Raabe <raabe@kde.org> |
3 * Copyright (C) 2006, 2009 Apple Inc. | 3 * Copyright (C) 2006, 2009 Apple Inc. |
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * | 9 * |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 | 358 |
359 result->markSorted(false); | 359 result->markSorted(false); |
360 | 360 |
361 return Value(result, Value::adopt); | 361 return Value(result, Value::adopt); |
362 } | 362 } |
363 | 363 |
364 static inline String expandedNameLocalPart(Node* node) | 364 static inline String expandedNameLocalPart(Node* node) |
365 { | 365 { |
366 // The local part of an XPath expanded-name matches DOM local name for most
node types, except for namespace nodes and processing instruction nodes. | 366 // The local part of an XPath expanded-name matches DOM local name for most
node types, except for namespace nodes and processing instruction nodes. |
367 // But note that Blink does not support namespace nodes. | 367 // But note that Blink does not support namespace nodes. |
368 if (node->nodeType() == Node::PROCESSING_INSTRUCTION_NODE) | 368 switch (node->nodeType()) { |
| 369 case Node::ELEMENT_NODE: |
| 370 return toElement(node)->localName(); |
| 371 case Node::ATTRIBUTE_NODE: |
| 372 return toAttr(node)->localName(); |
| 373 case Node::PROCESSING_INSTRUCTION_NODE: |
369 return toProcessingInstruction(node)->target(); | 374 return toProcessingInstruction(node)->target(); |
370 return node->localName().string(); | 375 default: |
| 376 return String(); |
| 377 } |
| 378 } |
| 379 |
| 380 static inline String expandedNamespaceURI(Node* node) |
| 381 { |
| 382 switch (node->nodeType()) { |
| 383 case Node::ELEMENT_NODE: |
| 384 return toElement(node)->namespaceURI(); |
| 385 case Node::ATTRIBUTE_NODE: |
| 386 return toAttr(node)->namespaceURI(); |
| 387 default: |
| 388 return String(); |
| 389 } |
371 } | 390 } |
372 | 391 |
373 static inline String expandedName(Node* node) | 392 static inline String expandedName(Node* node) |
374 { | 393 { |
375 AtomicString prefix; | 394 AtomicString prefix; |
376 | 395 |
377 switch (node->nodeType()) { | 396 switch (node->nodeType()) { |
378 case Node::ELEMENT_NODE: | 397 case Node::ELEMENT_NODE: |
379 prefix = toElement(node)->prefix(); | 398 prefix = toElement(node)->prefix(); |
380 break; | 399 break; |
(...skipping 22 matching lines...) Expand all Loading... |
403 } | 422 } |
404 | 423 |
405 Value FunNamespaceURI::evaluate(EvaluationContext& context) const | 424 Value FunNamespaceURI::evaluate(EvaluationContext& context) const |
406 { | 425 { |
407 if (argCount() > 0) { | 426 if (argCount() > 0) { |
408 Value a = arg(0)->evaluate(context); | 427 Value a = arg(0)->evaluate(context); |
409 if (!a.isNodeSet()) | 428 if (!a.isNodeSet()) |
410 return ""; | 429 return ""; |
411 | 430 |
412 Node* node = a.toNodeSet(&context).firstNode(); | 431 Node* node = a.toNodeSet(&context).firstNode(); |
413 return node ? node->namespaceURI().string() : ""; | 432 return node ? expandedNamespaceURI(node) : ""; |
414 } | 433 } |
415 | 434 |
416 return context.node->namespaceURI().string(); | 435 return expandedNamespaceURI(context.node.get()); |
417 } | 436 } |
418 | 437 |
419 Value FunName::evaluate(EvaluationContext& context) const | 438 Value FunName::evaluate(EvaluationContext& context) const |
420 { | 439 { |
421 if (argCount() > 0) { | 440 if (argCount() > 0) { |
422 Value a = arg(0)->evaluate(context); | 441 Value a = arg(0)->evaluate(context); |
423 if (!a.isNodeSet()) | 442 if (!a.isNodeSet()) |
424 return ""; | 443 return ""; |
425 | 444 |
426 Node* node = a.toNodeSet(&context).firstNode(); | 445 Node* node = a.toNodeSet(&context).firstNode(); |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 return nullptr; | 761 return nullptr; |
743 | 762 |
744 Function* function = functionRec->factoryFn(); | 763 Function* function = functionRec->factoryFn(); |
745 function->setArguments(args); | 764 function->setArguments(args); |
746 function->setName(name); | 765 function->setName(name); |
747 return function; | 766 return function; |
748 } | 767 } |
749 | 768 |
750 } | 769 } |
751 } | 770 } |
OLD | NEW |