@Override public synchronized byte[] info(final MainOptions options) { final TokenBuilder tb = new TokenBuilder(); final long l = inX.length() + inY.length() + inZ.length(); tb.add(LI_NAMES).add(data.meta.ftinclude).add(NL); tb.add(LI_SIZE + Performance.format(l, true) + NL); final IndexStats stats = new IndexStats(options.get(MainOptions.MAXSTAT)); addOccs(stats); stats.print(tb); return tb.finish(); }
/** * Caches and returns all unique tokens specified in a query. * * @param list token list * @return token set */ private TokenSet unique(final TokenList list) { // cache all query tokens in a set (duplicates are removed) final TokenSet ts = new TokenSet(); switch (mode) { case ALL: case ANY: for (final byte[] t : list) ts.add(t); break; case ALL_WORDS: case ANY_WORD: final FTLexer l = new FTLexer(ftt.opt); for (final byte[] t : list) { l.init(t); while (l.hasNext()) ts.add(l.nextToken()); } break; case PHRASE: final TokenBuilder tb = new TokenBuilder(); for (final byte[] t : list) tb.add(t).add(' '); ts.add(tb.trim().finish()); } return ts; }
/** * Converts to HANKAKU characters. * * @param text Japanese text * @return result of conversion(->HANKAKU) */ private static byte[] toHankaku(final byte[] text) { if (ascii(text)) return text; final int tl = text.length; final TokenBuilder tb = new TokenBuilder(tl); for (int t = 0; t < tl; t += cl(text, t)) { final int c = cp(text, t); if (c >= 0xFF10 && c <= 0xFF19 || c >= 0xFF21 && c <= 0xFF3A || c >= 0xFF41 && c <= 0xFF5A) { tb.add(c - 0xFEE0); } else if (c == 0x3000) { // IDEOGRAPHIC SPACE tb.add(0x0020); } else if (c == 0xFF01) { // ! tb.add(0x0021); } else if (c == 0xFF02) { // " FULLWIDTH QUOTATION MARK tb.add(0x0022); } else if (c == 0x201C) { // " LEFT DOUBLE QUOTATION MARK tb.add(0x0022); } else if (c == 0x201D) { // " RIGHT DOUBLE QUOTATION MARK tb.add(0x0022); } else if (c == 0xFF03) { // # tb.add(0x0023); } else if (c == 0xFF04) { // $ tb.add(0x0024); } else if (c == 0xFF05) { // % tb.add(0x0025); } else if (c == 0xFF06) { // & tb.add(0x0026); } else if (c == 0xFF07) { // ' FULLWIDTH APOSTROPHE tb.add(0x0027); } else if (c == 0x2018) { // ' LEFT SINGLE QUOTATION MARK tb.add(0x0027); } else if (c == 0x2019) { // ' RIGHT SINGLE QUOTATION MARK tb.add(0x0027); } else if (c == 0xFF08) { // ( tb.add(0x0028); } else if (c == 0xFF09) { // ) tb.add(0x0029); } else if (c == 0xFF0A) { // * tb.add(0x002A); } else if (c == 0xFF0B) { // + tb.add(0x002B); } else if (c == 0xFF0C) { // , tb.add(0x002C); } else if (c == 0xFF0D) { // - tb.add(0x002D); } else if (c == 0xFF0E) { // . tb.add(0x002E); } else if (c == 0xFF0F) { // / tb.add(0x002F); } else if (c == 0xFF1A) { // : tb.add(0x003A); } else if (c == 0xFF1B) { // ; tb.add(0x003B); } else if (c == 0xFF1C) { // < tb.add(0x003C); } else if (c == 0xFF1D) { // = tb.add(0x003D); } else if (c == 0xFF1E) { // > tb.add(0x003E); } else if (c == 0xFF1F) { // ? tb.add(0x003F); } else if (c == 0xFF20) { // @ tb.add(0x0040); } else if (c == 0xFF3B) { // [ tb.add(0x005B); } else if (c == 0xFFE5) { // \ tb.add(0x005C); } else if (c == 0xFF3D) { // ] tb.add(0x005D); } else if (c == 0xFF3E) { // ^ tb.add(0x005E); } else if (c == 0xFF3F) { // _ tb.add(0x005F); } else if (c == 0xFF40) { // ` tb.add(0x0060); } else if (c == 0xFF5B) { // { tb.add(0x007B); } else if (c == 0xFF5C) { // | tb.add(0x007C); } else if (c == 0xFF5D) { // } tb.add(0x007D); } else if (c == 0xFF5E) { // ~ tb.add(0x007E); } else { tb.add(c); } } return tb.finish(); }