private List <TextRun> ExtractRuns(int startingParaCharIndex, int endingParaCharIndex, SCRIPT_ANALYSIS analysis)
        {
            List <TextRun> list          = new List <TextRun>();
            StringBuilder  stringBuilder = new StringBuilder();
            int            num           = 0;
            int            num2          = 0;
            TextRun        textRun       = null;

            for (int i = 0; i < this.m_runs.Count; i++)
            {
                TextRun textRun2 = this.m_runs[i];
                num2 = num + textRun2.CharacterCount - 1;
                int num3 = -1;
                if (startingParaCharIndex <= num)
                {
                    num3 = 0;
                }
                else if (startingParaCharIndex <= num2)
                {
                    num3 = startingParaCharIndex - num;
                }
                if (num3 >= 0)
                {
                    if (endingParaCharIndex <= num2)
                    {
                        int num4 = endingParaCharIndex - num - num3 + 1;
                        textRun = textRun2.GetSubRun(num3, num4);
                        textRun.SCRIPT_ANALYSIS = analysis;
                        stringBuilder.Append(textRun.Text);
                        list.Add(textRun);
                        if (endingParaCharIndex == num2 && num4 == 1 && i == this.m_runs.Count - 1 && textRun.Text[0] == '\n')
                        {
                            textRun = textRun2.GetSubRun(num3 + 1, 0);
                            textRun.SCRIPT_ANALYSIS = analysis;
                            list.Add(textRun);
                        }
                        Paragraph.AnalyzeForBreakPositions(list, stringBuilder.ToString());
                        return(list);
                    }
                    textRun = textRun2.GetSubRun(num3);
                    textRun.SCRIPT_ANALYSIS = analysis;
                    stringBuilder.Append(textRun.Text);
                    list.Add(textRun);
                }
                num = num2 + 1;
            }
            Paragraph.AnalyzeForBreakPositions(list, stringBuilder.ToString());
            return(list);
        }