/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


#ifndef __com_sun_star_i18n_reservedWords_idl__
#define __com_sun_star_i18n_reservedWords_idl__

//============================================================================

module com {  module sun {  module star {  module i18n {

//============================================================================

/**
    Offsets into the sequence of strings returned by
    <member>XLocaleData::getReservedWord()</member>.

    @see XLocaleData
        for links to DTD of XML locale data files.
 */

published constants reservedWords
{
    /// "true"
    const short TRUE_WORD             = 0;
    /// "false"
    const short FALSE_WORD            = 1;
    /// "1st quarter"
    const short QUARTER1_WORD         = 2;
    /// "2nd quarter"
    const short QUARTER2_WORD         = 3;
    /// "3rd quarter"
    const short QUARTER3_WORD         = 4;
    /// "4th quarter"
    const short QUARTER4_WORD         = 5;
    /// "above"
    const short ABOVE_WORD            = 6;
    /// "below"
    const short BELOW_WORD            = 7;
    /// "Q1"
    const short QUARTER1_ABBREVIATION = 8;
    /// "Q2"
    const short QUARTER2_ABBREVIATION = 9;
    /// "Q3"
    const short QUARTER3_ABBREVIATION = 10;
    /// "Q4"
    const short QUARTER4_ABBREVIATION = 11;

    //! Yes, this must be the count of known reserved words and one more than
    //! the maximum number used above!
    /// Count of known reserved words.
    const short COUNT                 = 12;
};

//============================================================================
}; }; }; };

#endif
