diff options
Diffstat (limited to 'chromium/chrome/common/ini_parser.cc')
-rw-r--r-- | chromium/chrome/common/ini_parser.cc | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/chromium/chrome/common/ini_parser.cc b/chromium/chrome/common/ini_parser.cc new file mode 100644 index 00000000000..91f2d7ad021 --- /dev/null +++ b/chromium/chrome/common/ini_parser.cc @@ -0,0 +1,64 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/common/ini_parser.h" + +#include <stddef.h> + +#include "base/logging.h" +#include "base/strings/string_tokenizer.h" + +INIParser::INIParser() : used_(false) {} + +INIParser::~INIParser() {} + +void INIParser::Parse(const std::string& content) { + DCHECK(!used_); + used_ = true; + base::StringTokenizer tokenizer(content, "\r\n"); + + std::string current_section; + while (tokenizer.GetNext()) { + std::string line = tokenizer.token(); + if (line.empty()) { + // Skips the empty line. + continue; + } + if (line[0] == '#' || line[0] == ';') { + // This line is a comment. + continue; + } + if (line[0] == '[') { + // It is a section header. + current_section = line.substr(1); + size_t end = current_section.rfind(']'); + if (end != std::string::npos) + current_section.erase(end); + } else { + std::string key, value; + size_t equal = line.find('='); + if (equal != std::string::npos) { + key = line.substr(0, equal); + value = line.substr(equal + 1); + HandleTriplet(current_section, key, value); + } + } + } +} + +DictionaryValueINIParser::DictionaryValueINIParser() {} + +DictionaryValueINIParser::~DictionaryValueINIParser() {} + +void DictionaryValueINIParser::HandleTriplet(const std::string& section, + const std::string& key, + const std::string& value) { + + // Checks whether the section and key contain a '.' character. + // Those sections and keys break DictionaryValue's path format when not + // using the *WithoutPathExpansion methods. + if (section.find('.') == std::string::npos && + key.find('.') == std::string::npos) + root_.SetString(section + "." + key, value); +} |