Example #1
0
        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);
            }
        }
Example #2
0
        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;
        }