public void applyFont(int startIndex, int endIndex, short fontIndex) {if (startIndex > endIndex)throw new IllegalArgumentException("Start index must be less than end index.");if (startIndex < 0 || endIndex > length())throw new IllegalArgumentException("Start and end index not in range.");if (startIndex == endIndex)return;short currentFont = NO_FONT;if (endIndex != length()) {currentFont = this.getFontAtIndex(endIndex);}_string = cloneStringIfRequired();Iterator<FormatRun> formatting = _string.formatIterator();if (formatting != null) {while (formatting.hasNext()) {FormatRun r = formatting.next();if ((r.getCharacterPos() >= startIndex) && (r.getCharacterPos() < endIndex))formatting.remove();}}_string.addFormatRun(new FormatRun((short)startIndex, fontIndex));if (endIndex != length())_string.addFormatRun(new FormatRun((short)endIndex, currentFont));addToSSTIfRequired();}

public void ApplyFont(int startIndex, int endIndex, short fontIndex){if (startIndex > endIndex)throw new ArgumentException("Start index must be less than end index.");if (startIndex < 0 || endIndex > Length)throw new ArgumentException("Start and end index not in range.");if (startIndex == endIndex)return;short currentFont = NO_FONT;if (endIndex != Length){currentFont = this.GetFontAtIndex(endIndex);}_string = CloneStringIfRequired();System.Collections.Generic.List<UnicodeString.FormatRun> formatting = _string.FormatIterator();ArrayList deletedFR = new ArrayList();if (formatting != null){IEnumerator<UnicodeString.FormatRun> formats = formatting.GetEnumerator();while (formats.MoveNext()){UnicodeString.FormatRun r = formats.Current;if ((r.CharacterPos >= startIndex) && (r.CharacterPos < endIndex)){deletedFR.Add(r);}}}foreach (UnicodeString.FormatRun fr in deletedFR){_string.RemoveFormatRun(fr);}_string.AddFormatRun(new UnicodeString.FormatRun((short)startIndex, fontIndex));if (endIndex != Length)_string.AddFormatRun(new UnicodeString.FormatRun((short)endIndex, currentFont));AddToSSTIfRequired();}
