| 571 | } |
| 572 | |
| 573 | Object* Object::findPatternInObjOrParents(const std::string &pattern) |
| 574 | { |
| 575 | std::string content=getObjectContent(); |
| 576 | if((int) Parser::findToken(content,pattern,0) != -1 ) |
| 577 | { |
| 578 | return this; |
| 579 | } |
| 580 | |
| 581 | Object * parent = this; |
| 582 | Object *foundObj = NULL; |
| 583 | while(1) |
| 584 | { |
| 585 | unsigned int startOfParent = content.find("/Parent"); |
| 586 | unsigned int endOfParent = content.find(" R", startOfParent); |
| 587 | if((int)startOfParent == -1) |
| 588 | { |
| 589 | break; |
| 590 | } |
| 591 | std::vector <Object *> parents = parent->getChildrenByBounds(startOfParent, endOfParent); |
| 592 | if( parents.size() != 1 ) |
| 593 | { |
| 594 | break; |
| 595 | } |
| 596 | parent = parents[0]; |
| 597 | std::string parentContent = parent->getObjectContent(); |
| 598 | unsigned int startOfPattern = parentContent.find(pattern); |
| 599 | if((int)startOfPattern == -1) |
| 600 | { |
| 601 | content = parentContent; |
| 602 | continue; |
| 603 | } |
| 604 | foundObj = parent; |
| 605 | break; |
| 606 | } |
| 607 | return foundObj; |
| 608 | } |
| 609 |
no test coverage detected