static Info ParseBMFontXml(XmlDocument doc) { Info fontInfo = new Info(); XmlNode nodeCommon = doc.SelectSingleNode("/font/common"); fontInfo.scaleW = ReadIntAttribute(nodeCommon, "scaleW"); fontInfo.scaleH = ReadIntAttribute(nodeCommon, "scaleH"); fontInfo.lineHeight = ReadIntAttribute(nodeCommon, "lineHeight"); int pages = ReadIntAttribute(nodeCommon, "pages"); if (pages != 1) { EditorUtility.DisplayDialog("Fatal error", "Only one page supported in font. Please change the setting and re-export.", "Ok"); return null; } foreach (XmlNode node in doc.SelectNodes(("/font/chars/char"))) { Char thisChar = new Char(); thisChar.id = ReadIntAttribute(node, "id"); thisChar.x = ReadIntAttribute(node, "x"); thisChar.y = ReadIntAttribute(node, "y"); thisChar.width = ReadIntAttribute(node, "width"); thisChar.height = ReadIntAttribute(node, "height"); thisChar.xoffset = ReadIntAttribute(node, "xoffset"); thisChar.yoffset = ReadIntAttribute(node, "yoffset"); thisChar.xadvance = ReadIntAttribute(node, "xadvance"); thisChar.texOverride = false; fontInfo.chars.Add(thisChar); } foreach (XmlNode node in doc.SelectNodes("/font/kernings/kerning")) { Kerning thisKerning = new Kerning(); thisKerning.first = ReadIntAttribute(node, "first"); thisKerning.second = ReadIntAttribute(node, "second"); thisKerning.amount = ReadIntAttribute(node, "amount"); fontInfo.kernings.Add(thisKerning); } return fontInfo; }
static Info ParseBMFontText(string path) { Info fontInfo = new Info(); System.IO.FileInfo finfo = new System.IO.FileInfo(path); System.IO.StreamReader reader = finfo.OpenText(); string line; while ((line = reader.ReadLine()) != null) { string[] tokens = line.Split( ' ' ); if (tokens[0] == "common") { fontInfo.lineHeight = int.Parse( FindKeyValue(tokens, "lineHeight") ); fontInfo.scaleW = int.Parse( FindKeyValue(tokens, "scaleW") ); fontInfo.scaleH = int.Parse( FindKeyValue(tokens, "scaleH") ); int pages = int.Parse( FindKeyValue(tokens, "pages") ); if (pages != 1) { EditorUtility.DisplayDialog("Fatal error", "Only one page supported in font. Please change the setting and re-export.", "Ok"); return null; } } else if (tokens[0] == "char") { Char thisChar = new Char(); thisChar.id = int.Parse(FindKeyValue(tokens, "id")); thisChar.x = int.Parse(FindKeyValue(tokens, "x")); thisChar.y = int.Parse(FindKeyValue(tokens, "y")); thisChar.width = int.Parse(FindKeyValue(tokens, "width")); thisChar.height = int.Parse(FindKeyValue(tokens, "height")); thisChar.xoffset = int.Parse(FindKeyValue(tokens, "xoffset")); thisChar.yoffset = int.Parse(FindKeyValue(tokens, "yoffset")); thisChar.xadvance = int.Parse(FindKeyValue(tokens, "xadvance")); fontInfo.chars.Add(thisChar); } else if (tokens[0] == "kerning") { Kerning thisKerning = new Kerning(); thisKerning.first = int.Parse(FindKeyValue(tokens, "first")); thisKerning.second = int.Parse(FindKeyValue(tokens, "second")); thisKerning.amount = int.Parse(FindKeyValue(tokens, "amount")); fontInfo.kernings.Add(thisKerning); } } reader.Close(); return fontInfo; }
public static Info Parse(string path) { Info fontInfo = new Info(); System.IO.FileInfo finfo = new System.IO.FileInfo(path); System.IO.StreamReader reader = finfo.OpenText(); string line; while ((line = reader.ReadLine()) != null) { string[] tokens = line.Split( ' ' ); if (tokens[0] == "common") { fontInfo.lineHeight = int.Parse( FindKeyValue(tokens, "lineHeight") ); fontInfo.scaleW = int.Parse( FindKeyValue(tokens, "scaleW") ); fontInfo.scaleH = int.Parse( FindKeyValue(tokens, "scaleH") ); int pages = int.Parse( FindKeyValue(tokens, "pages") ); if (pages != 1) { EditorUtility.DisplayDialog("Fatal error", "Only one page supported in font. Please change the setting and re-export.", "Ok"); return null; } fontInfo.numPages = pages; if (FindKeyValue(tokens, "packed") != "") fontInfo.isPacked = int.Parse(FindKeyValue(tokens, "packed")) != 0; fontInfo.texturePaths = new string[pages]; for (int i = 0 ; i < pages; ++i) fontInfo.texturePaths[i] = string.Empty; } else if (tokens[0] == "page") { int id = int.Parse(FindKeyValue(tokens, "id")); string file = FindKeyValue(tokens, "file"); if (file[0] == '"' && file[file.Length - 1] == '"') { file = file.Substring(1, file.Length - 2); } else if (file[0] == '"' && file[file.Length - 1] != '"') { System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(line, "file[\\s]*=[\\s]*\"([^\"]*)\""); try { file = match.Groups[1].Value; } catch { file = ""; } } fontInfo.texturePaths[id] = file; } else if (tokens[0] == "char") { Char thisChar = new Char(); thisChar.id = int.Parse(FindKeyValue(tokens, "id")); thisChar.x = int.Parse(FindKeyValue(tokens, "x")); thisChar.y = int.Parse(FindKeyValue(tokens, "y")); thisChar.width = int.Parse(FindKeyValue(tokens, "width")); thisChar.height = int.Parse(FindKeyValue(tokens, "height")); thisChar.xoffset = int.Parse(FindKeyValue(tokens, "xoffset")); thisChar.yoffset = int.Parse(FindKeyValue(tokens, "yoffset")); thisChar.xadvance = int.Parse(FindKeyValue(tokens, "xadvance")); if (fontInfo.isPacked) { int chnl = int.Parse(FindKeyValue(tokens, "chnl")); thisChar.channel = (int)Mathf.Round(Mathf.Log(chnl) / Mathf.Log(2)); } if (thisChar.id == -1) thisChar.id = 0; fontInfo.chars.Add(thisChar); } else if (tokens[0] == "kerning") { Kerning thisKerning = new Kerning(); thisKerning.first = int.Parse(FindKeyValue(tokens, "first")); thisKerning.second = int.Parse(FindKeyValue(tokens, "second")); thisKerning.amount = int.Parse(FindKeyValue(tokens, "amount")); fontInfo.kernings.Add(thisKerning); } } reader.Close(); return fontInfo; }
public static Info Parse(string path) { XmlDocument doc = new XmlDocument(); doc.Load(path); Info fontInfo = new Info(); XmlNode nodeCommon = doc.SelectSingleNode("/font/common"); fontInfo.scaleW = ReadIntAttribute(nodeCommon, "scaleW"); fontInfo.scaleH = ReadIntAttribute(nodeCommon, "scaleH"); fontInfo.lineHeight = ReadIntAttribute(nodeCommon, "lineHeight"); int pages = ReadIntAttribute(nodeCommon, "pages"); if (pages != 1) { EditorUtility.DisplayDialog("Fatal error", "Only one page supported in font. Please change the setting and re-export.", "Ok"); return null; } fontInfo.numPages = pages; fontInfo.texturePaths = new string[pages]; for (int i = 0; i < pages; ++i) fontInfo.texturePaths[i] = string.Empty; foreach (XmlNode node in doc.SelectNodes("/font/pages/page")) { int id = ReadIntAttribute(node, "id"); fontInfo.texturePaths[id] = ReadStringAttribute(node, "file"); } foreach (XmlNode node in doc.SelectNodes(("/font/chars/char"))) { Char thisChar = new Char(); thisChar.id = ReadIntAttribute(node, "id"); thisChar.x = ReadIntAttribute(node, "x"); thisChar.y = ReadIntAttribute(node, "y"); thisChar.width = ReadIntAttribute(node, "width"); thisChar.height = ReadIntAttribute(node, "height"); thisChar.xoffset = ReadIntAttribute(node, "xoffset"); thisChar.yoffset = ReadIntAttribute(node, "yoffset"); thisChar.xadvance = ReadIntAttribute(node, "xadvance"); thisChar.texOverride = false; if (thisChar.id == -1) thisChar.id = 0; fontInfo.chars.Add(thisChar); } foreach (XmlNode node in doc.SelectNodes("/font/kernings/kerning")) { Kerning thisKerning = new Kerning(); thisKerning.first = ReadIntAttribute(node, "first"); thisKerning.second = ReadIntAttribute(node, "second"); thisKerning.amount = ReadIntAttribute(node, "amount"); fontInfo.kernings.Add(thisKerning); } return fontInfo; }
public static Info Parse(string path) { Info fontInfo = new Info(); System.IO.FileInfo finfo = new System.IO.FileInfo(path); System.IO.StreamReader reader = finfo.OpenText(); string line; while ((line = reader.ReadLine()) != null) { string[] tokens = line.Split( ' ' ); if (tokens[0] == "common") { fontInfo.lineHeight = int.Parse( FindKeyValue(tokens, "lineHeight") ); fontInfo.scaleW = int.Parse( FindKeyValue(tokens, "scaleW") ); fontInfo.scaleH = int.Parse( FindKeyValue(tokens, "scaleH") ); int pages = int.Parse( FindKeyValue(tokens, "pages") ); if (pages != 1) { EditorUtility.DisplayDialog("Fatal error", "Only one page supported in font. Please change the setting and re-export.", "Ok"); return null; } fontInfo.numPages = pages; fontInfo.texturePaths = new string[pages]; for (int i = 0 ; i < pages; ++i) fontInfo.texturePaths[i] = string.Empty; } else if (tokens[0] == "page") { int id = int.Parse(FindKeyValue(tokens, "id")); string file = FindKeyValue(tokens, "file"); if (file[0] == '"' && file[file.Length - 1] == '"') file = file.Substring(1, file.Length - 2); fontInfo.texturePaths[id] = file; } else if (tokens[0] == "char") { Char thisChar = new Char(); thisChar.id = int.Parse(FindKeyValue(tokens, "id")); thisChar.x = int.Parse(FindKeyValue(tokens, "x")); thisChar.y = int.Parse(FindKeyValue(tokens, "y")); thisChar.width = int.Parse(FindKeyValue(tokens, "width")); thisChar.height = int.Parse(FindKeyValue(tokens, "height")); thisChar.xoffset = int.Parse(FindKeyValue(tokens, "xoffset")); thisChar.yoffset = int.Parse(FindKeyValue(tokens, "yoffset")); thisChar.xadvance = int.Parse(FindKeyValue(tokens, "xadvance")); fontInfo.chars.Add(thisChar); } else if (tokens[0] == "kerning") { Kerning thisKerning = new Kerning(); thisKerning.first = int.Parse(FindKeyValue(tokens, "first")); thisKerning.second = int.Parse(FindKeyValue(tokens, "second")); thisKerning.amount = int.Parse(FindKeyValue(tokens, "amount")); fontInfo.kernings.Add(thisKerning); } } reader.Close(); return fontInfo; }