content: package org.apache.lucene.analysis.hi;
  
  /**
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import static org.apache.lucene.analysis.util.StemmerUtil.*;
  
  /**
   * Light Stemmer for Hindi.
   * <p>
   * Implements the algorithm specified in:
   * <i>A Lightweight Stemmer for Hindi</i>
   * Ananthakrishnan Ramanathan and Durgesh D Rao.
   * http://computing.open.ac.uk/Sites/EACLSouthAsia/Papers/p6-Ramanathan.pdf
   * </p>
   */
  public class HindiStemmer {
    public int stem(char buffer[], int len) {
      // 5
      if ((len > 6) && (endsWith(buffer, len, "ाएंगी")
          || endsWith(buffer, len, "ाएंगे")
          || endsWith(buffer, len, "ाऊंगी")
          || endsWith(buffer, len, "ाऊंगा")
          || endsWith(buffer, len, "ाइयाँ")
          || endsWith(buffer, len, "ाइयों")
          || endsWith(buffer, len, "ाइयां")
        ))
        return len - 5;
      
      // 4
      if ((len > 5) && (endsWith(buffer, len, "ाएगी")
          || endsWith(buffer, len, "ाएगा")
          || endsWith(buffer, len, "ाओगी")
          || endsWith(buffer, len, "ाओगे")
          || endsWith(buffer, len, "एंगी")
          || endsWith(buffer, len, "ेंगी")
          || endsWith(buffer, len, "एंगे")
          || endsWith(buffer, len, "ेंगे")
          || endsWith(buffer, len, "ूंगी")
          || endsWith(buffer, len, "ूंगा")
          || endsWith(buffer, len, "ातीं")
          || endsWith(buffer, len, "नाओं")
          || endsWith(buffer, len, "नाएं")
          || endsWith(buffer, len, "ताओं")
          || endsWith(buffer, len, "ताएं")
          || endsWith(buffer, len, "ियाँ")
          || endsWith(buffer, len, "ियों")
          || endsWith(buffer, len, "ियां")
          ))
        return len - 4;
      
      // 3
      if ((len > 4) && (endsWith(buffer, len, "ाकर")
          || endsWith(buffer, len, "ाइए")
          || endsWith(buffer, len, "ाईं")
          || endsWith(buffer, len, "ाया")
          || endsWith(buffer, len, "ेगी")
          || endsWith(buffer, len, "ेगा")
          || endsWith(buffer, len, "ोगी")
          || endsWith(buffer, len, "ोगे")
          || endsWith(buffer, len, "ाने")
          || endsWith(buffer, len, "ाना")
          || endsWith(buffer, len, "ाते")
          || endsWith(buffer, len, "ाती")
          || endsWith(buffer, len, "ाता")
          || endsWith(buffer, len, "तीं")
          || endsWith(buffer, len, "ाओं")
          || endsWith(buffer, len, "ाएं")
          || endsWith(buffer, len, "ुओं")
          || endsWith(buffer, len, "ुएं")
          || endsWith(buffer, len, "ुआं")
          ))
        return len - 3;
      
      // 2
      if ((len > 3) && (endsWith(buffer, len, "कर")
          || endsWith(buffer, len, "ाओ")
          || endsWith(buffer, len, "िए")
          || endsWith(buffer, len, "ाई")
          || endsWith(buffer, len, "ाए")
          || endsWith(buffer, len, "ने")
          || endsWith(buffer, len, "नी")
          || endsWith(buffer, len, "ना")
          || endsWith(buffer, len, "ते")
          || endsWith(buffer, len, "ीं")
          || endsWith(buffer, len, "ती")
          || endsWith(buffer, len, "ता")
          || endsWith(buffer, len, "ाँ")
          || endsWith(buffer, len, "ां")
          || endsWith(buffer, len, "ों")
          || endsWith(buffer, len, "ें")
          ))
        return len - 2;
      
      // 1
      if ((len > 2) && (endsWith(buffer, len, "ो")
          || endsWith(buffer, len, "े")
          || endsWith(buffer, len, "ू")
          || endsWith(buffer, len, "ु")
          || endsWith(buffer, len, "ी")
          || endsWith(buffer, len, "ि")
          || endsWith(buffer, len, "ा")
         ))
        return len - 1;
      return len;
    }
  }
  