// Copyright (c) 2012 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 UI_GFX_FONT_FALLBACK_WIN_H_ #define UI_GFX_FONT_FALLBACK_WIN_H_ #include <string> #include <vector> #include "ui/gfx/font.h" namespace gfx { // Internals of font_fallback_win.cc exposed for testing. namespace internal { // Parses comma separated SystemLink |entry|, per the format described here: // http://msdn.microsoft.com/en-us/goglobal/bb688134.aspx // // Sets |filename| and |font_name| respectively. If a field is not present // or could not be parsed, the corresponding parameter will be cleared. void GFX_EXPORT ParseFontLinkEntry(const std::string& entry, std::string* filename, std::string* font_name); // Parses a font |family| in the format "FamilyFoo & FamilyBar (TrueType)". // Splits by '&' and strips off the trailing parenthesized expression. void GFX_EXPORT ParseFontFamilyString(const std::string& family, std::vector<std::string>* font_names); } // namespace internal // Iterator over linked fallback fonts for a given font. The linked font chain // comes from the Windows registry, but gets cached between uses. class GFX_EXPORT LinkedFontsIterator { public: // Instantiates the iterator over the linked font chain for |font|. The first // item will be |font| itself. explicit LinkedFontsIterator(Font font); virtual ~LinkedFontsIterator(); // Sets the font that would be returned by the next call to |NextFont()|, // useful for inserting one-time entries into the iterator chain. void SetNextFont(Font font); // Gets the next font in the link chain, if available, and increments the // iterator. Returns |true| on success or |false| if the iterator is past // last item (in that case, the value of |font| should not be used). If // |SetNextFont()| was called, returns the font set that way and clears it. bool NextFont(Font* font); protected: // Retrieves the list of linked fonts. Protected and virtual so that it may // be overridden by tests. virtual const std::vector<Font>* GetLinkedFonts() const; private: // Original font whose linked fonts are being iterated over. Font original_font_; // Font that was set via |SetNextFont()|. Font next_font_; // Indicates whether |SetNextFont()| was called. bool next_font_set_; // The font most recently returned by |NextFont()|. Font current_font_; // List of linked fonts; weak pointer. const std::vector<Font>* linked_fonts_; // Index of the current entry in the |linked_fonts_| list. size_t linked_font_index_; DISALLOW_COPY_AND_ASSIGN(LinkedFontsIterator); }; } // namespace gfx #endif // UI_GFX_FONT_FALLBACK_WIN_H_