/**************************************************************
 * 
 * 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_sheet_FormulaMapGroupSpecialOffset_idl__
#define __com_sun_star_sheet_FormulaMapGroupSpecialOffset_idl__

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

module com {  module sun {  module star {  module sheet {

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

/** Constants designating the offsets within the sequence returned by
    <member>XFormulaOpCodeMapper::getAvailableMappings</member> when
    called for group <const>FormulaMapGroup::SPECIAL</const>.

    <p>The number of constants may grow in future versions!</p>
 */
constants FormulaMapGroupSpecialOffset
{
    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe a formula operand token that will be pushed onto the formula
        stack while the formula is interpreted.

        <p>The <member>FormulaToken::Data</member> member shall contain one of
        the following values:</p>

        <ul>
        <li>A value of type <atom>double</atom> for literal floating-point
        constants.</li>
        <li>A <atom>string</atom> for literal text.</li>
        <li>A <atom dim="[][]">any</atom> for a literal array. The contained
        values shall be of type <atom>double</atom> or <atom>string</atom>.
        Floating-point values and strings may occur together in an array.</li>
        <li>A struct of type <type>SingleReference</type> for a reference to a
        single cell in the own document.</li>
        <li>A struct of type <type>ComplexReference</type> for a reference to
        a range of cells in the own document.</li>
        <li>A struct of type <type>ExternalReference</type> for a reference to
        a cell, a range of cells, or a defined name in an external document.</li>
        </ul>
     */
    const long PUSH = 0;

    // -----------------------------------------------------------------------

    const long CALL = 1;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        instruct the formula interpreter to immediately stop interpreting the
        formula.

        <p>The <member>FormulaToken::Data</member> member is not used
        and should be empty.</p>
     */
    const long STOP = 2;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe the reference to an external function (e.g. add-in function)
        used in formulas.

        <p>The <member>FormulaToken::Data</member> member shall contain a
        <atom>string</atom> with the programmatical name of the function, e.g.
        "com.sun.star.sheet.addin.Analysis.getEomonth" for the EOMONTH
        function from the Analsysis add-in.</p>
     */
    const long EXTERNAL = 3;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe the reference to a defined name (also known as named range)
        used in formulas.

        <p>The <member>FormulaToken::Data</member> member shall contain an
        integer value of type <atom>long</atom> specifying the index of the
        defined name. This index can be obtained from the defined name using
        its <member>NamedRange::TokenIndex</member> property.</p>

        @see  NamedRange
     */
    const long NAME = 4;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe an invalid name that resolves to the #NAME? error in formulas.

        <p>The <member>FormulaToken::Data</member> member is not used
        and should be empty.</p>
     */
    const long NO_NAME = 5;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe an empty function parameter.

        <p>Example: In the formula <code>=SUM(1;;2)</code> the second
        parameter is empty and represented by a formula token containing the
        "missing" op-code.</p>

        <p>The <member>FormulaToken::Data</member> member is not used
        and should be empty.</p>
     */
    const long MISSING = 6;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe "bad" data in a formula, e.g. data the formula parser was not
        able to parse.

        <p>The <member>FormulaToken::Data</member> member shall contain a
        <atom>string</atom> with the bad data. This string will be displayed
        literally in the formula.</p>
     */
    const long BAD = 7;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe whitespace characters within the string representation of a
        formula.

        <p>Whitespace characters in formulas are used for readability and do
        not affect the result of the formula.</p>

        <p>The <member>FormulaToken::Data</member> member shall contain a
        positive integer value of type <atom>long</atom> specifying the number
        of space characters.</p>

        <p>Attention: This may change in next versions to support other
        characters than simple space characters (e.g. line feeds, horizontal
        tabulators, non-breakable spaces).</p>
     */
    const long SPACES = 8;

    // -----------------------------------------------------------------------

    const long MAT_REF = 9;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe the reference to a database range used in formulas.

        <p>The <member>FormulaToken::Data</member> member shall contain an
        integer value of type <atom>long</atom> specifying the index of the
        database range. This index can be obtained from the database range
        using its <member>DatabaseRange::TokenIndex</member> property.</p>

        @see  DatabaseRange
     */
    const long DB_AREA            = 10;

    // -----------------------------------------------------------------------

    /** Formula tokens containing the op-code obtained from this offset
        describe the reference to a macro function called in a formula.

        <p>The <member>FormulaToken::Data</member> member shall contain a
        <atom>string</atom> specifying the name of the macro function.</p>
     */
    const long MACRO              = 11;

    // -----------------------------------------------------------------------

    const long COL_ROW_NAME       = 12;

    // -----------------------------------------------------------------------

};

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

}; }; }; };

#endif

