diff options
author | tommycli@chromium.org <tommycli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-18 23:31:12 +0000 |
---|---|---|
committer | tommycli@chromium.org <tommycli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-18 23:31:12 +0000 |
commit | e288af7e53c20efd31db7bc1c58bababb9e36c50 (patch) | |
tree | 52daa3114c64bc0057fbf0099a76d6dbf223b96f /base/ini_parser.h | |
parent | 0d6a1888af2a9a6c98e12eca23fb7e252858dc72 (diff) | |
download | chromium_src-e288af7e53c20efd31db7bc1c58bababb9e36c50.zip chromium_src-e288af7e53c20efd31db7bc1c58bababb9e36c50.tar.gz chromium_src-e288af7e53c20efd31db7bc1c58bababb9e36c50.tar.bz2 |
Move Firefox importer's INI parser to c/browser/common.
Media Galleries API Picasa Import will require reading some INI files. Rather than re-invent the wheel and duplicate code, we are moving the INI parser used by Firefox import into chrome/browser/common.
BUG=151701
Review URL: https://chromiumcodereview.appspot.com/16982004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207111 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/ini_parser.h')
-rw-r--r-- | base/ini_parser.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/base/ini_parser.h b/base/ini_parser.h new file mode 100644 index 0000000..0aa7754 --- /dev/null +++ b/base/ini_parser.h @@ -0,0 +1,69 @@ +// Copyright 2013 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. + +#ifndef BASE_INI_PARSER_H_ +#define BASE_INI_PARSER_H_ + +#include <string> + +#include "base/base_export.h" +#include "base/basictypes.h" +#include "base/values.h" + +namespace base { + +// Parses INI files in a string. Users should in inherit from this class. +// This is a very basic INI parser with these characteristics: +// - Ignores blank lines. +// - Ignores comment lines beginning with '#' or ';'. +// - Duplicate key names in the same section will simply cause repeated calls +// to HandleTriplet with the same |section| and |key| parameters. +// - No escape characters supported. +// - Global properties result in calls to HandleTriplet with an empty string in +// the |section| argument. +// - Section headers begin with a '[' character. It is recommended, but +// not required to close the header bracket with a ']' character. All +// characters after a closing ']' character is ignored. +// - Key value pairs are indicated with an '=' character. Whitespace is not +// ignored. Quoting is not supported. Everything before the first '=' +// is considered the |key|, and everything after is the |value|. +class BASE_EXPORT INIParser { + public: + INIParser(); + virtual ~INIParser(); + + // May only be called once per instance. + void Parse(const std::string& content); + + private: + virtual void HandleTriplet(const std::string& section, + const std::string& key, + const std::string& value) = 0; + + bool used_; +}; + +// Parsed values are stored as strings at the "section.key" path. Triplets with +// |section| or |key| parameters containing '.' are ignored. +class BASE_EXPORT DictionaryValueINIParser : public INIParser { + public: + DictionaryValueINIParser(); + virtual ~DictionaryValueINIParser(); + + const DictionaryValue& root() const { return root_; } + + private: + // INIParser implementation. + virtual void HandleTriplet(const std::string& section, + const std::string& key, + const std::string& value) OVERRIDE; + + DictionaryValue root_; + + DISALLOW_COPY_AND_ASSIGN(DictionaryValueINIParser); +}; + +} // namespace base + +#endif // BASE_INI_PARSER_H_ |