docs: protected IWord getNextMixedWord(char[] chars, int cjkidx) throws IOException
      {
          IStringBuffer buff = new IStringBuffer();
          buff.clear().append(chars, cjkidx);
          String tstring = buff.toString();
          if ( ! dic.match(ILexicon.MIX_ASSIST_WORD, tstring) ) {
              return null;
          }
          
          /*
           * check and append the behind Latin string 
          */
          if ( behindLatin == null ) {
              behindLatin = nextLatinString(readNext());
          }
          
          IWord wd = null;
          buff.append(behindLatin);
          tstring = buff.toString();
          if ( dic.match(ILexicon.CJK_WORD, tstring) ) {
              wd = dic.get(ILexicon.CJK_WORD, tstring);
          }
          
          if ( (ctrlMask & ISegment.CHECK_EC_MASK) != 0 
                  || dic.match(ILexicon.MIX_ASSIST_WORD, tstring) ) {
              ialist.clear();
              int chr = -1, j, mc = 0;
              for ( j = 0; j < dic.mixSuffixLength && (chr = readNext()) != -1; j++ ) {
                  buff.append((char)chr);
                  ialist.add(chr);
                  tstring = buff.toString();
                  if ( dic.match(ILexicon.CJK_WORD, tstring) ) {
                      wd = dic.get(ILexicon.CJK_WORD, tstring);
                      mc = j + 1;
                  }
              }
              
              //push back the read chars.
              for ( int i = j - 1; i >= mc; i-- ) {
                  pushBack(ialist.get(i));
              }
          }
          
          buff.clear();
          buff = null;
          if ( wd != null ) {
              behindLatin = null;
          }
          
          return wd;
      }