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); }