Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 14, 2008, 12:48:25 AM (17 years ago)
Author:
landauf
Message:

config-value accepts now strings with special chars like \n or \t and hopefully every other. strings are enclosed by "…", but the quotes are only visible in the config-file. if you want something like " ← whitespace" you must add quotes, otherwise this would be stripped to "← whitespace".

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core2/src/orxonox/core/ConfigFileManager.cc

    r1030 r1049  
    6666    // ConfigFileEntryValue //
    6767    //////////////////////////
     68
     69    void ConfigFileEntryValue::setValue(const std::string& value)
     70    {
     71        if (!this->bString_)
     72            this->value_ = value;
     73        else
     74            this->value_ = "\"" + addSlashes(value) + "\"";
     75    }
     76
     77    std::string ConfigFileEntryValue::getValue() const
     78    {
     79        if (!this->bString_)
     80            return this->value_;
     81        else
     82            return removeSlashes(stripEnclosingQuotes(this->value_));
     83    }
     84
    6885    std::string ConfigFileEntryValue::getFileEntry() const
    6986    {
     
    130147    }
    131148
    132     std::list<ConfigFileEntry*>::iterator ConfigFileSection::getEntryIterator(const std::string& name, const std::string& fallback)
     149    std::list<ConfigFileEntry*>::iterator ConfigFileSection::getEntryIterator(const std::string& name, const std::string& fallback, bool bString)
    133150    {
    134151        for (std::list<ConfigFileEntry*>::iterator it = this->entries_.begin(); it != this->entries_.end(); ++it)
     152        {
    135153            if ((*it)->getName() == name)
     154            {
     155                (*it)->setString(bString);
    136156                return it;
     157            }
     158        }
    137159
    138160        this->bUpdated_ = true;
    139161
    140         return this->entries_.insert(this->entries_.end(), (ConfigFileEntry*)(new ConfigFileEntryValue(name, fallback)));
    141     }
    142 
    143     std::list<ConfigFileEntry*>::iterator ConfigFileSection::getEntryIterator(const std::string& name, unsigned int index, const std::string& fallback)
     162        return this->entries_.insert(this->entries_.end(), (ConfigFileEntry*)(new ConfigFileEntryValue(name, fallback, bString)));
     163    }
     164
     165    std::list<ConfigFileEntry*>::iterator ConfigFileSection::getEntryIterator(const std::string& name, unsigned int index, const std::string& fallback, bool bString)
    144166    {
    145167        for (std::list<ConfigFileEntry*>::iterator it = this->entries_.begin(); it != this->entries_.end(); ++it)
     168        {
    146169            if (((*it)->getName() == name) && ((*it)->getIndex() == index))
     170            {
     171                (*it)->setString(bString);
    147172                return it;
     173            }
     174        }
    148175
    149176        this->bUpdated_ = true;
    150177
    151178        if (index == 0)
    152             return this->entries_.insert(this->entries_.end(), (ConfigFileEntry*)(new ConfigFileEntryVectorValue(name, index, fallback)));
    153         else
    154             return this->entries_.insert(++this->getEntryIterator(name, index - 1), (ConfigFileEntry*)(new ConfigFileEntryVectorValue(name, index, fallback)));
     179            return this->entries_.insert(this->entries_.end(), (ConfigFileEntry*)(new ConfigFileEntryVectorValue(name, index, fallback, bString)));
     180        else
     181            return this->entries_.insert(++this->getEntryIterator(name, index - 1, "", bString), (ConfigFileEntry*)(new ConfigFileEntryVectorValue(name, index, fallback, bString)));
    155182    }
    156183
     
    233260                        unsigned int pos2 = line.find('[');
    234261                        unsigned int pos3 = line.find(']');
    235 
    236                         std::string value = removeTrailingWhitespaces(line.substr(pos1 + 1));
    237                         std::string comment = "";
    238 
    239                         std::string betweenQuotes = getStringBetweenQuotes(value);
    240                         if (value.size() > 0 && value[0] == '"' && betweenQuotes != "" && betweenQuotes.size() > 0)
     262                        unsigned int commentposition = getNextCommentPosition(line, pos1 + 1);
     263                        while (isBetweenQuotes(line, commentposition))
    241264                        {
    242                             value = betweenQuotes;
    243                             if (line.size() > pos1 + 1 + betweenQuotes.size() + 2)
    244                                 comment = removeTrailingWhitespaces(getComment(line.substr(pos1 + 1 + betweenQuotes.size() + 2)));
     265                            commentposition = getNextCommentPosition(line, commentposition + 1);
     266                        }
     267                        std::string value = "", comment = "";
     268                        if (commentposition == std::string::npos)
     269                        {
     270                            value = removeTrailingWhitespaces(line.substr(pos1 + 1));
    245271                        }
    246272                        else
    247273                        {
    248                             unsigned int pos4 = getCommentPosition(line);
    249                             value = removeTrailingWhitespaces(line.substr(pos1 + 1, pos4 - pos1 - 1));
    250                             if (pos4 != std::string::npos)
    251                                 comment = removeTrailingWhitespaces(line.substr(pos4));
     274                            value = removeTrailingWhitespaces(line.substr(pos1 + 1, commentposition - pos1 - 1));
     275                            comment = removeTrailingWhitespaces(line.substr(commentposition));
    252276                        }
    253277
     
    259283                            {
    260284                                // New array
    261                                 std::list<ConfigFileEntry*>::iterator it = newsection->getEntryIterator(getStripped(line.substr(0, pos2)), index, value);
     285                                std::list<ConfigFileEntry*>::iterator it = newsection->getEntryIterator(getStripped(line.substr(0, pos2)), index, value, false);
    262286                                (*it)->setValue(value);
    263287                                (*it)->setComment(comment);
     
    267291
    268292                        // New value
    269                         newsection->getEntries().insert(newsection->getEntries().end(), new ConfigFileEntryValue(getStripped(line.substr(0, pos1)), value, comment));
     293                        newsection->getEntries().insert(newsection->getEntries().end(), new ConfigFileEntryValue(getStripped(line.substr(0, pos1)), value, false, comment));
    270294                        continue;
    271295                    }
Note: See TracChangeset for help on using the changeset viewer.