<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
        "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
        "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">

<!--
   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.
-->

<module name = "Checker">
  <property name="charset" value="UTF-8"/>

  <property name="severity" value="error"/>

  <property name="fileExtensions" value="java, properties, xml"/>

  <!--
    Special exclusion for source files in snowball package which have a special copyright situation.
    Background: Comment-based filtering changed in checkstyle 8+.
    Therefore, the exclusion must be handled explicitly, otherwise the 'RegexpHeader' check would fail.
   -->
  <module name="BeforeExecutionExclusionFileFilter">
    <property name="fileNamePattern" value=".*[\\/]src[\\/]main[\\/]java[\\/]opennlp[\\/]tools[\\/]stemmer[\\/]snowball.*$"/>
  </module>
  
  <module name="RegexpHeader">
    <property name="header"
              value="^.*$\n^\W*Licensed to the Apache Software Foundation \(ASF\) under one or more$"/>
  </module>

  <!-- Checks for whitespace                               -->
  <!-- See http://checkstyle.sf.net/config_whitespace.html -->
  <module name="FileTabCharacter">
    <property name="eachLine" value="true"/>
  </module>

  <module name="LineLength">
    <property name="max" value="110"/>
    <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
  </module>

  <module name="NewlineAtEndOfFile">
    <property name="lineSeparator" value="lf"/>
  </module>

  <module name="RegexpMultiline">
    <property name="format" value="\r\n"/>
    <property name="message" value="CRLF line endings are prohibited"/>
  </module>

  <module name="TreeWalker">
    <module name="SuppressionCommentFilter"/>
    <module name="OuterTypeFilename"/>
    <module name="IllegalTokenText">
      <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
      <property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
      <property name="message" value="Avoid using corresponding octal or Unicode escape."/>
    </module>
    <module name="AvoidStarImport"/>
    <module name="UnusedImports"/>
    <module name="OneTopLevelClass"/>
    <module name="NoLineWrap"/>
    <!--<module name="NeedBraces"/>-->
    <!--<module name="LeftCurly">-->
      <!--<property name="maxLineLength" value="100"/>-->
    <!--</module>-->
    <!--<module name="RightCurly"/>-->
    <!--<module name="RightCurly">-->
      <!--<property name="option" value="alone"/>-->
      <!--<property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/>-->
    <!--</module>-->
    <module name="WhitespaceAround">
      <property name="allowEmptyConstructors" value="true"/>
      <property name="allowEmptyMethods" value="true"/>
      <property name="allowEmptyTypes" value="true"/>
      <property name="allowEmptyLoops" value="true"/>
    </module>
    <module name="OneStatementPerLine"/>
    <module name="PackageName">
      <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
      <message key="name.invalidPattern"
               value="Package name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="MethodTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
               value="Method type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="InterfaceTypeParameterName">
      <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
      <message key="name.invalidPattern"
               value="Interface type name ''{0}'' must match pattern ''{1}''."/>
    </module>
    <module name="GenericWhitespace">
      <message key="ws.followed"
               value="GenericWhitespace ''{0}'' is followed by whitespace."/>
      <message key="ws.preceded"
               value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
      <message key="ws.illegalFollow"
               value="GenericWhitespace ''{0}'' should followed by whitespace."/>
      <message key="ws.notPreceded"
               value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
    </module>
    <module name="Indentation">
      <property name="basicOffset" value="2"/>
      <property name="braceAdjustment" value="0"/>
      <property name="caseIndent" value="2"/>
      <property name="throwsIndent" value="4"/>
      <property name="lineWrappingIndentation" value="4"/>
      <property name="arrayInitIndent" value="2"/>
      <property name="severity" value="error"/>
    </module>
    <module name="EmptyCatchBlock">
      <property name="exceptionVariableName" value="expected|ignore"/>
    </module>
    <module name="CustomImportOrder">
      <property name="sortImportsInGroupAlphabetically" value="true"/>
      <property name="separateLineBetweenGroups" value="true"/>
      <property name="standardPackageRegExp" value="^(java|javax)\."/>
      <property name="specialImportsRegExp" value="opennlp\."/>
      <property name="customImportOrderRules"
                value="STANDARD_JAVA_PACKAGE###THIRD_PARTY_PACKAGE###SPECIAL_IMPORTS###STATIC"/>
    </module>
    <module name="EqualsHashCode"/>
    <module name="ArrayTypeStyle"/>
  </module>
</module>
