/// <summary> /// Represents an Emoji. /// </summary> /// <param name="Document">Markdown document.</param> /// <param name="Emoji">Emoji reference.</param> /// <param name="Level">Level (number of colons used to define the emoji)</param> public EmojiReference(MarkdownDocument Document, EmojiInfo Emoji, int Level) : base(Document) { this.emoji = Emoji; this.level = Level; this.delimiter = Level == 1 ? ":" : new string(':', Level); }
public static void InitFaceConfig(string atlasName, string atlasData, EmojiAtlasInfo atlasInfo) { Dictionary <string, EmojiInfo> atlasDatas = null; if (atlasDataDic.TryGetValue(atlasName, out atlasDatas) == false) { atlasDatas = new Dictionary <string, EmojiInfo>(); atlasDataDic[atlasName] = atlasDatas; atlasInfoDic[atlasName] = atlasInfo; var lineList = atlasData.Split('\n'); var firstLine = lineList[0].Split(','); float width = float.Parse(firstLine[0]); float height = float.Parse(firstLine[1]); for (int i = 1, count = lineList.Length; i < count; i++) { var line = lineList[i]; var rowValues = line.Split(','); if (rowValues.Length >= 5) { string key = rowValues[0]; EmojiInfo info = new EmojiInfo(); info.x = float.Parse(rowValues[1]) / width; info.y = (height - float.Parse(rowValues[2])) / height;//ngui打包的图集,(0,0)点在左上角,uv的(0,0)点应该在左下角 info.width = float.Parse(rowValues[3]) / width; info.height = float.Parse(rowValues[4]) / height; atlasDatas[key] = info; } } } }
/// <summary> /// Generates HTML for a given Emoji. /// </summary> /// <param name="Output">Output</param> /// <param name="Emoji">Emoji</param> /// <param name="EmbedImage">If image should be embedded into the generated HTML, using the data URI scheme.</param> public void GenerateHTML(StringBuilder Output, EmojiInfo Emoji, bool EmbedImage) { Output.Append("<img alt=\":"); Output.Append(Encode(Emoji.ShortName)); Output.Append(":\" title=\""); Output.Append(Encode(Emoji.Description)); Output.Append("\" width=\""); Output.Append(this.width.ToString()); Output.Append("\" height=\""); Output.Append(this.height.ToString()); Output.Append("\" src=\""); Output.Append(Encode(this.GetUrl(Emoji, EmbedImage))); Output.Append("\"/>"); }
/// <summary> /// Gets the local file name for a given emoji. /// </summary> /// <param name="Emoji">Emoji</param> /// <returns>Local file name.</returns> public string GetLocalFileName(EmojiInfo Emoji) { StringBuilder Result = new StringBuilder(); string FileName = Emoji.FileName; Result.Append("Graphics"); Result.Append(Path.DirectorySeparatorChar); Result.Append("Emoji1"); Result.Append(Path.DirectorySeparatorChar); switch (this.sourceFileType) { case Emoji1SourceFileType.Png64: Result.Append("png"); Result.Append(Path.DirectorySeparatorChar); Result.Append("64x64"); break; case Emoji1SourceFileType.Png128: Result.Append("png"); Result.Append(Path.DirectorySeparatorChar); Result.Append("128x128"); break; case Emoji1SourceFileType.Png512: Result.Append("png"); Result.Append(Path.DirectorySeparatorChar); Result.Append("512x512"); break; case Emoji1SourceFileType.Svg: Result.Append("svg"); if (FileName.EndsWith(".png")) { FileName = FileName.Substring(0, FileName.Length - 3) + "svg"; } break; } Result.Append(Path.DirectorySeparatorChar); Result.Append(FileName); return(Result.ToString()); }
/// <summary> /// Gets the local file name for a given emoji. /// </summary> /// <param name="Emoji">Emoji</param> /// <returns>Local file name.</returns> public string GetFileName(EmojiInfo Emoji) { switch (this.sourceFileType) { case Emoji1SourceFileType.Png64: return(Path.Combine(this.programDataFolder, "Emoji1", "png", "64x64", Emoji.FileName)); case Emoji1SourceFileType.Png128: return(Path.Combine(this.programDataFolder, "Emoji1", "png", "128x128", Emoji.FileName)); case Emoji1SourceFileType.Png512: return(Path.Combine(this.programDataFolder, "Emoji1", "png", "512x512", Emoji.FileName)); case Emoji1SourceFileType.Svg: default: string s = Emoji.FileName; if (s.EndsWith(".png")) { s = s.Substring(0, s.Length - 3) + "svg"; } return(Path.Combine(this.programDataFolder, "Emoji1", "svg", s)); } }
public void SetEmojiItem(EmojiInfo info) { if (m_installItemList.Count < MAX_EMOJI_COUNT) { int depth = 0; for (int i = 0; i < m_installItemList.Count; i++) { depth = Mathf.Max(depth, m_installItemList[i].GetIcon.depth); } PhotoStudioEmojiItem item = m_emojiItemList[m_getItemCount]; m_getItemCount = (m_getItemCount + 1).Equals(MAX_EMOJI_COUNT) ? 0 : m_getItemCount + 1; m_installItemList.Add(item); item.ActiveItem(info, depth + 1); m_workTimeline.AddBeforeTimeline(new PhotoStudioWorkTimeline.Timeline(PHOTOSTUDIO_WORK_TYPE.TYPE_ADD, item)); m_workTimeline.ReleaseAfterTimeline(); m_uiWindow.CloseEmojiPopup(); } }
/// <summary> /// Gets an URL for the emoji. /// </summary> /// <param name="Emoji">Emoji</param> /// <param name="Embed">If emoji should be embedded.</param> /// <returns>URL</returns> public string GetUrl(EmojiInfo Emoji, bool Embed) { if (Embed || string.IsNullOrEmpty(this.imageUrl)) { StringBuilder Output = new StringBuilder(); Output.Append("data:image/"); if (this.sourceFileType == Emoji1SourceFileType.Svg) { Output.Append("svg+xml"); } else { Output.Append("png"); } Output.Append(";base64,"); string FileName = this.GetFileName(Emoji); byte[] Data = File.ReadAllBytes(FileName); Output.Append(Convert.ToBase64String(Data)); return(Output.ToString()); } else { string s = Emoji.FileName; if (this.sourceFileType == Emoji1SourceFileType.Svg && s.EndsWith(".png")) { s = s.Substring(0, s.Length - 3) + "svg"; } return(this.imageUrl.Replace("%FILENAME%", s)); } }
/// <summary> /// Gets the image source of an emoji. /// </summary> /// <param name="Emoji">Emoji</param> /// <param name="Url">URL to emoji.</param> /// <param name="Width">Width of emoji.</param> /// <param name="Height">Height of emoji.</param> public void GetImageSource(EmojiInfo Emoji, out string Url, out int Width, out int Height) { Url = this.GetUrl(Emoji, false); Width = this.width; Height = this.height; }
/// <summary> /// If the emoji is supported by the emoji source. /// </summary> /// <param name="Emoji">Emoji</param> /// <returns>If emoji is supported.</returns> public bool EmojiSupported(EmojiInfo Emoji) { string FileName = this.GetFileName(Emoji); return(File.Exists(FileName)); }
/// <summary> /// Represents an Emoji. /// </summary> /// <param name="Document">Markdown document.</param> /// <param name="Emoji">Emoji reference.</param> public EmojiReference(MarkdownDocument Document, EmojiInfo Emoji) : this(Document, Emoji, 1) { }
public override void SetVerticesDirty() { originText = m_Text; MatchCollection collections = TextRegex.Matches(originText); _GraphicItemModels.Clear(); _TextLinkModels.Clear(); int last_index = 0; if (stringBuilder == null) { stringBuilder = new StringBuilder(); } stringBuilder.Length = 0; for (var i = 0; i < collections.Count; i++) { Match match = collections[i]; int match_index = match.Index; string type = match.Groups[1].Value; if (type == EMOTIONTAG) { stringBuilder.Append(originText.Substring(last_index, match_index - last_index)); var start_index = stringBuilder.Length; string quad = StringUtility.Format(TEXTQUAD, match.Groups[2].Value, (int)(fontSize), (GraphicScale)); stringBuilder.Append(quad); UIEmotionTextModel model = new UIEmotionTextModel { TextIndex = start_index, SpriteName = match.Groups[2].Value }; EmojiInfo emojiInfo = EmojiInfos[model.SpriteName]; model.X = emojiInfo.x; model.Y = emojiInfo.y; model.Size = emojiInfo.size; _GraphicItemModels.Add(model); } else if (type == LINKTAG) { string seg = originText.Substring(last_index, match_index - last_index); stringBuilder.Append(seg); UILinkTextModel linkModel = new UILinkTextModel(); string inner_txt; string color_text; MatchCollection collections_con = LinkRegex.Matches(match.Groups[2].Value); if (collections_con.Count == 1 && collections_con[0].Groups.Count == 3) { color_text = collections_con[0].Groups[1].Value; inner_txt = collections_con[0].Groups[2].Value; } else { color_text = "#0066cc"; inner_txt = match.Groups[2].Value; } stringBuilder.AppendFormat("<color={0}>", color_text); linkModel.StartIndex = stringBuilder.Length; stringBuilder.AppendFormat(inner_txt); linkModel.EndIndex = stringBuilder.Length - 1; stringBuilder.Append("</color>"); _TextLinkModels.Add(linkModel); } last_index = match_index + match.Value.Length; } stringBuilder.Append(originText.Substring(last_index, originText.Length - last_index)); buildText = stringBuilder.ToString(); base.SetVerticesDirty(); }
/// <summary> /// Represents an Emoji. /// </summary> /// <param name="Document">Markdown document.</param> /// <param name="Emoji">Emoji reference.</param> public EmojiReference(MarkdownDocument Document, EmojiInfo Emoji) : base(Document) { this.emoji = Emoji; }
/// <summary> /// If the emoji is supported by the emoji source. /// </summary> /// <param name="Emoji">Emoji</param> /// <returns>If emoji is supported.</returns> public bool EmojiSupported(EmojiInfo Emoji) { string LocalFileName = this.GetLocalFileName(Emoji); return(this.fileexists(LocalFileName)); }
/// <summary> /// Gets the image source of an emoji. /// </summary> /// <param name="Emoji">Emoji</param> /// <param name="Level">Level (number of colons used to define the emoji)</param> /// <param name="Url">URL to emoji.</param> /// <param name="Width">Width of emoji.</param> /// <param name="Height">Height of emoji.</param> public void GetImageSource(EmojiInfo Emoji, int Level, out string Url, out int Width, out int Height) { Url = this.GetUrl(Emoji, false); Width = this.CalcSize(this.width, Level); Height = this.CalcSize(this.height, Level); }
/// <summary> /// Gets the image source of an emoji. /// </summary> /// <param name="Emoji">Emoji</param> /// <param name="Url">URL to emoji.</param> /// <param name="Width">Width of emoji.</param> /// <param name="Height">Height of emoji.</param> public void GetImageSource(EmojiInfo Emoji, out string Url, out int Width, out int Height) { this.GetImageSource(Emoji, 1, out Url, out Width, out Height); }
/// <summary> /// Generates HTML for a given Emoji. /// </summary> /// <param name="Output">Output</param> /// <param name="Emoji">Emoji</param> /// <param name="EmbedImage">If image should be embedded into the generated HTML, using the data URI scheme.</param> public void GenerateHTML(StringBuilder Output, EmojiInfo Emoji, bool EmbedImage) { }