add --shared
[pylucene.git] / lucene-java-3.4.0 / lucene / src / java / org / apache / lucene / analysis / LowerCaseFilter.java
1 package org.apache.lucene.analysis;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import java.io.IOException;
21
22 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
23 import org.apache.lucene.util.CharacterUtils;
24 import org.apache.lucene.util.Version;
25
26 /**
27  * Normalizes token text to lower case.
28  * <a name="version"/>
29  * <p>You must specify the required {@link Version}
30  * compatibility when creating LowerCaseFilter:
31  * <ul>
32  *   <li> As of 3.1, supplementary characters are properly lowercased.
33  * </ul>
34  */
35 public final class LowerCaseFilter extends TokenFilter {
36   private final CharacterUtils charUtils;
37   private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
38   
39   /**
40    * Create a new LowerCaseFilter, that normalizes token text to lower case.
41    * 
42    * @param matchVersion See <a href="#version">above</a>
43    * @param in TokenStream to filter
44    */
45   public LowerCaseFilter(Version matchVersion, TokenStream in) {
46     super(in);
47     charUtils = CharacterUtils.getInstance(matchVersion);
48   }
49   
50   /**
51    * @deprecated Use {@link #LowerCaseFilter(Version, TokenStream)} instead.
52    */
53   @Deprecated
54   public LowerCaseFilter(TokenStream in) {
55     this(Version.LUCENE_30, in);
56   }
57
58   @Override
59   public final boolean incrementToken() throws IOException {
60     if (input.incrementToken()) {
61       final char[] buffer = termAtt.buffer();
62       final int length = termAtt.length();
63       for (int i = 0; i < length;) {
64        i += Character.toChars(
65                Character.toLowerCase(
66                    charUtils.codePointAt(buffer, i)), buffer, i);
67       }
68       return true;
69     } else
70       return false;
71   }
72 }