| 560 | 
  | 
    switch (tok) { | 
| 561 | 
  | 
        case Token::within: | 
| 562 | 
  | 
            return clauseWithin(); | 
| 563 | 
< | 
        case Token::name : | 
| 564 | 
< | 
            return clauseName(Token::name); | 
| 565 | 
< | 
        case Token::index : | 
| 566 | 
< | 
            return clauseIndex(Token::index); | 
| 567 | 
< | 
        case Token::molname : | 
| 568 | 
< | 
            return clauseName(Token::molname); | 
| 569 | 
< | 
        case Token::molindex : | 
| 570 | 
< | 
            return clauseIndex(Token::molindex); | 
| 571 | 
< | 
             | 
| 563 | 
> | 
 | 
| 564 | 
> | 
        case Token::asterisk: | 
| 565 | 
> | 
        case Token::identifier: | 
| 566 | 
> | 
            return clauseChemObjName(); | 
| 567 | 
> | 
       | 
| 568 | 
  | 
        default: | 
| 569 | 
  | 
            if ((tok & Token::atomproperty) == Token::atomproperty) { | 
| 570 | 
  | 
                return clauseComparator(); | 
| 642 | 
  | 
     | 
| 643 | 
  | 
    return addTokenToPostfix(Token(Token::within, distance)); | 
| 644 | 
  | 
} | 
| 645 | 
+ | 
 | 
| 646 | 
+ | 
bool SelectionCompiler::clauseChemObjName() { | 
| 647 | 
+ | 
    std::string chemObjName; | 
| 648 | 
+ | 
    int tok = tokPeek(); | 
| 649 | 
+ | 
    if (!clauseName(chemObjName)){ | 
| 650 | 
+ | 
        return false; | 
| 651 | 
+ | 
    } | 
| 652 | 
  | 
 | 
| 653 | 
  | 
 | 
| 654 | 
< | 
bool SelectionCompiler:: clauseName(int tok) { | 
| 655 | 
< | 
    Token tokenName = tokenNext(); | 
| 656 | 
< | 
    std::string name = boost::any_cast<std::string>(tokenName.value); | 
| 657 | 
< | 
    return addTokenToPostfix(Token(tok, name)); /**@todo */ | 
| 658 | 
< | 
 | 
| 654 | 
> | 
    tok = tokPeek(); | 
| 655 | 
> | 
    //allow two dot at most | 
| 656 | 
> | 
    if (tok == Token::dot) { | 
| 657 | 
> | 
        if (!clauseName(chemObjName)) { | 
| 658 | 
> | 
            return false; | 
| 659 | 
> | 
        } | 
| 660 | 
> | 
        tok = tokPeek(); | 
| 661 | 
> | 
        if (tok == Token::dot) { | 
| 662 | 
> | 
            if (!clauseName(chemObjName)) { | 
| 663 | 
> | 
                return false; | 
| 664 | 
> | 
            } | 
| 665 | 
> | 
        }         | 
| 666 | 
> | 
    } | 
| 667 | 
> | 
 | 
| 668 | 
> | 
    return addTokenToPostfix(Token(Token::name, chemObjName)); | 
| 669 | 
  | 
} | 
| 670 | 
  | 
 | 
| 671 | 
< | 
bool SelectionCompiler:: clauseIndex(int tok) { | 
| 672 | 
< | 
    //return addTokenToPostfix(Token(tok, )); /**@todo*/ | 
| 673 | 
< | 
    return true; | 
| 671 | 
> | 
bool SelectionCompiler:: clauseName(std::string& name) { | 
| 672 | 
> | 
 | 
| 673 | 
> | 
    int tok = tokPeek(); | 
| 674 | 
> | 
 | 
| 675 | 
> | 
    if (tok == Token::asterisk || tok == Token::identifier) { | 
| 676 | 
> | 
        name += boost::any_cast<std::string>(tokenNext().value); | 
| 677 | 
> | 
         | 
| 678 | 
> | 
        while(true){ | 
| 679 | 
> | 
            tok = tokPeek(); | 
| 680 | 
> | 
            switch (tok) { | 
| 681 | 
> | 
                case Token::asterisk : | 
| 682 | 
> | 
                    name += "*"; | 
| 683 | 
> | 
                    tokenNext(); | 
| 684 | 
> | 
                    break; | 
| 685 | 
> | 
                case Token::identifier : | 
| 686 | 
> | 
                    name += boost::any_cast<std::string>(tokenNext().value); | 
| 687 | 
> | 
                    break; | 
| 688 | 
> | 
                case Token::integer : | 
| 689 | 
> | 
                    name += toString(boost::any_cast<int>(tokenNext().value)); | 
| 690 | 
> | 
                    break; | 
| 691 | 
> | 
                case Token::dot : | 
| 692 | 
> | 
                    return true; | 
| 693 | 
> | 
                default : | 
| 694 | 
> | 
                    return true; | 
| 695 | 
> | 
            } | 
| 696 | 
> | 
        } | 
| 697 | 
> | 
         | 
| 698 | 
> | 
    }else { | 
| 699 | 
> | 
        return false; | 
| 700 | 
> | 
    } | 
| 701 | 
> | 
 | 
| 702 | 
  | 
} | 
| 703 | 
  | 
 | 
| 704 | 
+ | 
 | 
| 705 | 
  | 
} |