17d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project/* 27d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 37d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * 47d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * you may not use this file except in compliance with the License. 67d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * You may obtain a copy of the License at 77d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * 87d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * 107d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * See the License for the specific language governing permissions and 147d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * limitations under the License. 157d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project */ 167d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 177d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project#ifndef ANDROID_EMOJI_FACTORY_H 187d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project#define ANDROID_EMOJI_FACTORY_H 197d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 207d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Projectnamespace android { 217d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 227d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// Abstract class for EmojiFactory. 237d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// 247d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// Here, PUA (or Android PUA) means Unicode PUA defined for various emoji. The 257d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// PUA supports emoji of DoCoMo, KDDI, Softbank and Goomoji. Each PUA defined 267d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// by the other vendors (careers) are called Vendor Specific PUA (vsp). 277d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// For more information, go 287d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// http://unicode.org/~mdavis/08080r-emoji-proposal/ (tentative) 297d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Projectclass EmojiFactory { 307d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project public: 317d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual ~EmojiFactory() {} 327d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns binary image data corresponding to "pua". The size of binary is 337d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // stored to "size". Returns NULL if there's no mapping from the "pua" to a 347d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // specific image. Currently, image format is all (animated) gif. 357d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // 367d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // TODO(dmiyakawa): there should be a way to tell users the format of the 377d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // binary. 387d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual const char *GetImageBinaryFromAndroidPua(int pua, int *size) = 0; 397d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 407d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns binary image data corresponding to "sjis", which is defined by 417d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // each career. Returns NULL when there's no mapping for "sjis". 427d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual const char *GetImageBinaryFromVendorSpecificSjis(unsigned short sjis, 437d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project int *size) { 447d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project return GetImageBinaryFromAndroidPua( 457d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project GetAndroidPuaFromVendorSpecificSjis(sjis), size); 467d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project } 477d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 487d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns binary image data corresponding to Vendor-specific PUA "vsp". 497d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns NULL when there's no mapping for "vsp". 507d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual const char *GetImageBinaryFromVendorSpecificPua(int vsp, 517d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project int *size) { 527d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project return GetImageBinaryFromAndroidPua( 537d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project GetAndroidPuaFromVendorSpecificPua(vsp), size); 547d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project } 557d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 567d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns Android PUA corresponding to "sjis". Returns -1 when there's no 577d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // mapping from "sjis" to a Android PUA. 587d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual int GetAndroidPuaFromVendorSpecificSjis(unsigned short sjis) = 0; 597d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 607d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns Vendor-specific Shift jis code corresponding to "pua". Returns -1 617d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // when ther's no mapping from "pua" to a specific sjis. 627d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual int GetVendorSpecificSjisFromAndroidPua(int pua) = 0; 637d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 647d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns maximum Vendor-Specific PUA. This is the last valid value. 657d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual int GetMaximumVendorSpecificPua() = 0; 667d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 677d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns minimum Vendor-Specific PUA. 687d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual int GetMinimumVendorSpecificPua() = 0; 697d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 707d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns maximum Android PUA. This the last valid value. 717d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual int GetMaximumAndroidPua() = 0; 727d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 737d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns minimum Android PUA. 747d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual int GetMinimumAndroidPua() = 0; 757d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 767d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns Android PUA corresponding to Vendor-Specific Unicode "vsp". Returns 777d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // -1 when there's no mapping from "vsp" to a Android PUA. 787d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual int GetAndroidPuaFromVendorSpecificPua(int vsp) = 0; 797d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 807d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns Vendor-specific PUA corresponding to "pua". Returns -1 when 817d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // there's no mapping from "pua" to a specific unicode. 827d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual int GetVendorSpecificPuaFromAndroidPua(int pua) = 0; 837d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 847d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Returns non NULL string which defines the name of this factory. 857d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // e.g. "docomo", "goomoji" 867d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project virtual const char *Name() const = 0; 877d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 887d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Get a specific implementation of EmojiFactory. If there's no implementation 897d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // for "name", returns NULL. 90a1d448270a202fbb19131bf50d2f5a3896faef60The Android Open Source Project // The ownership of the instance remains to this class, so users must not 91a1d448270a202fbb19131bf50d2f5a3896faef60The Android Open Source Project // release it. 927d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project static EmojiFactory *GetImplementation(const char *name); 937d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 947d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // Get an implementation of EmojiFactory. This assumes that, usually, there 957d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // should be only one possible EmojiFactory implementation. If there are more 967d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project // than one implementations, most prefered one is returned. 97a1d448270a202fbb19131bf50d2f5a3896faef60The Android Open Source Project // The ownership of the instance remains to this class, so users must not 98a1d448270a202fbb19131bf50d2f5a3896faef60The Android Open Source Project // release it. 997d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project static EmojiFactory *GetAvailableImplementation(); 1007d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project}; 1017d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 1027d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project} // namespace android 1037d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project 1047d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project#endif // ANDROID_EMOJI_FACTORY_H 105