Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 27, 2008, 12:27:13 AM (16 years ago)
Author:
landauf
Message:

autocompletion is almost done

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/console/src/core/CommandExecutor.cc

    r1430 r1434  
    126126    void CommandExecutor::parseIfNeeded(const std::string& command)
    127127    {
     128std::cout << "parse if needed: command:      >" << command << "<" << std::endl;
     129std::cout << "                 old original: >" << CommandExecutor::getEvaluation().originalCommand_ << "<" << std::endl;
     130std::cout << "                 old modified: >" << CommandExecutor::getEvaluation().command_ << "<" << std::endl;
    128131        if (CommandExecutor::getEvaluation().state_ == CS_Uninitialized)
    129132        {
     133std::cout << "parse if needed: parse!" << std::endl;
    130134            CommandExecutor::parse(command);
    131135        }
    132         else if (CommandExecutor::getEvaluation().originalCommand_ != command)
     136        else if (/*removeTrailingWhitespaces*/(CommandExecutor::getEvaluation().originalCommand_) != /*removeTrailingWhitespaces*/(command))
    133137        {
    134138            if (CommandExecutor::getEvaluation().command_ == command)
    135139            {
     140std::cout << "parse if needed: parse and set bNewCommand_ to false" << std::endl;
    136141                CommandExecutor::parse(command);
    137142                CommandExecutor::getEvaluation().bNewCommand_ = false;
     
    139144            else
    140145            {
     146std::cout << "parse if needed: parse!" << std::endl;
    141147                CommandExecutor::parse(command);
    142148            }
    143149        }
     150std::cout << "parse if needed: don't parse" << std::endl;
    144151    }
    145152
     
    156163        {
    157164            case CS_Uninitialized:
     165std::cout << "0: Uninitialized\n";
    158166            {
    159167                // Impossible
     
    161169            }
    162170            case CS_Empty:
     171std::cout << "0: Empty\n";
    163172            {
    164173                if (CommandExecutor::argumentsGiven() == 0)
     
    175184            }
    176185            case CS_ShortcutOrIdentifier:
     186std::cout << "0: ShortcutOrIdentifier\n";
    177187            {
    178188                if (CommandExecutor::argumentsGiven() > 1)
     
    191201                    else if (CommandExecutor::getEvaluation().functionclass_)
    192202                    {
     203std::cout << "MEP" << std::endl;
    193204                        // It's a functionname
    194205                        CommandExecutor::getEvaluation().state_ = CS_Function;
     
    272283            }
    273284            case CS_Function:
     285std::cout << "0: Function\n";
    274286            {
    275287                if (CommandExecutor::getEvaluation().functionclass_)
     
    283295                        if (CommandExecutor::getEvaluation().function_)
    284296                        {
     297std::cout << "MEP2" << std::endl;
    285298                            // It's a function
    286299                            CommandExecutor::getEvaluation().state_ = CS_ParamPreparation;
     
    377390std::cout << "3_1\n";
    378391                    // There is exactly one possible argument
    379                     CommandExecutor::getEvaluation().argument_ = *(*CommandExecutor::getEvaluation().listOfPossibleArguments_.begin()).second;
     392                    CommandExecutor::getEvaluation().argument_ = (*CommandExecutor::getEvaluation().listOfPossibleArguments_.begin()).second;
     393                    CommandExecutor::getEvaluation().possibleArgument_ = (*CommandExecutor::getEvaluation().listOfPossibleArguments_.begin()).second;
    380394                    CommandExecutor::getEvaluation().state_ = CS_ParamPreparation;
    381395                    return;
     
    393407std::cout << "3_3\n";
    394408                    // There are several possibilities
    395                     unsigned int argumentNumber = CommandExecutor::argumentsGiven() - 1;
    396                     if (CommandExecutor::getEvaluation().functionclass_)
    397                         argumentNumber -= 1;
    398 
     409                    unsigned int argumentNumber = CommandExecutor::argumentsGiven();
     410                    if (argumentNumber > 0)
     411                        --argumentNumber;
     412std::cout << "3_3_1\n";
     413                    if (CommandExecutor::getEvaluation().functionclass_ && argumentNumber > 0)
     414                        --argumentNumber;
     415
     416std::cout << "3_3_2\n";
    399417                    CommandExecutor::getEvaluation().argument_ = CommandExecutor::getCommonBegin(CommandExecutor::getEvaluation().listOfPossibleArguments_);
     418std::cout << "3_3_3\n";
    400419                    CommandExecutor::getEvaluation().possibleArgument_ = CommandExecutor::getPossibleArgument(CommandExecutor::getLastArgument(), CommandExecutor::getEvaluation().function_, argumentNumber);
     420std::cout << "3_3_4\n";
    401421                    CommandExecutor::getEvaluation().state_ = CS_ParamPreparation;
     422std::cout << "3_3_5\n";
    402423                    return;
    403424                }
     
    495516        for (std::list<std::pair<std::string, std::string> >::const_iterator it = command->getArgumentCompletionListBegin(); it != command->getArgumentCompletionListEnd(); ++it)
    496517            if ((*it).first.find(lowercase) == 0 || fragment == "")
    497                 CommandExecutor::getEvaluation().listOfPossibleArguments_.push_back(std::pair<const std::string*, const std::string*>(&(*it).first, &(*it).second));
    498 
    499         CommandExecutor::getEvaluation().listOfPossibleArguments_.sort(CommandExecutor::compareStringsInList);
     518                CommandExecutor::getEvaluation().listOfPossibleArguments_.push_back(std::pair<std::string, std::string>((*it).first, (*it).second));
     519
     520        CommandExecutor::getEvaluation().listOfPossibleArguments_.sort(CommandExecutor::compareStringsInList2);
    500521    }
    501522
     
    530551    std::string CommandExecutor::getPossibleArgument(const std::string& name, ConsoleCommand* command, unsigned int param)
    531552    {
     553std::cout << "4_1\n";
    532554        CommandExecutor::createArgumentCompletionList(command, param);
    533555
     556std::cout << "4_2\n";
    534557        std::string lowercase = getLowercase(name);
     558std::cout << "4_3\n";
    535559        for (std::list<std::pair<std::string, std::string> >::const_iterator it = command->getArgumentCompletionListBegin(); it != command->getArgumentCompletionListEnd(); ++it)
     560        {
     561std::cout << "4_4\n";
    536562            if ((*it).first == lowercase)
    537563                return (*it).second;
    538 
    539         return 0;
     564        }
     565
     566std::cout << "4_5\n";
     567        return "";
    540568    }
    541569
     
    599627    }
    600628
     629    std::string CommandExecutor::getCommonBegin(const std::list<std::pair<std::string, std::string> >& list)
     630    {
     631        if (list.size() == 0)
     632        {
     633            return "";
     634        }
     635        else if (list.size() == 1)
     636        {
     637            return ((*list.begin()).first + " ");
     638        }
     639        else
     640        {
     641            std::string output = "";
     642            for (unsigned int i = 0; true; i++)
     643            {
     644                char temp = 0;
     645                for (std::list<std::pair<std::string, std::string> >::const_iterator it = list.begin(); it != list.end(); ++it)
     646                {
     647                    if ((*it).first.size() > i)
     648                    {
     649                        if (it == list.begin())
     650                        {
     651                            temp = (*it).first[i];
     652                        }
     653                        else
     654                        {
     655                            if (temp != (*it).first[i])
     656                                return output;
     657                        }
     658                    }
     659                    else
     660                    {
     661                        return output;
     662                    }
     663                }
     664                output += temp;
     665            }
     666            return output;
     667        }
     668    }
     669
    601670    bool CommandExecutor::compareStringsInList(const std::pair<const std::string*, const std::string*>& first, const std::pair<const std::string*, const std::string*>& second)
    602671    {
    603672        return ((*first.first) < (*second.first));
    604673    }
     674
     675    bool CommandExecutor::compareStringsInList2(const std::pair<std::string, std::string>& first, const std::pair<std::string, std::string>& second)
     676    {
     677        return (first.first < second.first);
     678    }
    605679}
Note: See TracChangeset for help on using the changeset viewer.