[Libreoffice-commits] core.git: 11 commits - formula/source include/formula sc/inc sc/source

Eike Rathke erack at redhat.com
Thu Mar 5 02:49:34 PST 2015


 formula/source/core/api/FormulaCompiler.cxx    |   18 ++++++--
 formula/source/core/api/token.cxx              |    3 +
 formula/source/core/resource/core_resource.src |   16 +++----
 include/formula/FormulaCompiler.hxx            |    3 -
 include/formula/compiler.hrc                   |   25 ++++++------
 include/formula/opcode.hxx                     |    5 +-
 sc/inc/compiler.hxx                            |    8 +++
 sc/inc/global.hxx                              |    4 -
 sc/inc/token.hxx                               |   33 +++++++++++++++
 sc/source/core/data/column4.cxx                |    1 
 sc/source/core/data/conditio.cxx               |    2 
 sc/source/core/data/formulacell.cxx            |    6 +-
 sc/source/core/data/validat.cxx                |    5 +-
 sc/source/core/inc/interpre.hxx                |    4 -
 sc/source/core/tool/compiler.cxx               |   25 +++++++++++-
 sc/source/core/tool/dbdata.cxx                 |    2 
 sc/source/core/tool/interpr1.cxx               |    4 -
 sc/source/core/tool/interpr4.cxx               |    4 -
 sc/source/core/tool/parclass.cxx               |    4 -
 sc/source/core/tool/token.cxx                  |   52 ++++++++++++++++++++++++-
 sc/source/filter/excel/xlformula.cxx           |    4 -
 sc/source/filter/qpro/qproform.cxx             |    2 
 sc/source/ui/src/scfuncs.src                   |    4 -
 23 files changed, 179 insertions(+), 55 deletions(-)

New commits:
commit 967f609cb7bcfd42ccae3d6c8ea75ef9e40910be
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Mar 4 22:33:41 2015 +0100

    add Item enum to ScTableRefToken
    
    Change-Id: Ie35d717fd55e6bbde958d3f2be4dac5f489467f9

diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx
index acfdad6..298e341 100644
--- a/sc/inc/compiler.hxx
+++ b/sc/inc/compiler.hxx
@@ -26,6 +26,7 @@
 #include "scdllapi.h"
 #include "global.hxx"
 #include "refdata.hxx"
+#include "token.hxx"
 #include <formula/token.hxx>
 #include <formula/grammar.hxx>
 #include <unotools/charclass.hxx>
@@ -137,7 +138,8 @@ public:
             sal_uInt16  nIndex;
         } name;
         struct {
-            sal_uInt16      nIndex;
+            sal_uInt16              nIndex;
+            ScTableRefToken::Item   eItem;
         } table;
         struct {
             rtl_uString* mpData;
diff --git a/sc/inc/token.hxx b/sc/inc/token.hxx
index 8d0d333..5564a20 100644
--- a/sc/inc/token.hxx
+++ b/sc/inc/token.hxx
@@ -211,17 +211,34 @@ public:
 /** Special token to remember details of ocTableRef "structured references". */
 class ScTableRefToken : public formula::FormulaToken
 {
-    sal_uInt16                  mnIndex;    ///< index into table / database range collection
-
-    ScTableRefToken(); // disabled
 public:
-    ScTableRefToken( sal_uInt16 nIndex );
+
+    enum Item
+    {
+        ALL      = 0,
+        HEADERS  = 1,
+        DATA     = 2,
+        TOTALS   = 4,
+        THIS_ROW = 8
+    };
+
+    ScTableRefToken( sal_uInt16 nIndex, Item eItem );
     ScTableRefToken( const ScTableRefToken& r );
     virtual ~ScTableRefToken();
 
     virtual sal_uInt16          GetIndex() const SAL_OVERRIDE;
     virtual bool                operator==( const formula::FormulaToken& rToken ) const SAL_OVERRIDE;
     virtual FormulaToken*       Clone() const SAL_OVERRIDE { return new ScTableRefToken(*this); }
+
+            Item                GetItem() const;
+
+private:
+
+    sal_uInt16                  mnIndex;    ///< index into table / database range collection
+    Item                        meItem;
+
+    ScTableRefToken(); // disabled
+
 };
 
 // Only created from within the interpreter, no conversion from ScRawToken,
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 96e3b58..b38c370 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -329,7 +329,7 @@ FormulaToken* ScRawToken::CreateToken() const
             return new ScMatrixToken( pMat );
         case svIndex :
             if (eOp == ocTableRef)
-                return new ScTableRefToken( table.nIndex);
+                return new ScTableRefToken( table.nIndex, table.eItem);
             else
                 return new FormulaIndexToken( eOp, name.nIndex, name.bGlobal);
         case svExternalSingleRef:
@@ -828,15 +828,17 @@ bool ScExternalNameToken::operator==( const FormulaToken& r ) const
     return maName.getData() == r.GetString().getData();
 }
 
-ScTableRefToken::ScTableRefToken( sal_uInt16 nIndex ) :
+ScTableRefToken::ScTableRefToken( sal_uInt16 nIndex, ScTableRefToken::Item eItem ) :
     FormulaToken( svIndex, ocTableRef),
-    mnIndex(nIndex)
+    mnIndex(nIndex),
+    meItem(eItem)
 {
 }
 
 ScTableRefToken::ScTableRefToken( const ScTableRefToken& r ) :
     FormulaToken(r),
-    mnIndex(r.mnIndex)
+    mnIndex(r.mnIndex),
+    meItem(r.meItem)
 {
 }
 
@@ -847,6 +849,11 @@ sal_uInt16 ScTableRefToken::GetIndex() const
     return mnIndex;
 }
 
+ScTableRefToken::Item ScTableRefToken::GetItem() const
+{
+    return meItem;
+}
+
 bool ScTableRefToken::operator==( const FormulaToken& r ) const
 {
     if ( !FormulaToken::operator==(r) )
@@ -855,6 +862,13 @@ bool ScTableRefToken::operator==( const FormulaToken& r ) const
     if (mnIndex != r.GetIndex())
         return false;
 
+    const ScTableRefToken* p = dynamic_cast<const ScTableRefToken*>(&r);
+    if (!p)
+        return false;
+
+    if (meItem != p->GetItem())
+        return false;
+
     return true;
 }
 
commit 338d006c9da54ecdd211144dbfe76a076fe20b27
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Mar 4 20:55:17 2015 +0100

    use ScTableRefToken in ScRawToken::CreateToken()
    
    Change-Id: I895f142667a593bc5fc4f33f2417cbee991e503a

diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx
index f1b83d9..acfdad6 100644
--- a/sc/inc/compiler.hxx
+++ b/sc/inc/compiler.hxx
@@ -137,6 +137,9 @@ public:
             sal_uInt16  nIndex;
         } name;
         struct {
+            sal_uInt16      nIndex;
+        } table;
+        struct {
             rtl_uString* mpData;
             rtl_uString* mpDataIgnoreCase;
         } sharedstring;
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 47e9237..96e3b58 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -328,7 +328,10 @@ FormulaToken* ScRawToken::CreateToken() const
             IF_NOT_OPCODE_ERROR( ocPush, ScMatrixToken);
             return new ScMatrixToken( pMat );
         case svIndex :
-            return new FormulaIndexToken( eOp, name.nIndex, name.bGlobal);
+            if (eOp == ocTableRef)
+                return new ScTableRefToken( table.nIndex);
+            else
+                return new FormulaIndexToken( eOp, name.nIndex, name.bGlobal);
         case svExternalSingleRef:
             {
                 OUString aTabName(extref.cTabName);
commit 20e95bcd836baba16909149ded5b54f978b70ce3
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Mar 4 20:22:28 2015 +0100

    introduce ScTableRefToken
    
    Change-Id: Id6f7f0fbc120072cf6a61229838e39c4a53aeee7

diff --git a/sc/inc/token.hxx b/sc/inc/token.hxx
index f742d01..8d0d333 100644
--- a/sc/inc/token.hxx
+++ b/sc/inc/token.hxx
@@ -208,6 +208,22 @@ public:
     virtual FormulaToken*       Clone() const SAL_OVERRIDE { return new ScExternalNameToken(*this); }
 };
 
+/** Special token to remember details of ocTableRef "structured references". */
+class ScTableRefToken : public formula::FormulaToken
+{
+    sal_uInt16                  mnIndex;    ///< index into table / database range collection
+
+    ScTableRefToken(); // disabled
+public:
+    ScTableRefToken( sal_uInt16 nIndex );
+    ScTableRefToken( const ScTableRefToken& r );
+    virtual ~ScTableRefToken();
+
+    virtual sal_uInt16          GetIndex() const SAL_OVERRIDE;
+    virtual bool                operator==( const formula::FormulaToken& rToken ) const SAL_OVERRIDE;
+    virtual FormulaToken*       Clone() const SAL_OVERRIDE { return new ScTableRefToken(*this); }
+};
+
 // Only created from within the interpreter, no conversion from ScRawToken,
 // never added to ScTokenArray!
 class ScJumpMatrixToken : public formula::FormulaToken
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index ff0b548..47e9237 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -825,6 +825,36 @@ bool ScExternalNameToken::operator==( const FormulaToken& r ) const
     return maName.getData() == r.GetString().getData();
 }
 
+ScTableRefToken::ScTableRefToken( sal_uInt16 nIndex ) :
+    FormulaToken( svIndex, ocTableRef),
+    mnIndex(nIndex)
+{
+}
+
+ScTableRefToken::ScTableRefToken( const ScTableRefToken& r ) :
+    FormulaToken(r),
+    mnIndex(r.mnIndex)
+{
+}
+
+ScTableRefToken::~ScTableRefToken() {}
+
+sal_uInt16 ScTableRefToken::GetIndex() const
+{
+    return mnIndex;
+}
+
+bool ScTableRefToken::operator==( const FormulaToken& r ) const
+{
+    if ( !FormulaToken::operator==(r) )
+        return false;
+
+    if (mnIndex != r.GetIndex())
+        return false;
+
+    return true;
+}
+
 ScJumpMatrix* ScJumpMatrixToken::GetJumpMatrix() const  { return pJumpMatrix; }
 bool ScJumpMatrixToken::operator==( const FormulaToken& r ) const
 {
commit a1b956d03e83fd91f56250e25932ff4951cbc29e
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Mar 4 18:54:12 2015 +0100

    error for css::sheet::FormulaToken with ocTableRef not implemented
    
    Change-Id: I1d95b0168e880029e1fe319f025e586944f636ab

diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx
index 180ba0f..1780c57 100644
--- a/formula/source/core/api/token.cxx
+++ b/formula/source/core/api/token.cxx
@@ -390,7 +390,7 @@ bool FormulaTokenArray::AddFormulaToken(
                 if ( eOpCode == ocDBArea )
                     AddToken( formula::FormulaIndexToken( eOpCode, static_cast<sal_uInt16>(nValue) ) );
                 else if ( eOpCode == ocTableRef )
-                    /* TODO: implementation */ ;
+                    bError = true;  /* TODO: implementation */
                 else if ( eOpCode == ocSpaces )
                     AddToken( formula::FormulaByteToken( ocSpaces, static_cast<sal_uInt8>(nValue) ) );
                 else
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 298451b..ff0b548 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -1045,7 +1045,7 @@ bool ScTokenArray::AddFormulaToken(
                         else if (eOpCode == ocDBArea)
                             AddDBRange(aTokenData.Index);
                         else if (eOpCode == ocTableRef)
-                            /* TODO: AddTableRef(aTokenData.Index) */ ;
+                            bError = true;  /* TODO: implementation */
                         else
                             bError = true;
                     }
commit eaf5a24b1ea7f6f37a7d59e3cdd4b8ba949a4f4f
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Mar 4 14:05:42 2015 +0100

    add HandleTableRef()
    
    Change-Id: I95e80bfa11177e1a52f3215d27448f4642091bad

diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index e0bed7f..6af9f36 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -1112,7 +1112,7 @@ bool FormulaCompiler::GetToken()
     }
     else if( mpToken->GetOpCode() == ocTableRef )
     {
-        /* TODO: return HandleTableRef() */ ;
+        return HandleTableRef();
     }
     return true;
 }
@@ -2104,6 +2104,11 @@ bool FormulaCompiler::HandleDbData()
     return true;
 }
 
+bool FormulaCompiler::HandleTableRef()
+{
+    return true;
+}
+
 void FormulaCompiler::CreateStringFromSingleRef( OUStringBuffer& /*rBuffer*/, FormulaToken* /*pTokenP*/) const
 {
 }
diff --git a/include/formula/FormulaCompiler.hxx b/include/formula/FormulaCompiler.hxx
index adf593c..7f9097b 100644
--- a/include/formula/FormulaCompiler.hxx
+++ b/include/formula/FormulaCompiler.hxx
@@ -282,6 +282,7 @@ protected:
     virtual bool HandleRange();
     virtual bool HandleColRowName();
     virtual bool HandleDbData();
+    virtual bool HandleTableRef();
 
     virtual void CreateStringFromExternal(OUStringBuffer& rBuffer, FormulaToken* pTokenP) const;
     virtual void CreateStringFromSingleRef(OUStringBuffer& rBuffer,FormulaToken* pTokenP) const;
diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx
index 5838a5a..f1b83d9 100644
--- a/sc/inc/compiler.hxx
+++ b/sc/inc/compiler.hxx
@@ -453,6 +453,7 @@ private:
     virtual bool HandleRange() SAL_OVERRIDE;
     virtual bool HandleColRowName() SAL_OVERRIDE;
     virtual bool HandleDbData() SAL_OVERRIDE;
+    virtual bool HandleTableRef() SAL_OVERRIDE;
 
     virtual formula::FormulaTokenRef ExtendRangeReference( formula::FormulaToken & rTok1, formula::FormulaToken & rTok2, bool bReuseDoubleRef ) SAL_OVERRIDE;
     virtual void CreateStringFromExternal(OUStringBuffer& rBuffer, formula::FormulaToken* pTokenP) const SAL_OVERRIDE;
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 8a33bab..6bdf70a 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -4601,6 +4601,25 @@ bool ScCompiler::HandleDbData()
     return true;
 }
 
+bool ScCompiler::HandleTableRef()
+{
+    ScDBData* pDBData = pDoc->GetDBCollection()->getNamedDBs().findByIndex(mpToken->GetIndex());
+    if ( !pDBData )
+        SetError(errNoName);
+    else if (mbJumpCommandReorder)
+    {
+        /* TODO: handle it */
+#if 0
+        ScTokenArray* pNew = new ScTokenArray();
+        pNew->AddDoubleReference( aRefData );
+        PushTokenArray( pNew, true );
+        pNew->Reset();
+        return GetToken();
+#endif
+    }
+    return true;
+}
+
 FormulaTokenRef ScCompiler::ExtendRangeReference( FormulaToken & rTok1, FormulaToken & rTok2, bool bReuseDoubleRef )
 {
     return extendRangeReference( rTok1, rTok2, aPos,bReuseDoubleRef );
commit 40a3cec85f91709e302c08626b59fee0381ef261
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Mar 3 17:55:55 2015 +0100

    handle ocTableRef same as ocDBArea
    
    Change-Id: Id64556850ef0d44db1ff4dedb41e0e1cb9735b76

diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index 37231a8..e0bed7f 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -359,6 +359,7 @@ uno::Sequence< sheet::FormulaOpCodeMapEntry > FormulaCompiler::OpCodeMap::create
             { FormulaMapGroupSpecialOffset::SPACES            , ocSpaces }         ,
             { FormulaMapGroupSpecialOffset::MAT_REF           , ocMatRef }         ,
             { FormulaMapGroupSpecialOffset::DB_AREA           , ocDBArea }         ,
+            /* TODO: { FormulaMapGroupSpecialOffset::TABLE_REF         , ocTableRef }       , */
             { FormulaMapGroupSpecialOffset::MACRO             , ocMacro }          ,
             { FormulaMapGroupSpecialOffset::COL_ROW_NAME      , ocColRowName }
         };
@@ -1109,6 +1110,10 @@ bool FormulaCompiler::GetToken()
     {
         return HandleDbData();
     }
+    else if( mpToken->GetOpCode() == ocTableRef )
+    {
+        /* TODO: return HandleTableRef() */ ;
+    }
     return true;
 }
 
@@ -1123,9 +1128,9 @@ void FormulaCompiler::Factor()
 
     OpCode eOp = mpToken->GetOpCode();
     if( eOp == ocPush || eOp == ocColRowNameAuto || eOp == ocMatRef ||
-            eOp == ocDBArea
+            eOp == ocDBArea || eOp == ocTableRef
             || (!mbJumpCommandReorder && ((eOp == ocName) || (eOp == ocDBArea)
-            || (eOp == ocColRowName) || (eOp == ocBad)))
+            || (eOp == ocTableRef) || (eOp == ocColRowName) || (eOp == ocBad)))
         )
     {
         PutCode( mpToken );
diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx
index f81b9e7..180ba0f 100644
--- a/formula/source/core/api/token.cxx
+++ b/formula/source/core/api/token.cxx
@@ -79,6 +79,7 @@ bool FormulaToken::IsFunction() const
 {
     return (eOp != ocPush && eOp != ocBad && eOp != ocColRowName &&
             eOp != ocColRowNameAuto && eOp != ocName && eOp != ocDBArea &&
+            eOp != ocTableRef &&
            (GetByte() != 0                                                  // x parameters
         || (SC_OPCODE_START_NO_PAR <= eOp && eOp < SC_OPCODE_STOP_NO_PAR)   // no parameter
         || (ocIf == eOp || ocIfError == eOp || ocIfNA == eOp || ocChoose == eOp ) // @ jump commands
@@ -388,6 +389,8 @@ bool FormulaTokenArray::AddFormulaToken(
                 sal_Int32 nValue = rToken.Data.get<sal_Int32>();
                 if ( eOpCode == ocDBArea )
                     AddToken( formula::FormulaIndexToken( eOpCode, static_cast<sal_uInt16>(nValue) ) );
+                else if ( eOpCode == ocTableRef )
+                    /* TODO: implementation */ ;
                 else if ( eOpCode == ocSpaces )
                     AddToken( formula::FormulaByteToken( ocSpaces, static_cast<sal_uInt8>(nValue) ) );
                 else
diff --git a/sc/source/core/data/column4.cxx b/sc/source/core/data/column4.cxx
index a162ca7..ee64aa0 100644
--- a/sc/source/core/data/column4.cxx
+++ b/sc/source/core/data/column4.cxx
@@ -867,6 +867,7 @@ void ScColumn::PreprocessDBDataUpdate(
     aOps.insert(ocBad);
     aOps.insert(ocColRowName);
     aOps.insert(ocDBArea);
+    aOps.insert(ocTableRef);
     RecompileByOpcodeHandler aFunc(pDocument, aOps, rEndListenCxt, rCompileCxt);
     std::for_each(aGroups.begin(), aGroups.end(), aFunc);
 }
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index 1d6ee1e..2f7af3d 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -830,7 +830,7 @@ ScFormulaCell::ScFormulaCell( const ScFormulaCell& rCell, ScDocument& rDoc, cons
                 OpCode eOpCode = pToken->GetOpCode();
                 if (eOpCode == ocName)
                     adjustRangeName(pToken, rDoc, rCell.pDocument, aPos, rCell.aPos);
-                else if (eOpCode == ocDBArea)
+                else if (eOpCode == ocDBArea || eOpCode == ocTableRef)
                     adjustDBRange(pToken, rDoc, rCell.pDocument);
             }
         }
@@ -3568,7 +3568,8 @@ void ScFormulaCell::CompileDBFormula( sc::CompileFormulaContext& rCxt )
 {
     for( FormulaToken* p = pCode->First(); p; p = pCode->Next() )
     {
-        if ( p->GetOpCode() == ocDBArea )
+        OpCode eOp = p->GetOpCode();
+        if ( eOp == ocDBArea || eOp == ocTableRef )
         {
             bCompile = true;
             CompileTokenArray(rCxt);
diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx
index 7efcab2..5982168 100644
--- a/sc/source/core/data/validat.cxx
+++ b/sc/source/core/data/validat.cxx
@@ -685,7 +685,8 @@ bool ScValidationData::GetSelectionFromFormula(
     formula::FormulaToken* t = NULL;
     if (pArr->GetLen() == 1 && (t = pArr->GetNextReferenceOrName()) != NULL)
     {
-        if (t->GetOpCode() == ocDBArea)
+        OpCode eOpCode = t->GetOpCode();
+        if (eOpCode == ocDBArea || eOpCode == ocTableRef)
         {
             if (const ScDBData* pDBData = pDocument->GetDBCollection()->getNamedDBs().findByIndex(t->GetIndex()))
             {
@@ -693,7 +694,7 @@ bool ScValidationData::GetSelectionFromFormula(
                 bRef = true;
             }
         }
-        else if (t->GetOpCode() == ocName)
+        else if (eOpCode == ocName)
         {
             ScRangeData* pName = pDocument->GetRangeName()->findByIndex( t->GetIndex() );
             if (pName && pName->IsReference(aRange))
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 8d32278..8a33bab 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -2962,7 +2962,8 @@ bool ScCompiler::IsDBRange( const OUString& rName )
 {
     if (rName == "[]")
     {
-        if (maRawToken.GetOpCode() == ocDBArea)
+        OpCode eOp = maRawToken.GetOpCode();
+        if (eOp == ocDBArea || eOp == ocTableRef)
         {
             // In OOXML, a database range is named Table1[], Table2[] etc.
             // Skip the [] part if the previous token is a valid db range.
@@ -4289,6 +4290,7 @@ void ScCompiler::CreateStringFromIndex(OUStringBuffer& rBuffer,FormulaToken* _pT
         }
         break;
         case ocDBArea:
+        case ocTableRef:
         {
             const ScDBData* pDBData = pDoc->GetDBCollection()->getNamedDBs().findByIndex(_pTokenP->GetIndex());
             if (pDBData)
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index ce101fc..298451b 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -1044,6 +1044,8 @@ bool ScTokenArray::AddFormulaToken(
                             AddRangeName(aTokenData.Index, aTokenData.Global);
                         else if (eOpCode == ocDBArea)
                             AddDBRange(aTokenData.Index);
+                        else if (eOpCode == ocTableRef)
+                            /* TODO: AddTableRef(aTokenData.Index) */ ;
                         else
                             bError = true;
                     }
@@ -4008,6 +4010,7 @@ void appendTokenByType( sc::TokenStringContext& rCxt, OUStringBuffer& rBuf, cons
                 }
                 break;
                 case ocDBArea:
+                case ocTableRef:
                 {
                     NameType::const_iterator it = rCxt.maNamedDBs.find(nIndex);
                     if (it != rCxt.maNamedDBs.end())
commit 8ee20e2691aa6f67c67d40c61a8cd1569458b5a8
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Mar 3 15:16:45 2015 +0100

    rename ScInterpreter::ScTable/s() to ScSheet/s() to follow ocSheet/s
    
    Change-Id: Ia0db62b27577c64d3d6f6603f2e2c72b56cf1a81

diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 0b669ec..0255b62 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -507,10 +507,10 @@ void ScStDev( bool bTextAsZero = false );
 void ScStDevP( bool bTextAsZero = false );
 void ScColumns();
 void ScRows();
-void ScTables();
+void ScSheets();
 void ScColumn();
 void ScRow();
-void ScTable();
+void ScSheet();
 void ScMatch();
 double IterateParametersIf( ScIterFuncIf );
 void ScCountIf();
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index a5ac375..4082491 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -3797,7 +3797,7 @@ void ScInterpreter::ScRows()
     PushDouble((double)nVal);
 }
 
-void ScInterpreter::ScTables()
+void ScInterpreter::ScSheets()
 {
     sal_uInt8 nParamCount = GetByte();
     sal_uLong nVal;
@@ -4013,7 +4013,7 @@ void ScInterpreter::ScRow()
     }
 }
 
-void ScInterpreter::ScTable()
+void ScInterpreter::ScSheet()
 {
     sal_uInt8 nParamCount = GetByte();
     if ( MustHaveParamCount( nParamCount, 0, 1 ) )
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 760ef27..386b306 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4047,10 +4047,10 @@ StackVar ScInterpreter::Interpret()
                 case ocPMT              : ScPMT();                      break;
                 case ocColumns          : ScColumns();                  break;
                 case ocRows             : ScRows();                     break;
-                case ocSheets           : ScTables();                   break;
+                case ocSheets           : ScSheets();                   break;
                 case ocColumn           : ScColumn();                   break;
                 case ocRow              : ScRow();                      break;
-                case ocSheet            : ScTable();                    break;
+                case ocSheet            : ScSheet();                    break;
                 case ocRRI              : ScRRI();                      break;
                 case ocFV               : ScFV();                       break;
                 case ocNper             : ScNper();                     break;
commit d406edf2442a9d35262daeb48bedb51777ee2255
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Mar 3 14:51:57 2015 +0100

    rename SC_OPCODE_TABLE/S,ocTable/s to SC_OPCODE_SHEET/S,ocSheet/s
    
    Like their function names and to prevent confusion that ocTableRef would
    be related.
    
    Change-Id: I739c7d8e0413aa1e573facdef6bdd854c462f14d

diff --git a/formula/source/core/resource/core_resource.src b/formula/source/core/resource/core_resource.src
index 2f3f2bc..483a5d2 100644
--- a/formula/source/core/resource/core_resource.src
+++ b/formula/source/core/resource/core_resource.src
@@ -221,10 +221,10 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
     String SC_OPCODE_PMT { Text = "PMT" ; };
     String SC_OPCODE_COLUMNS { Text = "COLUMNS" ; };
     String SC_OPCODE_ROWS { Text = "ROWS" ; };
-    String SC_OPCODE_TABLES { Text = "SHEETS" ; };
+    String SC_OPCODE_SHEETS { Text = "SHEETS" ; };
     String SC_OPCODE_COLUMN { Text = "COLUMN" ; };
     String SC_OPCODE_ROW { Text = "ROW" ; };
-    String SC_OPCODE_TABLE { Text = "SHEET" ; };
+    String SC_OPCODE_SHEET { Text = "SHEET" ; };
     String SC_OPCODE_RRI { Text = "RRI" ; };
     String SC_OPCODE_FV { Text = "FV" ; };
     String SC_OPCODE_NPER { Text = "NPER" ; };
@@ -630,10 +630,10 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
     String SC_OPCODE_PMT { Text = "PMT" ; };
     String SC_OPCODE_COLUMNS { Text = "COLUMNS" ; };
     String SC_OPCODE_ROWS { Text = "ROWS" ; };
-    String SC_OPCODE_TABLES { Text = "_xlfn.SHEETS" ; };
+    String SC_OPCODE_SHEETS { Text = "_xlfn.SHEETS" ; };
     String SC_OPCODE_COLUMN { Text = "COLUMN" ; };
     String SC_OPCODE_ROW { Text = "ROW" ; };
-    String SC_OPCODE_TABLE { Text = "_xlfn.SHEET" ; };
+    String SC_OPCODE_SHEET { Text = "_xlfn.SHEET" ; };
     String SC_OPCODE_RRI { Text = "_xlfn.RRI" ; };
     String SC_OPCODE_FV { Text = "FV" ; };
     String SC_OPCODE_NPER { Text = "NPER" ; };
@@ -1041,10 +1041,10 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
     String SC_OPCODE_PMT { Text = "PMT" ; };
     String SC_OPCODE_COLUMNS { Text = "COLUMNS" ; };
     String SC_OPCODE_ROWS { Text = "ROWS" ; };
-    String SC_OPCODE_TABLES { Text = "SHEETS" ; };
+    String SC_OPCODE_SHEETS { Text = "SHEETS" ; };
     String SC_OPCODE_COLUMN { Text = "COLUMN" ; };
     String SC_OPCODE_ROW { Text = "ROW" ; };
-    String SC_OPCODE_TABLE { Text = "SHEET" ; };
+    String SC_OPCODE_SHEET { Text = "SHEET" ; };
     String SC_OPCODE_RRI { Text = "ZGZ" ; };
     String SC_OPCODE_FV { Text = "FV" ; };
     String SC_OPCODE_NPER { Text = "NPER" ; };
@@ -1973,7 +1973,7 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "ROWS" ;
     };
-    String SC_OPCODE_TABLES
+    String SC_OPCODE_SHEETS
     {
         Text [ en-US ] = "SHEETS" ;
     };
@@ -1985,7 +1985,7 @@ Resource RID_STRLIST_FUNCTION_NAMES
     {
         Text [ en-US ] = "ROW" ;
     };
-    String SC_OPCODE_TABLE
+    String SC_OPCODE_SHEET
     {
         Text [ en-US ] = "SHEET" ;
     };
diff --git a/include/formula/compiler.hrc b/include/formula/compiler.hrc
index 2081b09..ba31646 100644
--- a/include/formula/compiler.hrc
+++ b/include/formula/compiler.hrc
@@ -371,8 +371,8 @@
 #define SC_OPCODE_STYLE             368
 #define SC_OPCODE_DDE               369
 #define SC_OPCODE_BASE              370
-#define SC_OPCODE_TABLE             371
-#define SC_OPCODE_TABLES            372
+#define SC_OPCODE_SHEET             371
+#define SC_OPCODE_SHEETS            372
 #define SC_OPCODE_MIN_A             373
 #define SC_OPCODE_MAX_A             374
 #define SC_OPCODE_AVERAGE_A         375
diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx
index 8c578c5..667edeb 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -445,8 +445,8 @@ enum OpCode : sal_uInt16
         ocStyle             = SC_OPCODE_STYLE,
         ocDde               = SC_OPCODE_DDE,
         ocBase              = SC_OPCODE_BASE,
-        ocTable             = SC_OPCODE_TABLE,
-        ocTables            = SC_OPCODE_TABLES,
+        ocSheet             = SC_OPCODE_SHEET,
+        ocSheets            = SC_OPCODE_SHEETS,
         ocMinA              = SC_OPCODE_MIN_A,
         ocMaxA              = SC_OPCODE_MAX_A,
         ocAverageA          = SC_OPCODE_AVERAGE_A,
diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx
index 729cb7e..8553bdd 100644
--- a/sc/source/core/data/conditio.cxx
+++ b/sc/source/core/data/conditio.cxx
@@ -119,7 +119,7 @@ static bool lcl_HasRelRef( ScDocument* pDoc, ScTokenArray* pFormula, sal_uInt16
                     {
                         case ocRow:     // ROW() returns own row index
                         case ocColumn:  // COLUMN() returns own column index
-                        case ocTable:   // SHEET() returns own sheet index
+                        case ocSheet:   // SHEET() returns own sheet index
                         case ocCell:    // CELL() may return own cell address
                             return true;
                         default:
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index b4c72e4..760ef27 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4047,10 +4047,10 @@ StackVar ScInterpreter::Interpret()
                 case ocPMT              : ScPMT();                      break;
                 case ocColumns          : ScColumns();                  break;
                 case ocRows             : ScRows();                     break;
-                case ocTables           : ScTables();                   break;
+                case ocSheets           : ScTables();                   break;
                 case ocColumn           : ScColumn();                   break;
                 case ocRow              : ScRow();                      break;
-                case ocTable            : ScTable();                    break;
+                case ocSheet            : ScTable();                    break;
                 case ocRRI              : ScRRI();                      break;
                 case ocFV               : ScFV();                       break;
                 case ocNper             : ScNper();                     break;
diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx
index 81e3deb..3f29b50 100644
--- a/sc/source/core/tool/parclass.cxx
+++ b/sc/source/core/tool/parclass.cxx
@@ -193,8 +193,8 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] =
     { ocSumX2MY2,        {{ ForceArray, ForceArray                               }, 0 }},
     { ocSumX2DY2,        {{ ForceArray, ForceArray                               }, 0 }},
     { ocSumXMY2,         {{ ForceArray, ForceArray                               }, 0 }},
-    { ocTable,           {{ Reference                                            }, 0 }},
-    { ocTables,          {{ Reference                                            }, 1 }},
+    { ocSheet,           {{ Reference                                            }, 0 }},
+    { ocSheets,          {{ Reference                                            }, 1 }},
     { ocTrend,           {{ Reference, Reference, Reference, Value               }, 0 }},
     { ocTrimMean,        {{ Reference, Value                                     }, 0 }},
     { ocTTest,           {{ ForceArray, ForceArray, Value, Value                 }, 0 }},
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index ec31fad..5684121 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -560,8 +560,8 @@ static const XclFunctionInfo saFuncTable_2013[] =
     EXC_FUNCENTRY_V_VR(         ocRRI,           3,  3,  0,  "RRI" ),
     EXC_FUNCENTRY_V_VR_IMPORT(  ocSecant,        1,  1,  0,  "SEC" ),
     EXC_FUNCENTRY_V_VR_IMPORT(  ocSecantHyp,     1,  1,  0,  "SECH" ),
-    EXC_FUNCENTRY_V_RO(         ocTable,         0,  1,  0,  "SHEET" ),
-    EXC_FUNCENTRY_V_RO(         ocTables,        0,  1,  0,  "SHEETS" ),
+    EXC_FUNCENTRY_V_RO(         ocSheet,         0,  1,  0,  "SHEET" ),
+    EXC_FUNCENTRY_V_RO(         ocSheets,        0,  1,  0,  "SHEETS" ),
     EXC_FUNCENTRY_V_RX(         ocSkewp,         1,  MX, 0,  "SKEW.P" ),
     EXC_FUNCENTRY_V_VR(         ocUnichar,       1,  1,  0,  "UNICHAR" ),
     EXC_FUNCENTRY_V_VR(         ocUnicode,       1,  1,  0,  "UNICODE" ),
diff --git a/sc/source/filter/qpro/qproform.cxx b/sc/source/filter/qpro/qproform.cxx
index a63eed1..21249ea 100644
--- a/sc/source/filter/qpro/qproform.cxx
+++ b/sc/source/filter/qpro/qproform.cxx
@@ -526,7 +526,7 @@ static const struct
     { ocNoName, FT_NOP }, // 151
     { ocNoName, FT_NOP }, // 152
     { ocNoName, FT_NOP }, // 153
-    { ocTable, FT_FuncFix1 },
+    { ocSheet, FT_FuncFix1 },
     { ocNoName, FT_NOP }, // 155 - opcodes do not represent any function.
     { ocNoName, FT_NOP }, // 156
     { ocIndex,  FT_FuncFix4 },
diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src
index 1e7be9b..1bb371e 100644
--- a/sc/source/ui/src/scfuncs.src
+++ b/sc/source/ui/src/scfuncs.src
@@ -9979,7 +9979,7 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
         };
     };
      // -=*# Resource for function SHEET #*=-
-    Resource SC_OPCODE_TABLE
+    Resource SC_OPCODE_SHEET
     {
         String 1 // Description
         {
@@ -10051,7 +10051,7 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
         };
     };
      // -=*# Resource for function SHEETS #*=-
-    Resource SC_OPCODE_TABLES
+    Resource SC_OPCODE_SHEETS
     {
         String 1 // Description
         {
commit 962e14e94d081e587c554e762910c0983f6a139b
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Mar 3 14:13:47 2015 +0100

    introduce SC_OPCODE_TABLE_REF / ocTableRef
    
    Change-Id: I74cd756fe41b75791f7c2665373e33aec04b1eee

diff --git a/include/formula/compiler.hrc b/include/formula/compiler.hrc
index dbbea90..2081b09 100644
--- a/include/formula/compiler.hrc
+++ b/include/formula/compiler.hrc
@@ -42,16 +42,17 @@
 #define SC_OPCODE_SPACES             16
 #define SC_OPCODE_MAT_REF            17
 #define SC_OPCODE_DB_AREA            18     /* additional access operators */
-#define SC_OPCODE_MACRO              19
-#define SC_OPCODE_COL_ROW_NAME       20
-#define SC_OPCODE_COL_ROW_NAME_AUTO  21
-#define SC_OPCODE_PERCENT_SIGN       22     /* operator _follows_ value */
-#define SC_OPCODE_ARRAY_OPEN         23
-#define SC_OPCODE_ARRAY_CLOSE        24
-#define SC_OPCODE_ARRAY_ROW_SEP      25
-#define SC_OPCODE_ARRAY_COL_SEP      26     /* some convs use sep != col_sep */
-#define SC_OPCODE_STOP_DIV           27
-#define SC_OPCODE_SKIP               28     /* used to skip raw tokens during string compilation */
+#define SC_OPCODE_TABLE_REF          19
+#define SC_OPCODE_MACRO              20
+#define SC_OPCODE_COL_ROW_NAME       21
+#define SC_OPCODE_COL_ROW_NAME_AUTO  22
+#define SC_OPCODE_PERCENT_SIGN       23     /* operator _follows_ value */
+#define SC_OPCODE_ARRAY_OPEN         24
+#define SC_OPCODE_ARRAY_CLOSE        25
+#define SC_OPCODE_ARRAY_ROW_SEP      26
+#define SC_OPCODE_ARRAY_COL_SEP      27     /* some convs use sep != col_sep */
+#define SC_OPCODE_STOP_DIV           28
+#define SC_OPCODE_SKIP               29     /* used to skip raw tokens during string compilation */
 
 /*** error constants #... ***/
 #define SC_OPCODE_START_ERRORS       30
diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx
index 3a2af3a..8c578c5 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -54,6 +54,7 @@ enum OpCode : sal_uInt16
         ocSkip              = SC_OPCODE_SKIP,
     // Access commands
         ocDBArea            = SC_OPCODE_DB_AREA,
+        ocTableRef          = SC_OPCODE_TABLE_REF,
         ocMacro             = SC_OPCODE_MACRO,
         ocColRowName        = SC_OPCODE_COL_ROW_NAME,
         ocColRowNameAuto    = SC_OPCODE_COL_ROW_NAME_AUTO,
commit b68987558068f88fa8016e5bd2d62f57d27d0c19
Author: Eike Rathke <erack at redhat.com>
Date:   Mon Mar 2 16:11:01 2015 +0100

    remove SC_START_INDEX_DB_COLL binary file format legacy
    
    There's no ocName that should be ocDBArea instead anymore.
    
    Change-Id: Idbbb62330bfdc5c4e83f99436490e12d90cfd1d4

diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx
index 85bb412..2c6c612 100644
--- a/sc/inc/global.hxx
+++ b/sc/inc/global.hxx
@@ -71,10 +71,6 @@ const sal_Unicode CHAR_ZWNBSP   = 0x2060;
 
 const SCSIZE MAXSUBTOTAL        = 3;
 
-#define SC_START_INDEX_DB_COLL 50000
-                                        // Above this threshold are indices
-                                        // for data base areas
-
 #define SC_USE_PS_POINTS    1       /**< use PostScript points (72ppi) instead of old TeX points (72.27ppi) */
 
 #define PIXEL_PER_INCH      96.0
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index d4bba7d..1d6ee1e 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -3568,8 +3568,7 @@ void ScFormulaCell::CompileDBFormula( sc::CompileFormulaContext& rCxt )
 {
     for( FormulaToken* p = pCode->First(); p; p = pCode->Next() )
     {
-        if ( p->GetOpCode() == ocDBArea
-            || (p->GetOpCode() == ocName && p->GetIndex() >= SC_START_INDEX_DB_COLL) )
+        if ( p->GetOpCode() == ocDBArea )
         {
             bCompile = true;
             CompileTokenArray(rCxt);
diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx
index 8a04a9c..e9299e3 100644
--- a/sc/source/core/tool/dbdata.cxx
+++ b/sc/source/core/tool/dbdata.cxx
@@ -801,7 +801,7 @@ bool ScDBCollection::AnonDBs::operator== (const AnonDBs& r) const
 }
 
 ScDBCollection::ScDBCollection(ScDocument* pDocument) :
-    pDoc(pDocument), nEntryIndex(SC_START_INDEX_DB_COLL), maNamedDBs(*this, *pDocument) {}
+    pDoc(pDocument), nEntryIndex(1), maNamedDBs(*this, *pDocument) {}
 
 ScDBCollection::ScDBCollection(const ScDBCollection& r) :
     pDoc(r.pDoc), nEntryIndex(r.nEntryIndex), maNamedDBs(r.maNamedDBs), maAnonDBs(r.maAnonDBs) {}
commit 8d78888a0c62641284d5e5fbe42cb3b950e22683
Author: Eike Rathke <erack at redhat.com>
Date:   Mon Mar 2 14:09:34 2015 +0100

    rename confusing HandleSingleRef() to more appropriate HandleColRowName()
    
    Change-Id: Ib2e6d5cd9863ac1f9b0ba9b192f5d17d489ed19f

diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index f81a97b..37231a8 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -1103,7 +1103,7 @@ bool FormulaCompiler::GetToken()
     }
     else if( mpToken->GetOpCode() == ocColRowName )
     {
-        return HandleSingleRef();
+        return HandleColRowName();
     }
     else if( mpToken->GetOpCode() == ocDBArea )
     {
@@ -2089,7 +2089,7 @@ bool FormulaCompiler::HandleRange()
     return true;
 }
 
-bool FormulaCompiler::HandleSingleRef()
+bool FormulaCompiler::HandleColRowName()
 {
     return true;
 }
diff --git a/include/formula/FormulaCompiler.hxx b/include/formula/FormulaCompiler.hxx
index 0758dda..adf593c 100644
--- a/include/formula/FormulaCompiler.hxx
+++ b/include/formula/FormulaCompiler.hxx
@@ -280,7 +280,7 @@ protected:
     virtual FormulaTokenRef ExtendRangeReference( FormulaToken & rTok1, FormulaToken & rTok2, bool bReuseDoubleRef );
     virtual bool HandleExternalReference(const FormulaToken& _aToken);
     virtual bool HandleRange();
-    virtual bool HandleSingleRef();
+    virtual bool HandleColRowName();
     virtual bool HandleDbData();
 
     virtual void CreateStringFromExternal(OUStringBuffer& rBuffer, FormulaToken* pTokenP) const;
diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx
index 6fb4b1b..5838a5a 100644
--- a/sc/inc/compiler.hxx
+++ b/sc/inc/compiler.hxx
@@ -451,7 +451,7 @@ private:
 
     virtual bool HandleExternalReference(const formula::FormulaToken& _aToken) SAL_OVERRIDE;
     virtual bool HandleRange() SAL_OVERRIDE;
-    virtual bool HandleSingleRef() SAL_OVERRIDE;
+    virtual bool HandleColRowName() SAL_OVERRIDE;
     virtual bool HandleDbData() SAL_OVERRIDE;
 
     virtual formula::FormulaTokenRef ExtendRangeReference( formula::FormulaToken & rTok1, formula::FormulaToken & rTok2, bool bReuseDoubleRef ) SAL_OVERRIDE;
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 84611ee..8d32278 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -4363,7 +4363,7 @@ void ScCompiler::fillAddInToken(::std::vector< ::com::sun::star::sheet::FormulaO
     // FIXME: what about those old non-UNO AddIns?
 }
 
-bool ScCompiler::HandleSingleRef()
+bool ScCompiler::HandleColRowName()
 {
     ScSingleRefData& rRef = *mpToken.get()->GetSingleRef();
     ScAddress aAbs = rRef.toAbs(aPos);


More information about the Libreoffice-commits mailing list