/// ------------------------------------------------------------------------------------ /// <summary> /// Fixes the paragraph's analysis. /// </summary> /// <param name="para">The paragraph.</param> /// ------------------------------------------------------------------------------------ private static void FixParaAnalysis(IScrTxtPara para) { // If it has any word-level analysis, we need to reparse the whole text. if ((from segment in para.SegmentsOS where segment.AnalysesRS.Count > 0 select segment).FirstOrDefault() == null) { // No analyses; just resegment it. using (ParagraphParser parser = new ParagraphParser(para)) { parser.CollectPreExistingParaAnnotations(); SegmentMaker segmentMaker = new SegmentMaker(para.Contents, para.Cache.WritingSystemFactory, parser); segmentMaker.Run(); if (segmentMaker.Segments.Count < para.SegmentsOS.Count) { // The paragraph has more segments than it should have, so remove any // extras that are floating around. for (int i = para.SegmentsOS.Count - 1; i >= segmentMaker.Segments.Count; i--) para.SegmentsOS.RemoveAt(i); } } } else { // Reparse the whole thing. ParagraphParser.ParseParagraph(para); } }