docs: static int matchTokens(Tokens src, Tokens dst, int dstStartIndex) {
      for (int srcStartIndex = 0; srcStartIndex < src.size(); srcStartIndex++) {
        TokensIterator srcTokensIterator = TokensIterator.of(src, srcStartIndex);
        TokensIterator dstTokensIterator = TokensIterator.of(dst, dstStartIndex);
        StringIterator srcStrIterator = StringIterator.of(srcTokensIterator.next());
        StringIterator dstStrIterator = StringIterator.of(dstTokensIterator.next());
        while (srcStrIterator.hasNext() || srcStrIterator.hasNext()) {
          if (!matchToken(srcStrIterator, dstStrIterator))
            break;
          if (!srcStrIterator.hasNext() && !dstStrIterator.hasNext())
            return dstTokensIterator.pos() - dstStartIndex + 1;
          if (!srcStrIterator.hasNext() && !srcTokensIterator.hasNext())
            break;
          if (!dstStrIterator.hasNext() && !dstTokensIterator.hasNext())
            break;
          if (!srcStrIterator.hasNext() && srcTokensIterator.hasNext())
            srcStrIterator = StringIterator.of(srcTokensIterator.next());
          if (!dstStrIterator.hasNext() && dstTokensIterator.hasNext())
            dstStrIterator = StringIterator.of(dstTokensIterator.next());
        }
      }
  
      return 0;
    }