diff options
Diffstat (limited to 'chromeos-dbus-bindings/name_parser.cc')
-rw-r--r-- | chromeos-dbus-bindings/name_parser.cc | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/chromeos-dbus-bindings/name_parser.cc b/chromeos-dbus-bindings/name_parser.cc new file mode 100644 index 0000000..33584d9 --- /dev/null +++ b/chromeos-dbus-bindings/name_parser.cc @@ -0,0 +1,95 @@ +// Copyright 2014 The Chromium OS 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 "chromeos-dbus-bindings/name_parser.h" + +#include <string> + +#include <base/strings/string_util.h> +#include <base/strings/stringprintf.h> +#include <chromeos/strings/string_utils.h> + +#include "chromeos-dbus-bindings/indented_text.h" + +namespace chromeos_dbus_bindings { + +namespace { + +void AddOpenNamespace(IndentedText *text, const std::string& name) { + text->AddLine(base::StringPrintf("namespace %s {", name.c_str())); +} + +void AddCloseNamespace(IndentedText *text, const std::string& name) { + text->AddLine(base::StringPrintf("} // namespace %s", name.c_str())); +} + +} // anonymous namespace + +NameParser::NameParser(const std::string& name) + : namespaces{chromeos::string_utils::Split(name, '.')} { + CHECK(!namespaces.empty()) << "Empty name specified"; + type_name = namespaces.back(); + namespaces.pop_back(); +} + +std::string NameParser::MakeFullyQualified(const std::string& name) const { + std::vector<std::string> parts = namespaces; + parts.push_back(name); + return chromeos::string_utils::Join("::", parts); +} + +std::string NameParser::MakeFullCppName() const { + return MakeFullyQualified(type_name); +} + +std::string NameParser::MakeVariableName() const { + // Convert CamelCase name to google_style variable name. + std::string result; + for (char c : type_name) { + if (isupper(c)) { + if (!result.empty()) + result += '_'; + c = base::ToLowerASCII(c); + } + result.push_back(c); + } + return result; +} + +std::string NameParser::MakeInterfaceName(bool fully_qualified) const { + std::string interface_name = type_name + "Interface"; + return fully_qualified ? MakeFullyQualified(interface_name) : interface_name; +} + +std::string NameParser::MakeProxyName(bool fully_qualified) const { + std::string proxy_name = type_name + "Proxy"; + return fully_qualified ? MakeFullyQualified(proxy_name) : proxy_name; +} + +std::string NameParser::MakeAdaptorName(bool fully_qualified) const { + std::string adaptor_name = type_name + "Adaptor"; + return fully_qualified ? MakeFullyQualified(adaptor_name) : adaptor_name; +} + +void NameParser::AddOpenNamespaces(IndentedText *text, + bool add_main_type) const { + for (const auto& ns : namespaces) { + AddOpenNamespace(text, ns); + } + + if (add_main_type) + AddOpenNamespace(text, type_name); +} + +void NameParser::AddCloseNamespaces(IndentedText *text, + bool add_main_type) const { + if (add_main_type) + AddCloseNamespace(text, type_name); + + for (auto it = namespaces.rbegin(); it != namespaces.rend(); ++it) { + AddCloseNamespace(text, *it); + } +} + +} // namespace chromeos_dbus_bindings |