Пример #1
0
        private static List <Element> ExpandRepeater(List <Element> element_list, Environment environment)
        {
            List <Element> expanded_list = new List <Element>();

            for (int i = 0; i < element_list.Count; ++i)
            {
                if (element_list[i].GetKind() == Element.Kind.Repeater)
                {
                    ElementRepeater repeater = (ElementRepeater)element_list[i];
                    int             times    = repeater.GetTimes(environment);
                    expanded_list.Add(repeater.GetCommentElement());
                    if (repeater.IsExistIndex(environment))
                    {
                        int start = repeater.GetStart(environment);
                        int end   = repeater.GetEnd(environment);
                        int step  = (repeater.IsReverse(environment) ? -1 : 1);
                        for (int j = start; Math.Min(start, end) <= j && j <= Math.Max(start, end); j += step)
                        {
                            for (int k = 0; k < times; ++k)
                            {
                                Element element = element_list[i + k + 1].GetClone();
                                element.SetRepeaterLineNumber(repeater.GetLineNumber());
                                element.SetIteratingNumber(j);
                                expanded_list.Add(element);
                            }
                        }
                    }
                    i += times;
                }
                else
                {
                    expanded_list.Add(element_list[i]);
                }
            }
            return(expanded_list);
        }
Пример #2
0
        private static List <Element> Parse(string tejun_str, out Setting setting)
        {
            string[] lines = tejun_str.Split(new string[] { "\r\n" }, StringSplitOptions.None);
            setting = new Setting();
            List <string>  comment_list = new List <string>();
            List <Element> element_list = new List <Element>();

            for (int i = 0; i < lines.Length; ++i)
            {
                if (lines[i] == "")
                {
                    continue;
                }
                if (IsCommentLine(lines[i]))
                {
                    comment_list.Add(lines[i]);
                    continue;
                }
                if (lines[i].StartsWith("framenumber", StringComparison.InvariantCultureIgnoreCase))
                {
                    string[] array = lines[i].Split('\t');
                    try
                    {
                        setting.frame_number = double.Parse(array[1]);
                    }
                    catch (FormatException)
                    {
                        throw new FormatException("framenumber の後ろにはタブ文字と数字が必要です。");
                    }
                    continue;
                }
                if (lines[i].StartsWith("FlipVertical", StringComparison.InvariantCultureIgnoreCase))
                {
                    string[] array = lines[i].Split('\t');
                    if (array.Length >= 2 && array[1] == "on")
                    {
                        setting.flip_vertical = true;
                    }
                    continue;
                }
                if (lines[i].StartsWith("imcolorspace", StringComparison.InvariantCultureIgnoreCase))
                {
                    string[] array = lines[i].Split('\t');
                    if (array.Length >= 2)
                    {
                        setting.imcolorspace = array[1];
                    }
                    continue;
                }
                if (lines[i].StartsWith("colorspace", StringComparison.InvariantCultureIgnoreCase))
                {
                    string[] array = lines[i].Split('\t');
                    if (array.Length >= 2)
                    {
                        setting.colorspace = array[1];
                    }
                    continue;
                }
                if (lines[i].StartsWith("ConvertFpsZone", StringComparison.InvariantCultureIgnoreCase))
                {
                    string[] array = lines[i].Split('\t');
                    if (array.Length >= 2)
                    {
                        setting.zone = int.Parse(array[1]);
                    }
                    continue;
                }
                if (lines[i].StartsWith("LayerLevel", StringComparison.InvariantCultureIgnoreCase))
                {
                    string[] array = lines[i].Split('\t');
                    if (array.Length >= 2)
                    {
                        setting.layer_level = array[1];
                    }
                    continue;
                }
                Element element;

                if (lines[i].StartsWith("繰り返し\t"))
                {
                    element = new ElementRepeater(lines[i], i + 1);
                }
                else
                {
                    element = new Element(lines[i], i + 1);
                }
                element.AddCommentRange(comment_list);
                comment_list.Clear();
                element_list.Add(element);
            }
            if (comment_list.Count > 0)
            {
                Element element = new Element(Element.Kind.Comment);
                element.AddCommentRange(comment_list);
                element_list.Add(element);
            }
            return(element_list);
        }