1 // Copyright 2014 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef XFA_FXFA_PARSER_CXFA_XMLLOCALE_H_ 8 #define XFA_FXFA_PARSER_CXFA_XMLLOCALE_H_ 9 10 #include <memory> 11 12 #include "core/fxcrt/unowned_ptr.h" 13 #include "fxjs/gc/heap.h" 14 #include "third_party/base/containers/span.h" 15 #include "v8/include/cppgc/garbage-collected.h" 16 #include "xfa/fxfa/parser/gced_locale_iface.h" 17 18 class CFX_XMLDocument; 19 class CFX_XMLElement; 20 21 class CXFA_XMLLocale final : public GCedLocaleIface { 22 public: 23 // Object is created on cppgc heap. 24 static CXFA_XMLLocale* Create(cppgc::Heap* heap, pdfium::span<uint8_t> data); 25 26 CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 27 ~CXFA_XMLLocale() override; 28 29 // GCedLocaleIface: 30 void Trace(cppgc::Visitor* visitor) const override; 31 WideString GetName() const override; 32 WideString GetDecimalSymbol() const override; 33 WideString GetGroupingSymbol() const override; 34 WideString GetPercentSymbol() const override; 35 WideString GetMinusSymbol() const override; 36 WideString GetCurrencySymbol() const override; 37 WideString GetDateTimeSymbols() const override; 38 WideString GetMonthName(int32_t nMonth, bool bAbbr) const override; 39 WideString GetDayName(int32_t nWeek, bool bAbbr) const override; 40 WideString GetMeridiemName(bool bAM) const override; 41 int GetTimeZoneInMinutes() const override; 42 WideString GetEraName(bool bAD) const override; 43 44 WideString GetDatePattern(DateTimeSubcategory eType) const override; 45 WideString GetTimePattern(DateTimeSubcategory eType) const override; 46 WideString GetNumPattern(NumSubcategory eType) const override; 47 48 private: 49 CXFA_XMLLocale(std::unique_ptr<CFX_XMLDocument> root, 50 const CFX_XMLElement* locale); 51 52 WideString GetPattern(CFX_XMLElement* pElement, 53 WideStringView bsTag, 54 WideStringView wsName) const; 55 WideString GetCalendarSymbol(WideStringView symbol, 56 size_t index, 57 bool bAbbr) const; 58 59 std::unique_ptr<CFX_XMLDocument> xml_doc_; 60 UnownedPtr<const CFX_XMLElement> locale_; 61 }; 62 63 #endif // XFA_FXFA_PARSER_CXFA_XMLLOCALE_H_ 64