/** Calculates the confidence in the tagging of a {@link Instance}. */
 public double estimateConfidenceFor(Instance instance, Object[] startTags, Object[] inTags) {
   SegmentIterator iter = new SegmentIterator(model, instance, startTags, inTags);
   double lowestConfidence = 9999;
   while (iter.hasNext()) {
     Segment s = (Segment) iter.nextSegment();
     double currConf = segmentEstimator.estimateConfidenceFor(s);
     if (currConf < lowestConfidence) lowestConfidence = currConf;
   }
   return lowestConfidence;
 }
 public void advance() {
   if (mySegmentIterator.atEnd()) {
     myRangeIterator.advance();
     TextAttributes textAttributes = myRangeIterator.getTextAttributes();
     myCurrentFontStyle = textAttributes == null ? Font.PLAIN : textAttributes.getFontType();
     myCurrentForegroundColor =
         textAttributes == null ? null : textAttributes.getForegroundColor();
     myCurrentBackgroundColor =
         textAttributes == null ? null : textAttributes.getBackgroundColor();
     mySegmentIterator.reset(
         myRangeIterator.getRangeStart(), myRangeIterator.getRangeEnd(), myCurrentFontStyle);
   }
   mySegmentIterator.advance();
 }
 @NotNull
 public String getFontFamilyName() {
   return mySegmentIterator.getCurrentFontFamilyName();
 }
 public int getEndOffset() {
   return mySegmentIterator.getCurrentEndOffset();
 }
 public int getStartOffset() {
   return mySegmentIterator.getCurrentStartOffset();
 }
 public boolean atEnd() {
   return myRangeIterator.atEnd() && mySegmentIterator.atEnd();
 }