code: boolean checkSuffix(char[] chars, int[] cursor) {
      if (suffix == null)
        return true;
      if (cursor[1] - cursor[0] < suffix.minlen)
        // a conservative test, but if we can't pass it, we'll certainly fail later
        return false;
      int last = suffix.items.length - 1;
      for (int i = last; i >= 0; i--) {
        Object item = suffix.items[i];
        if (item == Pattern.matchOne)
          if (!topicSkipBackward(chars, cursor))
            return false;
          else
            ; // topic skip succeeded so continue
        else if (!matchBackward(chars, (char[]) item, cursor))
          return false;
        // else this phase succeeded so continue
      }
      // The suffix matches exactly.  But, the preceding character MUST be a separator.  We
      // don't allow start-of-string because we would not have checked the suffix
      // at all if it were allowed to extend to the beginning (it would then be identical
      // to the prefix).
      return cursor[0] < cursor[1] && 
        chars[cursor[1]-1] == MatchSpace.SUBTOPIC_SEPARATOR_CHAR;
    }
docs: Override checkSuffix to implement topic semantics