コード例 #1
0
        private static Tuple <List <Smi>, List <Smi> > DevideGroup(List <SmiPadding> smis, int lineCount)
        {
            List <Smi> smiUpper = new List <Smi>();
            List <Smi> smiLower = new List <Smi>();

            // 모든 줄 내용이 바뀐 경우 그룹 잘라서 처리
            SmiPadding        bfr      = smis[0];
            List <SmiPadding> splitted = new List <SmiPadding>()
            {
                bfr
            };

            for (int i = 1; i < smis.Count; i++)
            {
                SmiPadding smi     = smis[i];
                bool       isSplit = true;
                for (int j = 0; j < lineCount; j++)
                {
                    if (smi.lines[j] != null && !smi.lines[j].Equals(bfr.lines[j]))
                    {
                        isSplit = false;
                        break;
                    }
                }
                if (isSplit)
                {
                    Tuple <List <Smi>, List <Smi> > devided = DevideLine(splitted, lineCount);
                    smiUpper.AddRange(devided.Item1);
                    smiLower.AddRange(devided.Item2);
                    splitted = new List <SmiPadding> {
                        smi
                    };
                }
                else
                {
                    splitted.Add(smi);
                }
                bfr = smi;
            }
            {
                Tuple <List <Smi>, List <Smi> > devided = DevideLine(splitted, lineCount);
                smiUpper.AddRange(devided.Item1);
                smiLower.AddRange(devided.Item2);
            }

            return(new Tuple <List <Smi>, List <Smi> >(smiUpper, smiLower));
        }
コード例 #2
0
        public static Tuple <List <Smi>, List <Smi> > Devide(List <Smi> input)
        {
            List <SmiPadding> smis = new List <SmiPadding>();

            foreach (Smi smi in input)
            {
                smis.Add(new SmiPadding(smi));
            }

            List <Smi> smiUpper = new List <Smi>();
            List <Smi> smiLower = new List <Smi>();

            // 줄 수가 같은 것 단위로 나눠서 처리
            SmiPadding        bfr      = smis[0];
            List <SmiPadding> splitted = new List <SmiPadding>()
            {
                bfr
            };

            for (int i = 1; i < smis.Count; i++)
            {
                SmiPadding smi = smis[i];
                if (smi.lines.Length == bfr.lines.Length)
                {
                    splitted.Add(smi);
                }
                else
                {
                    Tuple <List <Smi>, List <Smi> > devided = DevideGroup(splitted, bfr.lines.Length);
                    smiUpper.AddRange(devided.Item1);
                    smiLower.AddRange(devided.Item2);
                    splitted = new List <SmiPadding> {
                        smi
                    };
                }
                bfr = smi;
            }
            {
                Tuple <List <Smi>, List <Smi> > devided = DevideGroup(splitted, bfr.lines.Length);
                smiUpper.AddRange(devided.Item1);
                smiLower.AddRange(devided.Item2);
            }

            return(new Tuple <List <Smi>, List <Smi> >(smiUpper, smiLower));
        }