Wrapper around a DOMBuilderFilter which implements the checks to make the whatToShow filter attribute work.
| 451 | _ALLOWED_FILTER_RETURNS = (FILTER_ACCEPT, FILTER_REJECT, FILTER_SKIP) |
| 452 | |
| 453 | class FilterVisibilityController(object): |
| 454 | """Wrapper around a DOMBuilderFilter which implements the checks |
| 455 | to make the whatToShow filter attribute work.""" |
| 456 | |
| 457 | __slots__ = 'filter', |
| 458 | |
| 459 | def __init__(self, filter): |
| 460 | self.filter = filter |
| 461 | |
| 462 | def startContainer(self, node): |
| 463 | mask = self._nodetype_mask[node.nodeType] |
| 464 | if self.filter.whatToShow & mask: |
| 465 | val = self.filter.startContainer(node) |
| 466 | if val == FILTER_INTERRUPT: |
| 467 | raise ParseEscape |
| 468 | if val not in _ALLOWED_FILTER_RETURNS: |
| 469 | raise ValueError( |
| 470 | "startContainer() returned illegal value: " + repr(val)) |
| 471 | return val |
| 472 | else: |
| 473 | return FILTER_ACCEPT |
| 474 | |
| 475 | def acceptNode(self, node): |
| 476 | mask = self._nodetype_mask[node.nodeType] |
| 477 | if self.filter.whatToShow & mask: |
| 478 | val = self.filter.acceptNode(node) |
| 479 | if val == FILTER_INTERRUPT: |
| 480 | raise ParseEscape |
| 481 | if val == FILTER_SKIP: |
| 482 | # move all child nodes to the parent, and remove this node |
| 483 | parent = node.parentNode |
| 484 | for child in node.childNodes[:]: |
| 485 | parent.appendChild(child) |
| 486 | # node is handled by the caller |
| 487 | return FILTER_REJECT |
| 488 | if val not in _ALLOWED_FILTER_RETURNS: |
| 489 | raise ValueError( |
| 490 | "acceptNode() returned illegal value: " + repr(val)) |
| 491 | return val |
| 492 | else: |
| 493 | return FILTER_ACCEPT |
| 494 | |
| 495 | _nodetype_mask = { |
| 496 | Node.ELEMENT_NODE: NodeFilter.SHOW_ELEMENT, |
| 497 | Node.ATTRIBUTE_NODE: NodeFilter.SHOW_ATTRIBUTE, |
| 498 | Node.TEXT_NODE: NodeFilter.SHOW_TEXT, |
| 499 | Node.CDATA_SECTION_NODE: NodeFilter.SHOW_CDATA_SECTION, |
| 500 | Node.ENTITY_REFERENCE_NODE: NodeFilter.SHOW_ENTITY_REFERENCE, |
| 501 | Node.ENTITY_NODE: NodeFilter.SHOW_ENTITY, |
| 502 | Node.PROCESSING_INSTRUCTION_NODE: NodeFilter.SHOW_PROCESSING_INSTRUCTION, |
| 503 | Node.COMMENT_NODE: NodeFilter.SHOW_COMMENT, |
| 504 | Node.DOCUMENT_NODE: NodeFilter.SHOW_DOCUMENT, |
| 505 | Node.DOCUMENT_TYPE_NODE: NodeFilter.SHOW_DOCUMENT_TYPE, |
| 506 | Node.DOCUMENT_FRAGMENT_NODE: NodeFilter.SHOW_DOCUMENT_FRAGMENT, |
| 507 | Node.NOTATION_NODE: NodeFilter.SHOW_NOTATION, |
| 508 | } |
| 509 | |
| 510 |
no outgoing calls
no test coverage detected
searching dependent graphs…