/*
 * 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.
 */
package org.apache.sis.io.wkt;


/**
 * Whether WKT keywords shall be written with lower, upper or camel case styles.
 * The most common usage for WKT keywords is upper case.
 * However with version 2 of Well Known Text, camel case keywords may be easier to read
 * because WKT 2 has more keywords made by combination of words. Examples:
 *
 * <table class="sis">
 *   <caption>WKT element case comparisons</caption>
 *   <tr><th>Upper case</th>                 <th>Camel case</th></tr>
 *   <tr><td>{@code TIMEEXTENT}</td>         <td>{@code TimeExtent}</td></tr>
 *   <tr><td>{@code ANGLEUNIT}</td>          <td>{@code AngleUnit}</td></tr>
 *   <tr><td>{@code BASEGEODCRS}</td>        <td>{@code BaseGeodCRS}</td></tr>
 *   <tr><td>{@code DERIVINGCONVERSION}</td> <td>{@code DerivingConversion}</td></tr>
 *   <tr><td>{@code ENGINEERINGDATUM}</td>   <td>{@code EngineeringDatum}</td></tr>
 * </table>
 *
 * <div class="note"><b>Note:</b>
 * Well-Known Text keywords are case insensitive at parsing time. {@code KEYWORD} is equivalent to
 * {@code keyword} is equivalent to {@code KeyWord} and to {@code kEYwORd}.</div>
 *
 * @author  Martin Desruisseaux (Geomatys)
 * @version 0.6
 * @since   0.4
 * @module
 */
public enum KeywordCase {
    /**
     * WKT formatting uses lower case keywords.
     */
    LOWER_CASE,

    /**
     * WKT formatting uses upper case keywords.
     * This is the most usual case in WKT 1 strings.
     */
    UPPER_CASE,

    /**
     * WKT formatting uses CamelCase keywords. This is more useful in WKT 2 strings, which
     * use longer keywords than WKT 1 did. Examples: {@code "TimeExtent"}, {@code "AngleUnit"}.
     */
    CAMEL_CASE,

    /**
     * Keywords case is determined by the WKT {@linkplain Convention convention}.
     * The current mapping is:
     *
     * <ul>
     *   <li>Well Known Text version 2 uses camel case.</li>
     *   <li>Well Known Text version 1 uses upper case.</li>
     * </ul>
     */
    DEFAULT
}
