/**************************************************************
 * 
 * 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_KParseType_idl__
#define __com_sun_star_i18n_KParseType_idl__

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

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

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

/**
    Constants to specify the type of a parsed token.

    <p> Set by
    <member>XCharacterClassification::parseAnyToken()</member> and
    <member>XCharacterClassification::parsePredefinedToken()</member> in
    <member>ParseResult::TokenType</member>. </p>
 */

published constants KParseType
{
    /// One single character like ! # ; : $ et al.
    const long ONE_SINGLE_CHAR      = 0x00000001;

    // For human .idl readers: <, >, <>, =, <=, >=
    /// A Boolean operator like &lt;, &gt;, &lt;&gt;, =, &lt;=, &gt;=
    const long BOOLEAN              = 0x00000002;

    /// A name matching the conditions passed.
    const long IDENTNAME            = 0x00000004;


    // Hint for human .idl readers: do not get confused about the double
    // quotation marks, they are needed for the unoidl compiler which otherwise
    // gets confused about the single quotation marks.
    /** "A single-quoted name matching the conditions passed ( 'na\'me' )."
        "Dequoted name in <member>ParseResult::DequotedNameOrString</member> ( na'me )." */
    const long SINGLE_QUOTE_NAME    = 0x00000008;

    /** A double-quoted string ( "str\"i""ng" ). Dequoted string in
        <member>ParseResult::DequotedNameOrString</member> ( str"i"ng ). */
    const long DOUBLE_QUOTE_STRING  = 0x00000010;

    /** A number where all digits are ASCII characters.
        Numerical value in <member>ParseResult::Value</member>. */
    const long ASC_NUMBER           = 0x00000020;

    /** A number where at least some digits are Unicode (and maybe
        ASCII) characters. Numerical value inKParseType
        <member>ParseResult::Value</member>. */
    const long UNI_NUMBER           = 0x00000040;

    /** Set (ored) if SINGLE_QUOTE_NAME or DOUBLE_QUOTE_STRING has no
        closing quote. */
    const long MISSING_QUOTE        = 0x40000000;


    // useful combinations

    /// Any ASCII or Unicode number
    const long ANY_NUMBER           = ASC_NUMBER | UNI_NUMBER;
};

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

#endif
