You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			208 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			208 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace FairyGUI.Utils
 | |
| {
 | |
|     /// <summary>
 | |
|     /// 
 | |
|     /// </summary>
 | |
|     public enum HtmlElementType
 | |
|     {
 | |
|         Text,
 | |
|         Link,
 | |
|         Image,
 | |
|         Input,
 | |
|         Select,
 | |
|         Object,
 | |
| 
 | |
|         //internal
 | |
|         LinkEnd,
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// 
 | |
|     /// </summary>
 | |
|     public class HtmlElement
 | |
|     {
 | |
|         public HtmlElementType type;
 | |
|         public string name;
 | |
|         public string text;
 | |
|         public TextFormat format;
 | |
|         public int charIndex;
 | |
| 
 | |
|         public IHtmlObject htmlObject;
 | |
|         public int status; //1 hidden 2 clipped 4 added
 | |
|         public int space;
 | |
|         public Vector2 position;
 | |
| 
 | |
|         Hashtable attributes;
 | |
| 
 | |
|         public HtmlElement()
 | |
|         {
 | |
|             format = new TextFormat();
 | |
|         }
 | |
| 
 | |
|         public object Get(string attrName)
 | |
|         {
 | |
|             if (attributes == null)
 | |
|                 return null;
 | |
| 
 | |
|             return attributes[attrName];
 | |
|         }
 | |
| 
 | |
|         public void Set(string attrName, object attrValue)
 | |
|         {
 | |
|             if (attributes == null)
 | |
|                 attributes = new Hashtable();
 | |
| 
 | |
|             attributes[attrName] = attrValue;
 | |
|         }
 | |
| 
 | |
|         public string GetString(string attrName)
 | |
|         {
 | |
|             return GetString(attrName, null);
 | |
|         }
 | |
| 
 | |
|         public string GetString(string attrName, string defValue)
 | |
|         {
 | |
|             if (attributes == null)
 | |
|                 return defValue;
 | |
| 
 | |
|             object ret = attributes[attrName];
 | |
|             if (ret != null)
 | |
|                 return ret.ToString();
 | |
|             else
 | |
|                 return defValue;
 | |
|         }
 | |
| 
 | |
|         public int GetInt(string attrName)
 | |
|         {
 | |
|             return GetInt(attrName, 0);
 | |
|         }
 | |
| 
 | |
|         public int GetInt(string attrName, int defValue)
 | |
|         {
 | |
|             string value = GetString(attrName);
 | |
|             if (value == null || value.Length == 0)
 | |
|                 return defValue;
 | |
| 
 | |
|             if (value[value.Length - 1] == '%')
 | |
|             {
 | |
|                 int ret;
 | |
|                 if (int.TryParse(value.Substring(0, value.Length - 1), out ret))
 | |
|                     return Mathf.CeilToInt(ret / 100.0f * defValue);
 | |
|                 else
 | |
|                     return defValue;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 int ret;
 | |
|                 if (int.TryParse(value, out ret))
 | |
|                     return ret;
 | |
|                 else
 | |
|                     return defValue;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public float GetFloat(string attrName)
 | |
|         {
 | |
|             return GetFloat(attrName, 0);
 | |
|         }
 | |
| 
 | |
|         public float GetFloat(string attrName, float defValue)
 | |
|         {
 | |
|             string value = GetString(attrName);
 | |
|             if (value == null || value.Length == 0)
 | |
|                 return defValue;
 | |
| 
 | |
|             float ret;
 | |
|             if (float.TryParse(value, out ret))
 | |
|                 return ret;
 | |
|             else
 | |
|                 return defValue;
 | |
|         }
 | |
| 
 | |
|         public bool GetBool(string attrName)
 | |
|         {
 | |
|             return GetBool(attrName, false);
 | |
|         }
 | |
| 
 | |
|         public bool GetBool(string attrName, bool defValue)
 | |
|         {
 | |
|             string value = GetString(attrName);
 | |
|             if (value == null || value.Length == 0)
 | |
|                 return defValue;
 | |
| 
 | |
|             bool ret;
 | |
|             if (bool.TryParse(value, out ret))
 | |
|                 return ret;
 | |
|             else
 | |
|                 return defValue;
 | |
|         }
 | |
| 
 | |
|         public Color GetColor(string attrName, Color defValue)
 | |
|         {
 | |
|             string value = GetString(attrName);
 | |
|             if (value == null || value.Length == 0)
 | |
|                 return defValue;
 | |
| 
 | |
|             return ToolSet.ConvertFromHtmlColor(value);
 | |
|         }
 | |
| 
 | |
|         public void FetchAttributes()
 | |
|         {
 | |
|             attributes = XMLIterator.GetAttributes(attributes);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         public bool isEntity
 | |
|         {
 | |
|             get { return type == HtmlElementType.Image || type == HtmlElementType.Select || type == HtmlElementType.Input || type == HtmlElementType.Object; }
 | |
|         }
 | |
| 
 | |
|         #region Pool Support
 | |
| 
 | |
|         static Stack<HtmlElement> elementPool = new Stack<HtmlElement>();
 | |
| 
 | |
|         public static HtmlElement GetElement(HtmlElementType type)
 | |
|         {
 | |
|             HtmlElement ret;
 | |
|             if (elementPool.Count > 0)
 | |
|                 ret = elementPool.Pop();
 | |
|             else
 | |
|                 ret = new HtmlElement();
 | |
|             ret.type = type;
 | |
| 
 | |
|             if (type != HtmlElementType.Text && ret.attributes == null)
 | |
|                 ret.attributes = new Hashtable();
 | |
| 
 | |
|             return ret;
 | |
|         }
 | |
| 
 | |
|         public static void ReturnElement(HtmlElement element)
 | |
|         {
 | |
|             element.name = null;
 | |
|             element.text = null;
 | |
|             element.htmlObject = null;
 | |
|             element.status = 0;
 | |
|             if (element.attributes != null)
 | |
|                 element.attributes.Clear();
 | |
|             elementPool.Push(element);
 | |
|         }
 | |
| 
 | |
|         public static void ReturnElements(List<HtmlElement> elements)
 | |
|         {
 | |
|             int count = elements.Count;
 | |
|             for (int i = 0; i < count; i++)
 | |
|             {
 | |
|                 HtmlElement element = elements[i];
 | |
|                 ReturnElement(element);
 | |
|             }
 | |
|             elements.Clear();
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| }
 |