You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
5.2 KiB
207 lines
5.2 KiB
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 |
|
} |
|
}
|
|
|