private void Parse(Stream file) { if (displays == null) { displays = new ArrayMap(DEFAULT_MAX_CHAR); } else { displays.Clear(); } try { StreamReader ins = new StreamReader(file, System.Text.Encoding.UTF8); info = ins.ReadLine(); common = ins.ReadLine(); page = ins.ReadLine(); ArrayMap kerning = new ArrayMap( 64); List<CharDef> charDefs = new List<CharDef>( DEFAULT_MAX_CHAR); int maxChar = 0; bool done = false; for (; !done;) { string line = ins.ReadLine(); if (line == null) { done = true; } else { if (line.StartsWith("chars c")) { } else if (line.StartsWith("char")) { CharDef def = ParseChar(line); if (def != null) { maxChar = MathUtils.Max(maxChar, def.id); charDefs.Add(def); } } if (line.StartsWith("kernings c")) { } else if (line.StartsWith("kerning")) { StringTokenizer tokens = new StringTokenizer(line, " ="); tokens.NextToken(); tokens.NextToken(); short first = short.Parse(tokens.NextToken()); tokens.NextToken(); int second = int.Parse(tokens.NextToken()); tokens.NextToken(); int offset = int.Parse(tokens.NextToken()); List<short> values = (List<short>)kerning.GetValue(first); if (values == null) { values = new List<short>(); kerning.Put(first, values); } values.Add((short) ((offset << 8) | second)); } } } this.chars = new CharDef[maxChar + 1]; for (IEnumerator<CharDef> iter = charDefs.GetEnumerator(); iter.MoveNext();) { CharDef def = (CharDef) iter.Current; chars[def.id] = def; } ArrayMap.Entry[] entrys = kerning.ToEntrys(); for (int j=0;j<entrys.Length;j++) { ArrayMap.Entry entry = entrys[j]; short first = (short) entry.GetKey(); List<short> valueList = (List<short>) entry.GetValue(); short[] valueArray = new short[valueList.Count]; int i = 0; for (IEnumerator<short> valueIter = valueList.GetEnumerator(); valueIter .MoveNext(); i++) { valueArray[i] = (short) valueIter.Current; } chars[first].kerning = valueArray; } } catch (IOException e) { Log.Exception(e); throw new Exception("Invalid font file: " + file); } }
private bool SetupIF(string commandString, string nowPosFlagName, Dictionary<object, object> setEnvironmentList, ArrayMap conditionEnvironmentList) { bool result = false; conditionEnvironmentList.Put(nowPosFlagName, (bool)(false)); try { IList temps = CommandSplit(commandString); int size = temps.Count; object valueA = null; object valueB = null; string condition = null; if (size <= 4) { valueA = (string)temps[1]; valueB = (string)temps[3]; valueA = (CollectionUtils.Get(setEnvironmentList, valueA) == null) ? valueA : CollectionUtils.Get(setEnvironmentList, valueA); valueB = (CollectionUtils.Get(setEnvironmentList, valueB) == null) ? valueB : CollectionUtils.Get(setEnvironmentList, valueB); condition = (string)temps[2]; } else { int count = 0; StringBuilder sbr = new StringBuilder(); for (IEnumerator it = temps.GetEnumerator(); it.MoveNext(); ) { string res = (string)it.Current; if (count > 0) { if (!IsCondition(res)) { sbr.Append(res); } else { valueA = sbr.ToString(); valueA = exp.Parse(valueA).ToString(); sbr.Remove(0, sbr.Length - (0)); condition = res; } } count++; } valueB = sbr.ToString(); } if (!NumberUtils.IsNan((string)valueB)) { try { valueB = exp.Parse(valueB); } catch (Exception) { } } if (valueA == null || valueB == null) { conditionEnvironmentList .Put(nowPosFlagName, (bool)(false)); } if ("==".Equals(condition)) { conditionEnvironmentList.Put(nowPosFlagName, (bool)(result = valueA.ToString().Equals(valueB.ToString()))); } else if ("!=".Equals(condition)) { conditionEnvironmentList.Put(nowPosFlagName, (bool)(result = !valueA.ToString().Equals(valueB.ToString()))); } else if (">".Equals(condition)) { float numberA = Single.Parse(valueA.ToString(), JavaRuntime.NumberFormat); float numberB = Single.Parse(valueB.ToString(), JavaRuntime.NumberFormat); conditionEnvironmentList.Put(nowPosFlagName, (bool)(result = numberA > numberB)); } else if ("<".Equals(condition)) { float numberA = Single.Parse(valueA.ToString(), JavaRuntime.NumberFormat); float numberB = Single.Parse(valueB.ToString(), JavaRuntime.NumberFormat); conditionEnvironmentList.Put(nowPosFlagName, (bool)(result = numberA < numberB)); } else if (">=".Equals(condition)) { float numberA = Single.Parse(valueA.ToString(), JavaRuntime.NumberFormat); float numberB = Single.Parse(valueB.ToString(), JavaRuntime.NumberFormat); conditionEnvironmentList.Put(nowPosFlagName, (bool)(result = numberA >= numberB)); } else if ("<=".Equals(condition)) { float numberA = Single.Parse(valueA.ToString(), JavaRuntime.NumberFormat); float numberB = Single.Parse(valueB.ToString(), JavaRuntime.NumberFormat); conditionEnvironmentList.Put(nowPosFlagName, (bool)(result = numberA <= numberB)); } } catch (Exception ex) { Log.Exception(ex); } return result; }