1bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com/*
2bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com * Copyright 2011 The Android Open Source Project
3bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com *
4bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com * Use of this source code is governed by a BSD-style license that can be
5bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com * found in the LICENSE file.
6bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com */
7bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
8bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com#ifndef SKFONTCONFIGPARSER_ANDROID_H_
9bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com#define SKFONTCONFIGPARSER_ANDROID_H_
10bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
119a70f347c9f279bf7b4ad8f24e78e3e524767ed5djsollen@google.com#include "SkString.h"
12bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com#include "SkTDArray.h"
13bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
143b6255493e458c6b2c1412af908581f0bf3f6b70djsollen/** \class SkLanguage
153b6255493e458c6b2c1412af908581f0bf3f6b70djsollen
163b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    The SkLanguage class represents a human written language, and is used by
173b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    text draw operations to determine which glyph to draw when drawing
183b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    characters with variants (ie Han-derived characters).
193b6255493e458c6b2c1412af908581f0bf3f6b70djsollen*/
203b6255493e458c6b2c1412af908581f0bf3f6b70djsollenclass SkLanguage {
213b6255493e458c6b2c1412af908581f0bf3f6b70djsollenpublic:
223b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    SkLanguage() { }
233b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    SkLanguage(const SkString& tag) : fTag(tag) { }
243b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    SkLanguage(const char* tag) : fTag(tag) { }
253b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    SkLanguage(const char* tag, size_t len) : fTag(tag, len) { }
263b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    SkLanguage(const SkLanguage& b) : fTag(b.fTag) { }
273b6255493e458c6b2c1412af908581f0bf3f6b70djsollen
283b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    /** Gets a BCP 47 language identifier for this SkLanguage.
293b6255493e458c6b2c1412af908581f0bf3f6b70djsollen        @return a BCP 47 language identifier representing this language
303b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    */
313b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    const SkString& getTag() const { return fTag; }
323b6255493e458c6b2c1412af908581f0bf3f6b70djsollen
333b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    /** Performs BCP 47 fallback to return an SkLanguage one step more general.
343b6255493e458c6b2c1412af908581f0bf3f6b70djsollen        @return an SkLanguage one step more general
353b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    */
363b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    SkLanguage getParent() const;
373b6255493e458c6b2c1412af908581f0bf3f6b70djsollen
383b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    bool operator==(const SkLanguage& b) const {
393b6255493e458c6b2c1412af908581f0bf3f6b70djsollen        return fTag == b.fTag;
403b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    }
413b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    bool operator!=(const SkLanguage& b) const {
423b6255493e458c6b2c1412af908581f0bf3f6b70djsollen        return fTag != b.fTag;
433b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    }
443b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    SkLanguage& operator=(const SkLanguage& b) {
453b6255493e458c6b2c1412af908581f0bf3f6b70djsollen        fTag = b.fTag;
463b6255493e458c6b2c1412af908581f0bf3f6b70djsollen        return *this;
473b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    }
483b6255493e458c6b2c1412af908581f0bf3f6b70djsollen
493b6255493e458c6b2c1412af908581f0bf3f6b70djsollenprivate:
503b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    //! BCP 47 language identifier
513b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    SkString fTag;
523b6255493e458c6b2c1412af908581f0bf3f6b70djsollen};
533b6255493e458c6b2c1412af908581f0bf3f6b70djsollen
543b6255493e458c6b2c1412af908581f0bf3f6b70djsollenenum FontVariants {
553b6255493e458c6b2c1412af908581f0bf3f6b70djsollen   kDefault_FontVariant = 0x01,
563b6255493e458c6b2c1412af908581f0bf3f6b70djsollen   kCompact_FontVariant = 0x02,
573b6255493e458c6b2c1412af908581f0bf3f6b70djsollen   kElegant_FontVariant = 0x04,
583b6255493e458c6b2c1412af908581f0bf3f6b70djsollen   kLast_FontVariant = kElegant_FontVariant,
593b6255493e458c6b2c1412af908581f0bf3f6b70djsollen};
603b6255493e458c6b2c1412af908581f0bf3f6b70djsollentypedef uint32_t FontVariant;
613b6255493e458c6b2c1412af908581f0bf3f6b70djsollen
62bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.comstruct FontFileInfo {
6307544757c9fcf0f359f1686a3779eb2e75dd5b36tomhudson    FontFileInfo() : fIndex(0), fWeight(0) { }
648d84c995319dd4a82e4f2054bbd19f968c671ca6bungeman
6531db71dd59b18ae0f36ca2686fba5fdcc6fe9439commit-bot@chromium.org    SkString              fFileName;
668d84c995319dd4a82e4f2054bbd19f968c671ca6bungeman    int                   fIndex;
6707544757c9fcf0f359f1686a3779eb2e75dd5b36tomhudson    int                   fWeight;
68bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com};
69bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
70bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com/**
71d3ddea284ec6611a93a6b75e64de39d0bc7e083ctomhudson * A font family provides one or more names for a collection of fonts, each of
72d3ddea284ec6611a93a6b75e64de39d0bc7e083ctomhudson * which has a different style (normal, italic) or weight (thin, light, bold,
73d3ddea284ec6611a93a6b75e64de39d0bc7e083ctomhudson * etc).
74d3ddea284ec6611a93a6b75e64de39d0bc7e083ctomhudson * Some fonts may occur in compact variants for use in the user interface.
75d3ddea284ec6611a93a6b75e64de39d0bc7e083ctomhudson * Android distinguishes "fallback" fonts to support non-ASCII character sets.
76bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com */
77bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.comstruct FontFamily {
7807544757c9fcf0f359f1686a3779eb2e75dd5b36tomhudson    FontFamily()
793b6255493e458c6b2c1412af908581f0bf3f6b70djsollen        : fVariant(kDefault_FontVariant)
80d3ddea284ec6611a93a6b75e64de39d0bc7e083ctomhudson        , fOrder(-1)
8107544757c9fcf0f359f1686a3779eb2e75dd5b36tomhudson        , fIsFallbackFont(false) { }
82bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
8307544757c9fcf0f359f1686a3779eb2e75dd5b36tomhudson    SkTArray<SkString>                 fNames;
84d3ddea284ec6611a93a6b75e64de39d0bc7e083ctomhudson    SkTArray<FontFileInfo>             fFonts;
8507544757c9fcf0f359f1686a3779eb2e75dd5b36tomhudson    SkLanguage                         fLanguage;
863b6255493e458c6b2c1412af908581f0bf3f6b70djsollen    FontVariant                        fVariant;
87d3ddea284ec6611a93a6b75e64de39d0bc7e083ctomhudson    int                                fOrder; // internal to SkFontConfigParser
8807544757c9fcf0f359f1686a3779eb2e75dd5b36tomhudson    bool                               fIsFallbackFont;
89bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com};
90bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
91bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.comnamespace SkFontConfigParser {
92bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
93bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com/**
94bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com * Parses all system font configuration files and returns the results in an
95bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com * array of FontFamily structures.
96bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com */
97bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.comvoid GetFontFamilies(SkTDArray<FontFamily*> &fontFamilies);
98bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
99bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com/**
100bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com * Parses all test font configuration files and returns the results in an
101bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com * array of FontFamily structures.
102bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com */
103bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.comvoid GetTestFontFamilies(SkTDArray<FontFamily*> &fontFamilies,
104bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com                         const char* testMainConfigFile,
105bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com                         const char* testFallbackConfigFile);
106bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
107bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com} // SkFontConfigParser namespace
108bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com
109bfae9d373ccc9cf47fd70757092962c7850fadf4djsollen@google.com#endif /* SKFONTCONFIGPARSER_ANDROID_H_ */
110