Given a piece of text that uses more than one font usage (e.g. "Note", where the "No" and "te" use different fonts), when you use FindText() to locate that string ("Note"), FindText() does not worry about what font was used. When FindText() returns a match, I create a RunRange() using the MatchStart and MatchEnd carets. For that RunRange, I then use a RunIterator to create get each "part" ( runIter.ToCaret()->GetCurrentRunCP() ).
Now I've got (in my example) two "runs". First is "No" and the second is "te". If I wish to replace "No" with "To" (i.e. go from "Note" to "Tote"), TextBlock->ReplaceText() needs a start and end Caret. The Carets returned by FindText() represent the entire "found" text, NOT the individual "run" parts. How can I get Carets that represent the start and end of the "run" (e.g. ONLY the "No") that comes from the RunIterator? Is it possible ? I think the Carets returned by RunRange.GetStartCaret() and GetEndCaret() are simply the ones used to create the RunRange.
Bruce