using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RichTextMgr {
private static RichTextMgr _inst = null;
public static RichTextMgr Inst {
get {
if (_inst == null) {
_inst = new RichTextMgr();
_inst.Init();
}
return _inst;
}
}
private void Init()
{
// new RichMoveEvent();
new RichTableEvent();
new RichNormalEvent();
// new RichFbEvent();
new RichShowPlayerEvent();
}
public RichText presentRichText = null;
///
/// Text 富文本解析
///
///
///
public string Analysis(string _text,out List imgList,out List hrefList,RichText text=null)
{
imgList = new List();
m_ImgInfoList = imgList;
hrefList = new List();
m_HrefInfoList = hrefList;
presentRichText = text;
string result=GetAnalysis(_text);
//for (int i = 0; i < m_ImgInfoList.Count; i++) {
ImgAnalysis.Inst.CalculateTextIndex(result, 0);
//}
return result;
}
public string Analysis(string val)
{
m_HrefInfoList = null;
m_ImgInfoList = null;
return GetAnalysis(val);
}
private string GetAnalysis(string val)
{
string result = ImgAnalysis.ReplaceFace(val);
try
{
result = ColorAnalysis.Inst.Analysis(result, true);
result = WordAnalysis.Inst.ReplaceSpace(result);
result = ImgAnalysis.Inst.Analysis(result, true);
result = WordAnalysis.Inst.Analysis(result, true);
result = HrefAnalysis.Inst.Analysis(result, true);
result = SuitNameAnalysis.Inst.Analysis(result, true);
result = HrefAnalysis.Inst.CalculateTextIndex(result, 0);
}
catch (System.Exception e)
{
Debug.LogError(e.Message+e.StackTrace);
}
return result;
}
public class HrefInfo
{
public int start = 0;
public int end = 0;
public List boxs=new List();
public List lines = new List();
public Dictionary mSplits = new Dictionary();
public List mEvents = new List();
public int start_cache_cnt = 0;
public int end_cache_cnt = 0;
public bool unline = true;
public Color unlineColor = Color.green;
public bool fromAutoTask = false;
public void Add(string key,string value)
{
if (!mSplits.ContainsKey(key)) {
mSplits.Add(key, value);
return;
}
mSplits[key] = value;
}
public bool Execute(int index = 0)
{
if (mEvents.Count < 1) return false;
return RichTextMgr.Inst.ExecuteEvent(mEvents[index], this);
}
}
public class ImgInfo
{
public float width;
public float height;
public int end;
public int index;
public int cacheCnt;
public Sprite sprite;
public string spriteName;
public bool IsFace;
public float scale; //缩放图片的同时,二次缩放了图片在文本钟的占位大小,查看函数InverseToRichText
public HrefInfo href = null;
}
private List m_ImgInfoList;
public List GetImgList()
{
return m_ImgInfoList;
}
private List m_HrefInfoList;
public List GetHrefList()
{
return m_HrefInfoList;
}
#region 富文本事件
private static Dictionary m_RichEvents = new Dictionary();
public void RegisterEvent(RichTextEventEnum type,TRichTextEvent evt)
{
if (!m_RichEvents.ContainsKey(type)) {
m_RichEvents.Add(type, evt);
}
}
public bool ExecuteEvent(RichTextEventEnum type,HrefInfo href)
{
return m_RichEvents[type].Execute(type,href);
}
public string GetDisplay(RichTextEventEnum type,Dictionary dic)
{
return m_RichEvents[type].GetDisplay(type, dic);
}
#endregion
}