/* * Copyright (C) 2012 The CyanogenMod project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.mms.util; import android.content.Context; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ImageSpan; import com.android.mms.R; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * A class for annotating a CharSequence with spans to convert textual Softbank * and Unicode emojis to graphical ones. The full Unicode proposal is available * here: * {@link "http://www.unicode.org/~scherer/emoji4unicode/snapshot/full.html"} */ public class EmojiParser { // Singleton stuff private static EmojiParser sInstance; public static EmojiParser getInstance() { return sInstance; } public static void init(Context context) { sInstance = new EmojiParser(context); } private final Context mContext; private final Pattern mPattern; private final HashMap<String, Integer> mSmileyToRes; private EmojiParser(Context context) { mContext = context; mSmileyToRes = buildSmileyToRes(); mPattern = buildPattern(); } static class Emojis { private static final int[] sIconIds = { R.drawable.emoji_e415, R.drawable.emoji_e056, R.drawable.emoji_e057, R.drawable.emoji_e414, R.drawable.emoji_e405, R.drawable.emoji_e106, R.drawable.emoji_e418, R.drawable.emoji_e417, R.drawable.emoji_e40d, R.drawable.emoji_e40a, R.drawable.emoji_e404, R.drawable.emoji_e105, R.drawable.emoji_e409, R.drawable.emoji_e40e, R.drawable.emoji_e402, R.drawable.emoji_e108, R.drawable.emoji_e403, R.drawable.emoji_e058, R.drawable.emoji_e407, R.drawable.emoji_e401, R.drawable.emoji_e40f, R.drawable.emoji_e40b, R.drawable.emoji_e406, R.drawable.emoji_e413, R.drawable.emoji_e411, R.drawable.emoji_e412, R.drawable.emoji_e410, R.drawable.emoji_e107, R.drawable.emoji_e059, R.drawable.emoji_e416, R.drawable.emoji_e408, R.drawable.emoji_e40c, R.drawable.emoji_e11a, R.drawable.emoji_e10c, R.drawable.emoji_e32c, R.drawable.emoji_e32a, R.drawable.emoji_e32d, R.drawable.emoji_e328, R.drawable.emoji_e32b, R.drawable.emoji_e022, R.drawable.emoji_e023, R.drawable.emoji_e327, R.drawable.emoji_e329, R.drawable.emoji_e32e, R.drawable.emoji_e32f, R.drawable.emoji_e335, R.drawable.emoji_e334, R.drawable.emoji_e021, R.drawable.emoji_e337, R.drawable.emoji_e020, R.drawable.emoji_e336, R.drawable.emoji_e13c, R.drawable.emoji_e330, R.drawable.emoji_e331, R.drawable.emoji_e326, R.drawable.emoji_e03e, R.drawable.emoji_e11d, R.drawable.emoji_e05a, R.drawable.emoji_e00e, R.drawable.emoji_e421, R.drawable.emoji_e420, R.drawable.emoji_e00d, R.drawable.emoji_e010, R.drawable.emoji_e011, R.drawable.emoji_e41e, R.drawable.emoji_e012, R.drawable.emoji_e422, R.drawable.emoji_e22e, R.drawable.emoji_e22f, R.drawable.emoji_e231, R.drawable.emoji_e230, R.drawable.emoji_e427, R.drawable.emoji_e41d, R.drawable.emoji_e00f, R.drawable.emoji_e41f, R.drawable.emoji_e14c, R.drawable.emoji_e201, R.drawable.emoji_e115, R.drawable.emoji_e428, R.drawable.emoji_e51f, R.drawable.emoji_e429, R.drawable.emoji_e424, R.drawable.emoji_e423, R.drawable.emoji_e253, R.drawable.emoji_e426, R.drawable.emoji_e111, R.drawable.emoji_e425, R.drawable.emoji_e31e, R.drawable.emoji_e31f, R.drawable.emoji_e31d, R.drawable.emoji_e001, R.drawable.emoji_e002, R.drawable.emoji_e005, R.drawable.emoji_e004, R.drawable.emoji_e51a, R.drawable.emoji_e519, R.drawable.emoji_e518, R.drawable.emoji_e515, R.drawable.emoji_e516, R.drawable.emoji_e517, R.drawable.emoji_e51b, R.drawable.emoji_e152, R.drawable.emoji_e04e, R.drawable.emoji_e51c, R.drawable.emoji_e51e, R.drawable.emoji_e11c, R.drawable.emoji_e536, R.drawable.emoji_e003, R.drawable.emoji_e41c, R.drawable.emoji_e41b, R.drawable.emoji_e419, R.drawable.emoji_e41a, R.drawable.emoji_e04a, R.drawable.emoji_e04b, R.drawable.emoji_e049, R.drawable.emoji_e048, R.drawable.emoji_e04c, R.drawable.emoji_e13d, R.drawable.emoji_e443, R.drawable.emoji_e43e, R.drawable.emoji_e04f, R.drawable.emoji_e052, R.drawable.emoji_e053, R.drawable.emoji_e524, R.drawable.emoji_e52c, R.drawable.emoji_e52a, R.drawable.emoji_e531, R.drawable.emoji_e050, R.drawable.emoji_e527, R.drawable.emoji_e051, R.drawable.emoji_e10b, R.drawable.emoji_e52b, R.drawable.emoji_e52f, R.drawable.emoji_e528, R.drawable.emoji_e01a, R.drawable.emoji_e134, R.drawable.emoji_e530, R.drawable.emoji_e529, R.drawable.emoji_e526, R.drawable.emoji_e52d, R.drawable.emoji_e521, R.drawable.emoji_e523, R.drawable.emoji_e52e, R.drawable.emoji_e055, R.drawable.emoji_e525, R.drawable.emoji_e10a, R.drawable.emoji_e109, R.drawable.emoji_e522, R.drawable.emoji_e019, R.drawable.emoji_e054, R.drawable.emoji_e520, R.drawable.emoji_e306, R.drawable.emoji_e030, R.drawable.emoji_e304, R.drawable.emoji_e110, R.drawable.emoji_e032, R.drawable.emoji_e305, R.drawable.emoji_e303, R.drawable.emoji_e118, R.drawable.emoji_e447, R.drawable.emoji_e119, R.drawable.emoji_e307, R.drawable.emoji_e308, R.drawable.emoji_e444, R.drawable.emoji_e441, R.drawable.emoji_e436, R.drawable.emoji_e437, R.drawable.emoji_e438, R.drawable.emoji_e43a, R.drawable.emoji_e439, R.drawable.emoji_e43b, R.drawable.emoji_e117, R.drawable.emoji_e440, R.drawable.emoji_e442, R.drawable.emoji_e446, R.drawable.emoji_e445, R.drawable.emoji_e11b, R.drawable.emoji_e448, R.drawable.emoji_e033, R.drawable.emoji_e112, R.drawable.emoji_e325, R.drawable.emoji_e312, R.drawable.emoji_e310, R.drawable.emoji_e126, R.drawable.emoji_e127, R.drawable.emoji_e008, R.drawable.emoji_e03d, R.drawable.emoji_e00c, R.drawable.emoji_e12a, R.drawable.emoji_e00a, R.drawable.emoji_e00b, R.drawable.emoji_e009, R.drawable.emoji_e316, R.drawable.emoji_e129, R.drawable.emoji_e141, R.drawable.emoji_e142, R.drawable.emoji_e317, R.drawable.emoji_e128, R.drawable.emoji_e14b, R.drawable.emoji_e211, R.drawable.emoji_e114, R.drawable.emoji_e145, R.drawable.emoji_e144, R.drawable.emoji_e03f, R.drawable.emoji_e313, R.drawable.emoji_e116, R.drawable.emoji_e10f, R.drawable.emoji_e104, R.drawable.emoji_e103, R.drawable.emoji_e101, R.drawable.emoji_e102, R.drawable.emoji_e13f, R.drawable.emoji_e140, R.drawable.emoji_e11f, R.drawable.emoji_e12f, R.drawable.emoji_e031, R.drawable.emoji_e30e, R.drawable.emoji_e311, R.drawable.emoji_e113, R.drawable.emoji_e30f, R.drawable.emoji_e13b, R.drawable.emoji_e42b, R.drawable.emoji_e42a, R.drawable.emoji_e018, R.drawable.emoji_e016, R.drawable.emoji_e015, R.drawable.emoji_e014, R.drawable.emoji_e42c, R.drawable.emoji_e42d, R.drawable.emoji_e017, R.drawable.emoji_e013, R.drawable.emoji_e20e, R.drawable.emoji_e20c, R.drawable.emoji_e20f, R.drawable.emoji_e20d, R.drawable.emoji_e131, R.drawable.emoji_e12b, R.drawable.emoji_e130, R.drawable.emoji_e12d, R.drawable.emoji_e324, R.drawable.emoji_e301, R.drawable.emoji_e148, R.drawable.emoji_e502, R.drawable.emoji_e03c, R.drawable.emoji_e30a, R.drawable.emoji_e042, R.drawable.emoji_e040, R.drawable.emoji_e041, R.drawable.emoji_e12c, R.drawable.emoji_e007, R.drawable.emoji_e31a, R.drawable.emoji_e13e, R.drawable.emoji_e31b, R.drawable.emoji_e006, R.drawable.emoji_e302, R.drawable.emoji_e319, R.drawable.emoji_e321, R.drawable.emoji_e322, R.drawable.emoji_e314, R.drawable.emoji_e503, R.drawable.emoji_e10e, R.drawable.emoji_e318, R.drawable.emoji_e43c, R.drawable.emoji_e11e, R.drawable.emoji_e323, R.drawable.emoji_e31c, R.drawable.emoji_e034, R.drawable.emoji_e035, R.drawable.emoji_e045, R.drawable.emoji_e338, R.drawable.emoji_e047, R.drawable.emoji_e30c, R.drawable.emoji_e044, R.drawable.emoji_e30b, R.drawable.emoji_e043, R.drawable.emoji_e120, R.drawable.emoji_e33b, R.drawable.emoji_e33f, R.drawable.emoji_e341, R.drawable.emoji_e34c, R.drawable.emoji_e344, R.drawable.emoji_e342, R.drawable.emoji_e33d, R.drawable.emoji_e33e, R.drawable.emoji_e340, R.drawable.emoji_e34d, R.drawable.emoji_e339, R.drawable.emoji_e147, R.drawable.emoji_e343, R.drawable.emoji_e33c, R.drawable.emoji_e33a, R.drawable.emoji_e43f, R.drawable.emoji_e34b, R.drawable.emoji_e046, R.drawable.emoji_e345, R.drawable.emoji_e346, R.drawable.emoji_e348, R.drawable.emoji_e347, R.drawable.emoji_e34a, R.drawable.emoji_e349, R.drawable.emoji_e036, R.drawable.emoji_e157, R.drawable.emoji_e038, R.drawable.emoji_e153, R.drawable.emoji_e155, R.drawable.emoji_e14d, R.drawable.emoji_e156, R.drawable.emoji_e501, R.drawable.emoji_e158, R.drawable.emoji_e43d, R.drawable.emoji_e037, R.drawable.emoji_e504, R.drawable.emoji_e44a, R.drawable.emoji_e146, R.drawable.emoji_e50a, R.drawable.emoji_e505, R.drawable.emoji_e506, R.drawable.emoji_e122, R.drawable.emoji_e508, R.drawable.emoji_e509, R.drawable.emoji_e03b, R.drawable.emoji_e04d, R.drawable.emoji_e449, R.drawable.emoji_e44b, R.drawable.emoji_e51d, R.drawable.emoji_e44c, R.drawable.emoji_e124, R.drawable.emoji_e121, R.drawable.emoji_e433, R.drawable.emoji_e202, R.drawable.emoji_e135, R.drawable.emoji_e01c, R.drawable.emoji_e01d, R.drawable.emoji_e10d, R.drawable.emoji_e136, R.drawable.emoji_e42e, R.drawable.emoji_e01b, R.drawable.emoji_e15a, R.drawable.emoji_e159, R.drawable.emoji_e432, R.drawable.emoji_e430, R.drawable.emoji_e431, R.drawable.emoji_e42f, R.drawable.emoji_e01e, R.drawable.emoji_e039, R.drawable.emoji_e435, R.drawable.emoji_e01f, R.drawable.emoji_e125, R.drawable.emoji_e03a, R.drawable.emoji_e14e, R.drawable.emoji_e252, R.drawable.emoji_e137, R.drawable.emoji_e209, R.drawable.emoji_e154, R.drawable.emoji_e133, R.drawable.emoji_e150, R.drawable.emoji_e320, R.drawable.emoji_e123, R.drawable.emoji_e132, R.drawable.emoji_e143, R.drawable.emoji_e50b, R.drawable.emoji_e514, R.drawable.emoji_e513, R.drawable.emoji_e50c, R.drawable.emoji_e50d, R.drawable.emoji_e511, R.drawable.emoji_e50f, R.drawable.emoji_e512, R.drawable.emoji_e510, R.drawable.emoji_e50e, R.drawable.emoji_e21c, R.drawable.emoji_e21d, R.drawable.emoji_e21e, R.drawable.emoji_e21f, R.drawable.emoji_e220, R.drawable.emoji_e221, R.drawable.emoji_e222, R.drawable.emoji_e223, R.drawable.emoji_e224, R.drawable.emoji_e225, R.drawable.emoji_e210, R.drawable.emoji_e232, R.drawable.emoji_e233, R.drawable.emoji_e235, R.drawable.emoji_e234, R.drawable.emoji_e236, R.drawable.emoji_e237, R.drawable.emoji_e238, R.drawable.emoji_e239, R.drawable.emoji_e23b, R.drawable.emoji_e23a, R.drawable.emoji_e23d, R.drawable.emoji_e23c, R.drawable.emoji_e24d, R.drawable.emoji_e212, R.drawable.emoji_e24c, R.drawable.emoji_e213, R.drawable.emoji_e214, R.drawable.emoji_e507, R.drawable.emoji_e203, R.drawable.emoji_e20b, R.drawable.emoji_e22a, R.drawable.emoji_e22b, R.drawable.emoji_e226, R.drawable.emoji_e227, R.drawable.emoji_e22c, R.drawable.emoji_e22d, R.drawable.emoji_e215, R.drawable.emoji_e216, R.drawable.emoji_e217, R.drawable.emoji_e218, R.drawable.emoji_e228, R.drawable.emoji_e151, R.drawable.emoji_e138, R.drawable.emoji_e139, R.drawable.emoji_e13a, R.drawable.emoji_e208, R.drawable.emoji_e14f, R.drawable.emoji_e20a, R.drawable.emoji_e434, R.drawable.emoji_e309, R.drawable.emoji_e315, R.drawable.emoji_e30d, R.drawable.emoji_e207, R.drawable.emoji_e229, R.drawable.emoji_e206, R.drawable.emoji_e205, R.drawable.emoji_e204, R.drawable.emoji_e12e, R.drawable.emoji_e250, R.drawable.emoji_e251, R.drawable.emoji_e14a, R.drawable.emoji_e149, R.drawable.emoji_e23f, R.drawable.emoji_e240, R.drawable.emoji_e241, R.drawable.emoji_e242, R.drawable.emoji_e243, R.drawable.emoji_e244, R.drawable.emoji_e245, R.drawable.emoji_e246, R.drawable.emoji_e247, R.drawable.emoji_e248, R.drawable.emoji_e249, R.drawable.emoji_e24a, R.drawable.emoji_e24b, R.drawable.emoji_e23e, R.drawable.emoji_e532, R.drawable.emoji_e533, R.drawable.emoji_e534, R.drawable.emoji_e535, R.drawable.emoji_e21a, R.drawable.emoji_e219, R.drawable.emoji_e21b, R.drawable.emoji_e02f, R.drawable.emoji_e024, R.drawable.emoji_e025, R.drawable.emoji_e026, R.drawable.emoji_e027, R.drawable.emoji_e028, R.drawable.emoji_e029, R.drawable.emoji_e02a, R.drawable.emoji_e02b, R.drawable.emoji_e02c, R.drawable.emoji_e02d, R.drawable.emoji_e02e, R.drawable.emoji_e332, R.drawable.emoji_e333, R.drawable.emoji_e24e, R.drawable.emoji_e24f, R.drawable.emoji_e537 }; public static int getSmileyResource(int which) { return sIconIds[which]; } } // NOTE: if you change anything about this array, you must make the // corresponding change in both the string array: default_smiley_texts in // res/values/arrays.xml // You also need to update the unified emoji table in mEmojiTexts public static int[] DEFAULT_EMOJI_RES_IDS; /** * @deprecated these private characters should not be used, and are only * here to retain compatibility with previous implementation of * emoji support */ public static final String[] mSoftbankEmojiTexts = { "\ue415", "\ue056", "\ue057", "\ue414", "\ue405", "\ue106", "\ue418", "\ue417", "\ue40d", "\ue40a", "\ue404", "\ue105", "\ue409", "\ue40e", "\ue402", "\ue108", "\ue403", "\ue058", "\ue407", "\ue401", "\ue40f", "\ue40b", "\ue406", "\ue413", "\ue411", "\ue412", "\ue410", "\ue107", "\ue059", "\ue416", "\ue408", "\ue40c", "\ue11a", "\ue10c", "\ue32c", "\ue32a", "\ue32d", "\ue328", "\ue32b", "\ue022", "\ue023", "\ue327", "\ue329", "\ue32e", "\ue32f", "\ue335", "\ue334", "\ue021", "\ue337", "\ue020", "\ue336", "\ue13c", "\ue330", "\ue331", "\ue326", "\ue03e", "\ue11d", "\ue05a", "\ue00e", "\ue421", "\ue420", "\ue00d", "\ue010", "\ue011", "\ue41e", "\ue012", "\ue422", "\ue22e", "\ue22f", "\ue231", "\ue230", "\ue427", "\ue41d", "\ue00f", "\ue41f", "\ue14c", "\ue201", "\ue115", "\ue428", "\ue51f", "\ue429", "\ue424", "\ue423", "\ue253", "\ue426", "\ue111", "\ue425", "\ue31e", "\ue31f", "\ue31d", "\ue001", "\ue002", "\ue005", "\ue004", "\ue51a", "\ue519", "\ue518", "\ue515", "\ue516", "\ue517", "\ue51b", "\ue152", "\ue04e", "\ue51c", "\ue51e", "\ue11c", "\ue536", "\ue003", "\ue41c", "\ue41b", "\ue419", "\ue41a", "\ue04a", "\ue04b", "\ue049", "\ue048", "\ue04c", "\ue13d", "\ue443", "\ue43e", "\ue04f", "\ue052", "\ue053", "\ue524", "\ue52c", "\ue52a", "\ue531", "\ue050", "\ue527", "\ue051", "\ue10b", "\ue52b", "\ue52f", "\ue528", "\ue01a", "\ue134", "\ue530", "\ue529", "\ue526", "\ue52d", "\ue521", "\ue523", "\ue52e", "\ue055", "\ue525", "\ue10a", "\ue109", "\ue522", "\ue019", "\ue054", "\ue520", "\ue306", "\ue030", "\ue304", "\ue110", "\ue032", "\ue305", "\ue303", "\ue118", "\ue447", "\ue119", "\ue307", "\ue308", "\ue444", "\ue441", "\ue436", "\ue437", "\ue438", "\ue43a", "\ue439", "\ue43b", "\ue117", "\ue440", "\ue442", "\ue446", "\ue445", "\ue11b", "\ue448", "\ue033", "\ue112", "\ue325", "\ue312", "\ue310", "\ue126", "\ue127", "\ue008", "\ue03d", "\ue00c", "\ue12a", "\ue00a", "\ue00b", "\ue009", "\ue316", "\ue129", "\ue141", "\ue142", "\ue317", "\ue128", "\ue14b", "\ue211", "\ue114", "\ue145", "\ue144", "\ue03f", "\ue313", "\ue116", "\ue10f", "\ue104", "\ue103", "\ue101", "\ue102", "\ue13f", "\ue140", "\ue11f", "\ue12f", "\ue031", "\ue30e", "\ue311", "\ue113", "\ue30f", "\ue13b", "\ue42b", "\ue42a", "\ue018", "\ue016", "\ue015", "\ue014", "\ue42c", "\ue42d", "\ue017", "\ue013", "\ue20e", "\ue20c", "\ue20f", "\ue20d", "\ue131", "\ue12b", "\ue130", "\ue12d", "\ue324", "\ue301", "\ue148", "\ue502", "\ue03c", "\ue30a", "\ue042", "\ue040", "\ue041", "\ue12c", "\ue007", "\ue31a", "\ue13e", "\ue31b", "\ue006", "\ue302", "\ue319", "\ue321", "\ue322", "\ue314", "\ue503", "\ue10e", "\ue318", "\ue43c", "\ue11e", "\ue323", "\ue31c", "\ue034", "\ue035", "\ue045", "\ue338", "\ue047", "\ue30c", "\ue044", "\ue30b", "\ue043", "\ue120", "\ue33b", "\ue33f", "\ue341", "\ue34c", "\ue344", "\ue342", "\ue33d", "\ue33e", "\ue340", "\ue34d", "\ue339", "\ue147", "\ue343", "\ue33c", "\ue33a", "\ue43f", "\ue34b", "\ue046", "\ue345", "\ue346", "\ue348", "\ue347", "\ue34a", "\ue349", "\ue036", "\ue157", "\ue038", "\ue153", "\ue155", "\ue14d", "\ue156", "\ue501", "\ue158", "\ue43d", "\ue037", "\ue504", "\ue44a", "\ue146", "\ue50a", "\ue505", "\ue506", "\ue122", "\ue508", "\ue509", "\ue03b", "\ue04d", "\ue449", "\ue44b", "\ue51d", "\ue44c", "\ue124", "\ue121", "\ue433", "\ue202", "\ue135", "\ue01c", "\ue01d", "\ue10d", "\ue136", "\ue42e", "\ue01b", "\ue15a", "\ue159", "\ue432", "\ue430", "\ue431", "\ue42f", "\ue01e", "\ue039", "\ue435", "\ue01f", "\ue125", "\ue03a", "\ue14e", "\ue252", "\ue137", "\ue209", "\ue154", "\ue133", "\ue150", "\ue320", "\ue123", "\ue132", "\ue143", "\ue50b", "\ue514", "\ue513", "\ue50c", "\ue50d", "\ue511", "\ue50f", "\ue512", "\ue510", "\ue50e", "\u0031\u20e3", "\ue21d", "\ue21e", "\ue21f", "\ue220", "\ue221", "\ue222", "\ue223", "\ue224", "\ue225", "\u0023\u20e3", "\ue232", "\ue233", "\ue235", "\ue234", "\ue236", "\ue237", "\ue238", "\ue239", "\ue23b", "\ue23a", "\ue23d", "\ue23c", "\ue24d", "\ue212", "\ue24c", "\ue213", "\ue214", "\ue507", "\ue203", "\ue20b", "\ue22a", "\ue22b", "\ue226", "\ue227", "\ue22c", "\ue22d", "\ue215", "\ue216", "\ue217", "\ue218", "\ue228", "\ue151", "\ue138", "\ue139", "\ue13a", "\ue208", "\ue14f", "\ue20a", "\ue434", "\ue309", "\ue315", "\ue30d", "\ue207", "\ue229", "\ue206", "\ue205", "\ue204", "\ue12e", "\ue250", "\ue251", "\ue14a", "\ue149", "\ue23f", "\ue240", "\ue241", "\ue242", "\ue243", "\ue244", "\ue245", "\ue246", "\ue247", "\ue248", "\ue249", "\ue24a", "\ue24b", "\ue23e", "\ue532", "\ue533", "\ue534", "\ue535", "\ue21a", "\ue219", "\ue21b", "\ue02f", "\ue024", "\ue025", "\ue026", "\ue027", "\ue028", "\ue029", "\ue02a", "\ue02b", "\ue02c", "\ue02d", "\ue02e", "\ue332", "\ue333", "\ue24e", "\ue24f", "\ue537" }; public static final String[] mEmojiTexts = { // Beginning of section 1 (Smileys) "\uD83D\uDE04", // Softbank: E415 - Unified: 1F604 "\uD83D\uDE0A", // Softbank: E056 - Unified: 1F60A "\uD83D\uDE03", // Softbank: E057 - Unified: 1F603 "\u263A", // Softbank: E414 - Unified: 263A "\uD83D\uDE09", // Softbank: E405 - Unified: 1F609 "\uD83D\uDE0D", // Softbank: E106 - Unified: 1F60D "\uD83D\uDE18", // Softbank: E418 - Unified: 1F618 "\uD83D\uDE1A", // Softbank: E417 - Unified: 1F61A "\uD83D\uDE33", // Softbank: E40D - Unified: 1F633 "\uD83D\uDE0C", // Softbank: E40A - Unified: 1F60C "\uD83D\uDE01", // Softbank: E404 - Unified: 1F601 "\uD83D\uDE1C", // Softbank: E105 - Unified: 1F61C "\uD83D\uDE1D", // Softbank: E409 - Unified: 1F61D "\uD83D\uDE12", // Softbank: E40E - Unified: 1F612 "\uD83D\uDE0F", // Softbank: E402 - Unified: 1F60F "\uD83D\uDE13", // Softbank: E108 - Unified: 1F613 "\uD83D\uDE14", // Softbank: E403 - Unified: 1F614 "\uD83D\uDE1E", // Softbank: E058 - Unified: 1F61E "\uD83D\uDE16", // Softbank: E407 - Unified: 1F616 "\uD83D\uDE25", // Softbank: E401 - Unified: 1F625 "\uD83D\uDE30", // Softbank: E40F - Unified: 1F630 "\uD83D\uDE28", // Softbank: E40B - Unified: 1F628 "\uD83D\uDE23", // Softbank: E406 - Unified: 1F623 "\uD83D\uDE22", // Softbank: E413 - Unified: 1F622 "\uD83D\uDE2D", // Softbank: E411 - Unified: 1F62D "\uD83D\uDE02", // Softbank: E412 - Unified: 1F602 "\uD83D\uDE32", // Softbank: E410 - Unified: 1F632 "\uD83D\uDE31", // Softbank: E107 - Unified: 1F631 "\uD83D\uDE20", // Softbank: E059 - Unified: 1F620 "\uD83D\uDE21", // Softbank: E416 - Unified: 1F621 "\uD83D\uDE2A", // Softbank: E408 - Unified: 1F62A "\uD83D\uDE37", // Softbank: E40C - Unified: 1F637 "\uD83D\uDC7F", // Softbank: E11A - Unified: 1F47F "\uD83D\uDC7D", // Softbank: E10C - Unified: 1F47D "\uD83D\uDC9B", // Softbank: E32C - Unified: 1F49B "\uD83D\uDC99", // Softbank: E32A - Unified: 1F499 "\uD83D\uDC9C", // Softbank: E32D - Unified: 1F49C "\uD83D\uDC97", // Softbank: E328 - Unified: 1F497 "\uD83D\uDC9A", // Softbank: E32B - Unified: 1F49A "\u2764", // Softbank: E022 - Unified: 2764 "\uD83D\uDC94", // Softbank: E023 - Unified: 1F494 "\uD83D\uDC93", // Softbank: E327 - Unified: 1F493 "\uD83D\uDC98", // Softbank: E329 - Unified: 1F498 "\u2728", // Softbank: E32E - Unified: 2728 "\u2B50", // Softbank: E32F - Unified: 2B50 "\uD83C\uDF1F", // Softbank: E335 - Unified: 1F31F "\uD83D\uDCA2", // Softbank: E334 - Unified: 1F4A2 "\u2757", // Softbank: E021 - Unified: 2757 "\u2755", // Softbank: E337 - Unified: 2755 "\u2753", // Softbank: E020 - Unified: 2753 "\u2754", // Softbank: E336 - Unified: 2754 "\uD83D\uDCA4", // Softbank: E13C - Unified: 1F4A4 "\uD83D\uDCA8", // Softbank: E330 - Unified: 1F4A8 "\uD83D\uDE05", // Softbank: E331 - Unified: 1F605 "\uD83C\uDFB6", // Softbank: E326 - Unified: 1F3B6 "\uD83C\uDFB5", // Softbank: E03E - Unified: 1F3B5 "\uD83D\uDD25", // Softbank: E11D - Unified: 1F525 "\uD83D\uDCA9", // Softbank: E05A - Unified: 1F4A9 "\uD83D\uDC4D", // Softbank: E00E - Unified: 1F44D "\uD83D\uDC4E", // Softbank: E421 - Unified: 1F44E "\uD83D\uDC4C", // Softbank: E420 - Unified: 1F44C "\uD83D\uDC4A", // Softbank: E00D - Unified: 1F44A "\u270A", // Softbank: E010 - Unified: 270A "\u270C", // Softbank: E011 - Unified: 270C "\uD83D\uDC4B", // Softbank: E41E - Unified: 1F44B "\u270B", // Softbank: E012 - Unified: 1F64B "\uD83D\uDC50", // Softbank: E422 - Unified: 1F450 "\uD83D\uDC46", // Softbank: E22E - Unified: 1F446 "\uD83D\uDC47", // Softbank: E22F - Unified: 1F447 "\uD83D\uDC49", // Softbank: E231 - Unified: 1F449 "\uD83D\uDC48", // Softbank: E230 - Unified: 1F448 "\uD83D\uDE4C", // Softbank: E427 - Unified: 1F64C "\uD83D\uDE4F", // Softbank: E41D - Unified: 1F64F "\u261D", // Softbank: E00F - Unified: 261D "\uD83D\uDC4F", // Softbank: E41F - Unified: 1F44F "\uD83D\uDCAA", // Softbank: E14C - Unified: 1F4AA "\uD83D\uDEB6", // Softbank: E201 - Unified: 1F6B6 "\uD83C\uDFC3", // Softbank: E115 - Unified: 1F3C3 "\uD83D\uDC6B", // Softbank: E428 - Unified: 1F46B "\uD83D\uDC83", // Softbank: E51F - Unified: 1F483 "\uD83D\uDC6F", // Softbank: E429 - Unified: 1F46F "\uD83D\uDE46", // Softbank: E424 - Unified: 1F646 "\uD83D\uDE45", // Softbank: E423 - Unified: 1F645 "\uD83D\uDC81", // Softbank: E253 - Unified: 1F481 "\uD83D\uDE47", // Softbank: E426 - Unified: 1F647 "\uD83D\uDC8F", // Softbank: E111 - Unified: 1F48F "\uD83D\uDC91", // Softbank: E425 - Unified: 1F491 "\uD83D\uDC86", // Softbank: E31E - Unified: 1F486 "\uD83D\uDC87", // Softbank: E31F - Unified: 1F487 "\uD83D\uDC85", // Softbank: E31D - Unified: 1F485 "\uD83D\uDC66", // Softbank: E001 - Unified: 1F466 "\uD83D\uDC67", // Softbank: E002 - Unified: 1F467 "\uD83D\uDC69", // Softbank: E005 - Unified: 1F469 "\uD83D\uDC68", // Softbank: E004 - Unified: 1F468 "\uD83D\uDC76", // Softbank: E51A - Unified: 1F476 "\uD83D\uDC75", // Softbank: E519 - Unified: 1F475 "\uD83D\uDC74", // Softbank: E518 - Unified: 1F474 "\uD83D\uDC71", // Softbank: E515 - Unified: 1F471 "\uD83D\uDC72", // Softbank: E516 - Unified: 1F472 "\uD83D\uDC73", // Softbank: E517 - Unified: 1F473 "\uD83D\uDC77", // Softbank: E51B - Unified: 1F477 "\uD83D\uDC6E", // Softbank: E152 - Unified: 1F46E "\uD83D\uDC7C", // Softbank: E04E - Unified: 1F47C "\uD83D\uDC78", // Softbank: E51C - Unified: 1F478 "\uD83D\uDC82", // Softbank: E51E - Unified: 1F482 "\uD83D\uDC80", // Softbank: E11C - Unified: 1F480 "\uD83D\uDC3E", // Softbank: E536 - Unified: 1F43E "\uD83D\uDC8B", // Softbank: E003 - Unified: 1F48B "\uD83D\uDC44", // Softbank: E41C - Unified: 1F444 "\uD83D\uDC42", // Softbank: E41B - Unified: 1F442 "\uD83D\uDC40", // Softbank: E419 - Unified: 1F440 "\uD83D\uDC43", // Softbank: E41A - Unified: 1F443 // Beginning of section 2 (Nature) "\u2600", // Softbank: E04A - Unified: 2600 "\u2614", // Softbank: E04B - Unified: 2614 "\u2601", // Softbank: E049 - Unified: 2601 "\u26C4", // Softbank: E048 - Unified: 26C4 "\uD83C\uDF19", // Softbank: E04C - Unified: 1F319 "\u26A1", // Softbank: E13D - Unified: 26A1 "\uD83C\uDF00", // Softbank: E443 - Unified: 1F300 "\uD83C\uDF0A", // Softbank: E43E - Unified: 1F30A "\uD83D\uDC31", // Softbank: E04F - Unified: 1F431 "\uD83D\uDC36", // Softbank: E052 - Unified: 1F436 "\uD83D\uDC2D", // Softbank: E053 - Unified: 1F42D "\uD83D\uDC39", // Softbank: E524 - Unified: 1F439 "\uD83D\uDC30", // Softbank: E52C - Unified: 1F430 "\uD83D\uDC3A", // Softbank: E52A - Unified: 1F43A "\uD83D\uDC38", // Softbank: E531 - Unified: 1F438 "\uD83D\uDC2F", // Softbank: E050 - Unified: 1F42F "\uD83D\uDC28", // Softbank: E527 - Unified: 1F428 "\uD83D\uDC3B", // Softbank: E051 - Unified: 1F43B "\uD83D\uDC37", // Softbank: E10B - Unified: 1F437 "\uD83D\uDC2E", // Softbank: E52B - Unified: 1F42E "\uD83D\uDC17", // Softbank: E52F - Unified: 1F417 "\uD83D\uDC12", // Softbank: E528 - Unified: 1F412 "\uD83D\uDC34", // Softbank: E01A - Unified: 1F434 "\uD83D\uDC0E", // Softbank: E134 - Unified: 1F40E "\uD83D\uDC2B", // Softbank: E530 - Unified: 1F42B "\uD83D\uDC11", // Softbank: E529 - Unified: 1F411 "\uD83D\uDC18", // Softbank: E526 - Unified: 1F418 "\uD83D\uDC0D", // Softbank: E52D - Unified: 1F40D "\uD83D\uDC26", // Softbank: E521 - Unified: 1F426 "\uD83D\uDC24", // Softbank: E523 - Unified: 1F424 "\uD83D\uDC14", // Softbank: E52E - Unified: 1F414 "\uD83D\uDC27", // Softbank: E055 - Unified: 1F427 "\uD83D\uDC1B", // Softbank: E525 - Unified: 1F41B "\uD83D\uDC19", // Softbank: E10A - Unified: 1F419 "\uD83D\uDC35", // Softbank: E109 - Unified: 1F435 "\uD83D\uDC20", // Softbank: E522 - Unified: 1F420 "\uD83D\uDC1F", // Softbank: E019 - Unified: 1F41F "\uD83D\uDC33", // Softbank: E054 - Unified: 1F433 "\uD83D\uDC2C", // Softbank: E520 - Unified: 1F42C "\uD83D\uDC90", // Softbank: E306 - Unified: 1F490 "\uD83C\uDF38", // Softbank: E030 - Unified: 1F338 "\uD83C\uDF37", // Softbank: E304 - Unified: 1F337 "\uD83C\uDF40", // Softbank: E110 - Unified: 1F340 "\uD83C\uDF39", // Softbank: E032 - Unified: 1F339 "\uD83C\uDF3B", // Softbank: E305 - Unified: 1F33B "\uD83C\uDF3A", // Softbank: E303 - Unified: 1F33A "\uD83C\uDF41", // Softbank: E118 - Unified: 1F341 "\uD83C\uDF43", // Softbank: E447 - Unified: 1F343 "\uD83C\uDF42", // Softbank: E119 - Unified: 1F342 "\uD83C\uDF34", // Softbank: E307 - Unified: 1F334 "\uD83C\uDF35", // Softbank: E308 - Unified: 1F335 "\uD83C\uDF3E", // Softbank: E444 - Unified: 1F33E "\uD83D\uDC1A", // Softbank: E441 - Unified: 1F41A // Beginning of section 3 (Misc) "\uD83C\uDF8D", // Softbank: E436 - Unified: 1F38D "\uD83D\uDC9D", // Softbank: E437 - Unified: 1F49D "\uD83C\uDF8E", // Softbank: E438 - Unified: 1F38E "\uD83C\uDF92", // Softbank: E43A - Unified: 1F392 "\uD83C\uDF93", // Softbank: E439 - Unified: 1F393 "\uD83C\uDF8F", // Softbank: E43B - Unified: 1F38F "\uD83C\uDF86", // Softbank: E117 - Unified: 1F386 "\uD83C\uDF87", // Softbank: E440 - Unified: 1F387 "\uD83C\uDF90", // Softbank: E442 - Unified: 1F390 "\uD83C\uDF91", // Softbank: E446 - Unified: 1F391 "\uD83C\uDF83", // Softbank: E445 - Unified: 1F383 "\uD83D\uDC7B", // Softbank: E11B - Unified: 1F47B "\uD83C\uDF85", // Softbank: E448 - Unified: 1F385 "\uD83C\uDF84", // Softbank: E033 - Unified: 1F384 "\uD83C\uDF81", // Softbank: E112 - Unified: 1F381 "\uD83D\uDD14", // Softbank: E325 - Unified: 1F514 "\uD83C\uDF89", // Softbank: E312 - Unified: 1F389 "\uD83C\uDF88", // Softbank: E310 - Unified: 1F388 "\uD83D\uDCBF", // Softbank: E126 - Unified: 1F4BF "\uD83D\uDCC0", // Softbank: E127 - Unified: 1F4C0 "\uD83D\uDCF7", // Softbank: E008 - Unified: 1F4F7 "\uD83C\uDFA5", // Softbank: E03D - Unified: 1F4F9 "\uD83D\uDCBB", // Softbank: E00C - Unified: 1F4BB "\uD83D\uDCFA", // Softbank: E12A - Unified: 1F4FA "\uD83D\uDCF1", // Softbank: E00A - Unified: 1F4F1 "\uD83D\uDCE0", // Softbank: E00B - Unified: 1F4E0 "\u260E", // Softbank: E009 - Unified: 260E "\uD83D\uDCBD", // Softbank: E316 - Unified: 1F4BD "\uD83D\uDCFC", // Softbank: E129 - Unified: 1F4FC "\uD83D\uDD0A", // Softbank: E141 - Unified: 1F50A "\uD83D\uDCE2", // Softbank: E142 - Unified: 1F4E2 "\uD83D\uDCE3", // Softbank: E317 - Unified: 1F4E3 "\uD83D\uDCFB", // Softbank: E128 - Unified: 1F4FB "\uD83D\uDCE1", // Softbank: E14B - Unified: 1F4E1 "\u27BF", // Softbank: E211 - Unified: 27BF "\uD83D\uDD0D", // Softbank: E114 - Unified: 1F50D "\uD83D\uDD13", // Softbank: E145 - Unified: 1F513 "\uD83D\uDD12", // Softbank: E144 - Unified: 1F512 "\uD83D\uDD11", // Softbank: E03F - Unified: 1F511 "\u2702", // Softbank: E313 - Unified: 2702 "\uD83D\uDD28", // Softbank: E116 - Unified: 1F528 "\uD83D\uDCA1", // Softbank: E10F - Unified: 1F4A1 "\uD83D\uDCF2", // Softbank: E104 - Unified: 1F4F2 "\uD83D\uDCE9", // Softbank: E103 - Unified: 1F4E9 "\uD83D\uDCEB", // Softbank: E101 - Unified: 1F4EB "\uD83D\uDCEE", // Softbank: E102 - Unified: 1F4EE "\uD83D\uDEC0", // Softbank: E13F - Unified: 1F6C0 "\uD83D\uDEBD", // Softbank: E140 - Unified: 1F6BD "\uD83D\uDCBA", // Softbank: E11F - Unified: 1F4BA "\uD83D\uDCB0", // Softbank: E12F - Unified: 1F4B0 "\uD83D\uDD31", // Softbank: E031 - Unified: 1F531 "\uD83D\uDEAC", // Softbank: E30E - Unified: 1F6AC "\uD83D\uDCA3", // Softbank: E311 - Unified: 1F4A3 "\uD83D\uDD2B", // Softbank: E113 - Unified: 1F52B "\uD83D\uDC8A", // Softbank: E30F - Unified: 1F48A "\uD83D\uDC89", // Softbank: E13B - Unified: 1F489 "\uD83C\uDFC8", // Softbank: E42B - Unified: 1F3C8 "\uD83C\uDFC0", // Softbank: E42A - Unified: 1F3C0 "\u26BD", // Softbank: E018 - Unified: 26BD "\u26BE", // Softbank: E016 - Unified: 26BE "\uD83C\uDFBE", // Softbank: E015 - Unified: 1F3BE "\u26F3", // Softbank: E014 - Unified: 26F3 "\uD83C\uDFB1", // Softbank: E42C - Unified: 1F3B1 "\uD83C\uDFCA", // Softbank: E42D - Unified: 1F3CA "\uD83C\uDFC4", // Softbank: E017 - Unified: 1F3C4 "\uD83C\uDFBF", // Softbank: E013 - Unified: 1F3BF "\u2660", // Softbank: E20E - Unified: 2660 "\u2665", // Softbank: E20C - Unified: 2665 "\u2663", // Softbank: E20F - Unified: 2663 "\u2666", // Softbank: E20D - Unified: 2666 "\uD83C\uDFC6", // Softbank: E131 - Unified: 1F3C6 "\uD83D\uDC7E", // Softbank: E12B - Unified: 1F47E "\uD83C\uDFAF", // Softbank: E130 - Unified: 1F3AF "\uD83C\uDC04", // Softbank: E12D - Unified: 1F004 "\uD83C\uDFAC", // Softbank: E324 - Unified: 1F3AC "\uD83D\uDCDD", // Softbank: E301 - Unified: 1F4DD "\uD83D\uDCD3", // Softbank: E148 - Unified: 1F4D3 "\uD83C\uDFA8", // Softbank: E502 - Unified: 1F3A8 "\uD83C\uDFA4", // Softbank: E03C - Unified: 1F3A4 "\uD83C\uDFA7", // Softbank: E30A - Unified: 1F3A7 "\uD83C\uDFBA", // Softbank: E042 - Unified: 1F3BA "\uD83C\uDFB7", // Softbank: E040 - Unified: 1F3B7 "\uD83C\uDFB8", // Softbank: E041 - Unified: 1F3B8 "\u303D", // Softbank: E12C - Unified: 303D "\uD83D\uDC5E", // Softbank: E007 - Unified: 1F45E "\uD83D\uDC61", // Softbank: E31A - Unified: 1F461 "\uD83D\uDC60", // Softbank: E13E - Unified: 1F460 "\uD83D\uDC62", // Softbank: E31B - Unified: 1F462 "\uD83D\uDC55", // Softbank: E006 - Unified: 1F455 "\uD83D\uDC54", // Softbank: E302 - Unified: 1F454 "\uD83D\uDC57", // Softbank: E319 - Unified: 1F457 "\uD83D\uDC58", // Softbank: E321 - Unified: 1F458 "\uD83D\uDC59", // Softbank: E322 - Unified: 1F459 "\uD83C\uDF80", // Softbank: E314 - Unified: 1F380 "\uD83C\uDFA9", // Softbank: E503 - Unified: 1F3A9 "\uD83D\uDC51", // Softbank: E10E - Unified: 1F451 "\uD83D\uDC52", // Softbank: E318 - Unified: 1F452 "\uD83C\uDF02", // Softbank: E43C - Unified: 1F302 "\uD83D\uDCBC", // Softbank: E11E - Unified: 1F4BC "\uD83D\uDC5C", // Softbank: E323 - Unified: 1F45C "\uD83D\uDC84", // Softbank: E31C - Unified: 1F484 "\uD83D\uDC8D", // Softbank: E034 - Unified: 1F48D "\uD83D\uDC8E", // Softbank: E035 - Unified: 1F48E "\u2615", // Softbank: E045 - Unified: 2615 "\uD83C\uDF75", // Softbank: E338 - Unified: 1F375 "\uD83C\uDF7A", // Softbank: E047 - Unified: 1F37A "\uD83C\uDF7B", // Softbank: E30C - Unified: 1F37B "\uD83C\uDF78", // Softbank: E044 - Unified: 1F378 "\uD83C\uDF76", // Softbank: E30B - Unified: 1F376 "\uD83C\uDF74", // Softbank: E043 - Unified: 1F374 "\uD83C\uDF54", // Softbank: E120 - Unified: 1F354 "\uD83C\uDF5F", // Softbank: E33B - Unified: 1F35F "\uD83C\uDF5D", // Softbank: E33F - Unified: 1F35D "\uD83C\uDF5B", // Softbank: E341 - Unified: 1F35B "\uD83C\uDF71", // Softbank: E34C - Unified: 1F371 "\uD83C\uDF63", // Softbank: E344 - Unified: 1F363 "\uD83C\uDF59", // Softbank: E342 - Unified: 1F359 "\uD83C\uDF58", // Softbank: E33D - Unified: 1F358 "\uD83C\uDF5A", // Softbank: E33E - Unified: 1F35A "\uD83C\uDF5C", // Softbank: E340 - Unified: 1F35C "\uD83C\uDF72", // Softbank: E34D - Unified: 1F372 "\uD83C\uDF5E", // Softbank: E339 - Unified: 1F35E "\uD83C\uDF73", // Softbank: E147 - Unified: 1F373 "\uD83C\uDF62", // Softbank: E343 - Unified: 1F362 "\uD83C\uDF61", // Softbank: E33C - Unified: 1F361 "\uD83C\uDF66", // Softbank: E33A - Unified: 1F366 "\uD83C\uDF67", // Softbank: E43F - Unified: 1F367 "\uD83C\uDF82", // Softbank: E34B - Unified: 1F382 "\uD83C\uDF70", // Softbank: E046 - Unified: 1F370 "\uD83C\uDF4E", // Softbank: E345 - Unified: 1F34E "\uD83C\uDF4A", // Softbank: E346 - Unified: 1F34A "\uD83C\uDF49", // Softbank: E348 - Unified: 1F349 "\uD83C\uDF53", // Softbank: E347 - Unified: 1F353 "\uD83C\uDF46", // Softbank: E34A - Unified: 1F346 "\uD83C\uDF45", // Softbank: E349 - Unified: 1F345 // Beginning of section 4 (Buildings) "\uD83C\uDFE0", // Softbank: E036 - Unified: 1F3E0 "\uD83C\uDFEB", // Softbank: E157 - Unified: 1F3EB "\uD83C\uDFE2", // Softbank: E038 - Unified: 1F3E2 "\uD83C\uDFE3", // Softbank: E153 - Unified: 1F3E3 "\uD83C\uDFE5", // Softbank: E155 - Unified: 1F3E5 "\uD83C\uDFE6", // Softbank: E14D - Unified: 1F3E6 "\uD83C\uDFEA", // Softbank: E156 - Unified: 1F3EA "\uD83C\uDFE9", // Softbank: E501 - Unified: 1F3E9 "\uD83C\uDFE8", // Softbank: E158 - Unified: 1F3E8 "\uD83D\uDC92", // Softbank: E43D - Unified: 1F492 "\u26EA", // Softbank: E037 - Unified: 26EA "\uD83C\uDFEC", // Softbank: E504 - Unified: 1F3EC "\uD83C\uDF07", // Softbank: E44A - Unified: 1F307 "\uD83C\uDF06", // Softbank: E146 - Unified: 1F306 "\uD83C\uDFE7", // Softbank: E50A - Unified: 1F3E7 "\uD83C\uDFEF", // Softbank: E505 - Unified: 1F3EF "\uD83C\uDFF0", // Softbank: E506 - Unified: 1F3F0 "\u26FA", // Softbank: E122 - Unified: 26FA "\uD83C\uDFED", // Softbank: E508 - Unified: 1F3ED "\uD83D\uDDFC", // Softbank: E509 - Unified: 1F5FC "\uD83D\uDDFB", // Softbank: E03B - Unified: 1F5FB "\uD83C\uDF04", // Softbank: E04D - Unified: 1F304 "\uD83C\uDF05", // Softbank: E449 - Unified: 1F305 "\uD83C\uDF03", // Softbank: E44B - Unified: 1F303 "\uD83D\uDDFD", // Softbank: E51D - Unified: 1F5FD "\uD83C\uDF08", // Softbank: E44C - Unified: 1F308 "\uD83C\uDFA1", // Softbank: E124 - Unified: 1F3A1 "\u26F2", // Softbank: E121 - Unified: 26F2 "\uD83C\uDFA2", // Softbank: E433 - Unified: 1F3A2 "\uD83D\uDEA2", // Softbank: E202 - Unified: 1F6A2 "\uD83D\uDEA4", // Softbank: E135 - Unified: 1F6A4 "\u26F5", // Softbank: E01C - Unified: 26F5 "\u2708", // Softbank: E01D - Unified: 2708 "\uD83D\uDE80", // Softbank: E10D - Unified: 1F680 "\uD83D\uDEB2", // Softbank: E136 - Unified: 1F6B2 "\uD83D\uDE99", // Softbank: E42E - Unified: 1F699 "\uD83D\uDE97", // Softbank: E01B - Unified: 1F697 "\uD83D\uDE95", // Softbank: E15A - Unified: 1F695 "\uD83D\uDE8C", // Softbank: E159 - Unified: 1F68C "\uD83D\uDE93", // Softbank: E432 - Unified: 1F693 "\uD83D\uDE92", // Softbank: E430 - Unified: 1F692 "\uD83D\uDE91", // Softbank: E431 - Unified: 1F691 "\uD83D\uDE9A", // Softbank: E42F - Unified: 1F69A "\uD83D\uDE83", // Softbank: E01E - Unified: 1F683 "\uD83D\uDE89", // Softbank: E039 - Unified: 1F689 "\uD83D\uDE84", // Softbank: E435 - Unified: 1F684 "\uD83D\uDE85", // Softbank: E01F - Unified: 1F685 "\uD83C\uDFAB", // Softbank: E125 - Unified: 1F3AB "\u26FD", // Softbank: E03A - Unified: 26FD "\uD83D\uDEA5", // Softbank: E14E - Unified: 1F6A5 "\u26A0", // Softbank: E252 - Unified: 26A0 "\uD83D\uDEA7", // Softbank: E137 - Unified: 1F6A7 "\uD83D\uDD30", // Softbank: E209 - Unified: 1F530 "\uD83C\uDFE7", // Softbank: E154 - Unified: 1F3E7 "\uD83C\uDFB0", // Softbank: E133 - Unified: 1F3B0 "\uD83D\uDE8F", // Softbank: E150 - Unified: 1F68F "\uD83D\uDC88", // Softbank: E320 - Unified: 1F488 "\u2668", // Softbank: E123 - Unified: 2668 "\uD83C\uDFC1", // Softbank: E132 - Unified: 1F3C1 "\uD83C\uDF8C", // Softbank: E143 - Unified: 1F38C "\uD83C\uDDEF\uD83C\uDDF5", // Softbank: E50B - Unified: 1F1EF 1F1F5 "\uD83C\uDDF0\uD83C\uDDF7", // Softbank: E514 - Unified: 1F1F0 1F1F7 "\uD83C\uDDE8\uD83C\uDDF3", // Softbank: E513 - Unified: 1F1E8 1F1F3 "\uD83C\uDDFA\uD83C\uDDF8", // Softbank: E50C - Unified: 1F1FA 1F1F8 "\uD83C\uDDEB\uD83C\uDDF7", // Softbank: E50D - Unified: 1F1EB 1F1F7 "\uD83C\uDDEA\uD83C\uDDF8", // Softbank: E511 - Unified: 1F1EA 1F1F8 "\uD83C\uDDEE\uD83C\uDDF9", // Softbank: E50F - Unified: 1F1EE 1F1F9 "\uD83C\uDDF7\uD83C\uDDFA", // Softbank: E512 - Unified: 1F1F7 1F1FA "\uD83C\uDDEC\uD83C\uDDE7", // Softbank: E510 - Unified: 1F1EC 1F1E7 "\uD83C\uDDE9\uD83C\uDDEA", // Softbank: E50E - Unified: 1F1E9 1F1EA // Beginning of section 5 (Symbols) "\u0031\u20E3", // Softbank: E21C - Unified: 0031 20E3 "\u0032\u20E3", // Softbank: E21D - Unified: 0032 20E3 "\u0033\u20E3", // Softbank: E21E - Unified: 0033 20E3 "\u0034\u20E3", // Softbank: E21F - Unified: 0034 20E3 "\u0035\u20E3", // Softbank: E220 - Unified: 0035 20E3 "\u0036\u20E3", // Softbank: E221 - Unified: 0036 20E3 "\u0037\u20E3", // Softbank: E222 - Unified: 0037 20E3 "\u0038\u20E3", // Softbank: E223 - Unified: 0038 20E3 "\u0039\u20E3", // Softbank: E224 - Unified: 0039 20E3 "\u0030\u20E3", // Softbank: E225 - Unified: 0030 20E3 "\u0023\u20E3", // Softbank: E210 - Unified: 0023 20E3 "\u2B06", // Softbank: E232 - Unified: 2B06 "\u2B07", // Softbank: E233 - Unified: 2B07 "\u2B05", // Softbank: E235 - Unified: 2B05 "\u27A1", // Softbank: E234 - Unified: 27A1 "\u2197", // Softbank: E236 - Unified: 2197 "\u2196", // Softbank: E237 - Unified: 2196 "\u2198", // Softbank: E238 - Unified: 2198 "\u2199", // Softbank: E239 - Unified: 2199 "\u25C0", // Softbank: E23B - Unified: 25C0 "\u25B6", // Softbank: E23A - Unified: 25B6 "\u23EA", // Softbank: E23D - Unified: 23EA "\u23E9", // Softbank: E23C - Unified: 23E9 "\uD83C\uDD97", // Softbank: E24D - Unified: 1F197 "\uD83C\uDD95", // Softbank: E212 - Unified: 1F195 "\uD83D\uDD1D", // Softbank: E24C - Unified: 1F51D "\uD83C\uDD99", // Softbank: E213 - Unified: 1F199 "\uD83C\uDD92", // Softbank: E214 - Unified: 1F192 "\uD83C\uDFA6", // Softbank: E507 - Unified: 1F3A6 "\uD83C\uDE01", // Softbank: E203 - Unified: 1F201 "\uD83D\uDCF6", // Softbank: E20B - Unified: 1F4F6 "\uD83C\uDE35", // Softbank: E22A - Unified: 1F235 "\uD83C\uDE33", // Softbank: E22B - Unified: 1F233 "\uD83C\uDE50", // Softbank: E226 - Unified: 1F250 "\uD83C\uDE39", // Softbank: E227 - Unified: 1F239 "\uD83C\uDE2F", // Softbank: E22C - Unified: 1F22F "\uD83C\uDE3A", // Softbank: E22D - Unified: 1F23A "\uD83C\uDE36", // Softbank: E215 - Unified: 1F236 "\uD83C\uDE1A", // Softbank: E216 - Unified: 1F21A "\uD83C\uDE37", // Softbank: E217 - Unified: 1F237 "\uD83C\uDE38", // Softbank: E218 - Unified: 1F238 "\uD83C\uDE02", // Softbank: E228 - Unified: 1F202 "\uD83D\uDEBB", // Softbank: E151 - Unified: 1F6BB "\uD83D\uDEB9", // Softbank: E138 - Unified: 1F6B9 "\uD83D\uDEBA", // Softbank: E139 - Unified: 1F6BA "\uD83D\uDEBC", // Softbank: E13A - Unified: 1F6BC "\uD83D\uDEAD", // Softbank: E208 - Unified: 1F6AD "\uD83C\uDD7F", // Softbank: E14F - Unified: 1F17F "\u267F", // Softbank: E20A - Unified: 267F "\uD83D\uDE87", // Softbank: E434 - Unified: 1F687 "\uD83D\uDEBE", // Softbank: E309 - Unified: 1F6BE "\u3299", // Softbank: E315 - Unified: 3299 "\u3297", // Softbank: E30D - Unified: 3297 "\uD83D\uDD1E", // Softbank: E207 - Unified: 1F51E "\uD83C\uDD94", // Softbank: E229 - Unified: 1F194 "\u2733", // Softbank: E206 - Unified: 2733 "\u2734", // Softbank: E205 - Unified: 2734 "\uD83D\uDC9F", // Softbank: E204 - Unified: 1F49F "\uD83C\uDD9A", // Softbank: E12E - Unified: 1F19A "\uD83D\uDCF3", // Softbank: E250 - Unified: 1F4F3 "\uD83D\uDCF4", // Softbank: E251 - Unified: 1F4F4 "\uD83D\uDCB9", // Softbank: E14A - Unified: 1F4B9 "\uD83D\uDCB1", // Softbank: E149 - Unified: 1F4B1 "\u2648", // Softbank: E23F - Unified: 2648 "\u2649", // Softbank: E240 - Unified: 2649 "\u264A", // Softbank: E241 - Unified: 264A "\u264B", // Softbank: E242 - Unified: 264B "\u264C", // Softbank: E243 - Unified: 264C "\u264D", // Softbank: E244 - Unified: 264D "\u264E", // Softbank: E245 - Unified: 264E "\u264F", // Softbank: E246 - Unified: 264F "\u2650", // Softbank: E247 - Unified: 2650 "\u2651", // Softbank: E248 - Unified: 2651 "\u2652", // Softbank: E249 - Unified: 2652 "\u2653", // Softbank: E24A - Unified: 2653 "\u26CE", // Softbank: E24B - Unified: 26CE "\uD83D\uDD2F", // Softbank: E23E - Unified: 1F52F "\uD83C\uDD70", // Softbank: E532 - Unified: 1F170 "\uD83C\uDD71", // Softbank: E533 - Unified: 1F171 "\uD83C\uDD8E", // Softbank: E534 - Unified: 1F18E "\uD83C\uDD7E", // Softbank: E535 - Unified: 1F17E "\uD83D\uDD32", // Softbank: E21A - Unified: 1F532 "\uD83D\uDD34", // Softbank: E219 - Unified: 1F534 "\uD83D\uDD33", // Softbank: E21B - Unified: 1F533 "\uD83D\uDD5B", // Softbank: E02F - Unified: 1F55B "\uD83D\uDD50", // Softbank: E024 - Unified: 1F550 "\uD83D\uDD51", // Softbank: E025 - Unified: 1F551 "\uD83D\uDD52", // Softbank: E026 - Unified: 1F552 "\uD83D\uDD53", // Softbank: E027 - Unified: 1F553 "\uD83D\uDD54", // Softbank: E028 - Unified: 1F554 "\uD83D\uDD55", // Softbank: E029 - Unified: 1F555 "\uD83D\uDD56", // Softbank: E02A - Unified: 1F556 "\uD83D\uDD57", // Softbank: E02B - Unified: 1F557 "\uD83D\uDD58", // Softbank: E02C - Unified: 1F558 "\uD83D\uDD59", // Softbank: E02D - Unified: 1F559 "\uD83D\uDD5A", // Softbank: E02E - Unified: 1F55A "\u2B55", // Softbank: E332 - Unified: 2B55 "\u274C", // Softbank: E333 - Unified: 274C "\u00A9", // Softbank: E24E - Unified: 00A9 "\u00AE", // Softbank: E24F - Unified: 00AE "\u2122" // Softbank: E537 - Unified: 2122 }; /** * Builds the hashtable we use for mapping the string version of a smiley * (e.g. ":-)") to a resource ID for the icon version. */ private HashMap<String, Integer> buildSmileyToRes() { if (mEmojiTexts.length != mSoftbankEmojiTexts.length) { // Throw an exception if someone updated mEmojiTexts // and failed to update arrays.xml (Softbank) throw new IllegalStateException("Smiley resource ID/text mismatch - " + mEmojiTexts.length + " != " + mSoftbankEmojiTexts.length); } // Initialize the resource ids DEFAULT_EMOJI_RES_IDS = new int[mSoftbankEmojiTexts.length]; for (int i = 0; i < mSoftbankEmojiTexts.length; i++) { DEFAULT_EMOJI_RES_IDS[i] = Emojis.getSmileyResource(i); } HashMap<String, Integer> smileyToRes = new HashMap<String, Integer>( mSoftbankEmojiTexts.length); for (int i = 0; i < mSoftbankEmojiTexts.length; i++) { smileyToRes.put(mSoftbankEmojiTexts[i], DEFAULT_EMOJI_RES_IDS[i]); smileyToRes.put(mEmojiTexts[i], DEFAULT_EMOJI_RES_IDS[i]); } return smileyToRes; } /** * Builds the regular expression we use to find emojis in * {@link #addEmojiSpans}. */ private Pattern buildPattern() { // Set the StringBuilder capacity with the assumption that one emoji is // 5 char (1 surrogate pair, 1 separator, 1 utf-8 char and 1 separator) StringBuilder patternString = new StringBuilder(mEmojiTexts.length * 5); // Build a regex that looks like (\uDAAA\uDBBB|\uCCCC|...), but escaping // the emojis // properly so they will be interpreted literally by the regex matcher. patternString.append('('); for (int i = 0; i < mSoftbankEmojiTexts.length; i++) { patternString.append(Pattern.quote(mSoftbankEmojiTexts[i])); patternString.append('|'); patternString.append(Pattern.quote(mEmojiTexts[i])); patternString.append('|'); } // Replace the extra '|' with a ')' patternString.replace(patternString.length() - 1, patternString.length(), ")"); return Pattern.compile(patternString.toString()); } /** * Adds ImageSpans to a CharSequence that replace unicode emojis with a * graphical version. * * @param text A String possibly containing emojis (using string for UTF-16) * @return A CharSequence annotated with ImageSpans covering any recognized * emojis */ public CharSequence addEmojiSpans(CharSequence text) { SpannableStringBuilder builder = new SpannableStringBuilder(text); // Scan for both Softbank private Unicode emoji code points (every // Android SMS app + iOS < 5) and Unicode 6.1 emoji BMP and non-BMP // codes Matcher matcher = mPattern.matcher(text); while (matcher.find()) { int resId = mSmileyToRes.get(matcher.group()); builder.setSpan(new ImageSpan(mContext, resId), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return builder; } }