/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_intl_l10n_FluentBundle_h #define mozilla_intl_l10n_FluentBundle_h #include "mozilla/dom/BindingDeclarations.h" #include "nsCycleCollectionParticipant.h" #include "nsWrapperCache.h" #include "mozilla/dom/FluentBinding.h" #include "mozilla/dom/LocalizationBinding.h" #include "mozilla/intl/FluentResource.h" #include "mozilla/intl/FluentBindings.h" class nsIGlobalObject; namespace mozilla { class ErrorResult; namespace dom { struct FluentMessage; struct L10nMessage; class OwningUTF8StringOrDouble; class UTF8StringOrUTF8StringSequence; struct FluentBundleOptions; struct FluentBundleAddResourceOptions; } // namespace dom namespace intl { class FluentResource; using L10nArgs = dom::Record>; class FluentPattern : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentPattern) NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentPattern) FluentPattern(nsISupports* aParent, const nsACString& aId); FluentPattern(nsISupports* aParent, const nsACString& aId, const nsACString& aAttrName); JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; nsISupports* GetParentObject() const { return mParent; } nsCString mId; nsCString mAttrName; protected: virtual ~FluentPattern(); nsCOMPtr mParent; }; class FluentBundle final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentBundle) NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentBundle) FluentBundle(nsISupports* aParent, UniquePtr aRaw); static already_AddRefed Constructor( const dom::GlobalObject& aGlobal, const dom::UTF8StringOrUTF8StringSequence& aLocales, const dom::FluentBundleOptions& aOptions, ErrorResult& aRv); JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) final; nsISupports* GetParentObject() const { return mParent; } void GetLocales(nsTArray& aLocales); void AddResource(FluentResource& aResource, const dom::FluentBundleAddResourceOptions& aOptions); bool HasMessage(const nsACString& aId); void GetMessage(const nsACString& aId, dom::Nullable& aRetVal); void FormatPattern(JSContext* aCx, const FluentPattern& aPattern, const dom::Nullable& aArgs, const dom::Optional>& aErrors, nsACString& aRetVal, ErrorResult& aRv); static void ConvertArgs(const L10nArgs& aArgs, nsTArray& aRetVal); protected: virtual ~FluentBundle(); nsCOMPtr mParent; UniquePtr mRaw; }; } // namespace intl } // namespace mozilla #endif