[PATCH] ODFF: implement missing imaginary functions

Regina Henschel rb.henschel at t-online.de
Sat Jun 9 10:58:26 PDT 2012


Hi,

I have added the imaginary functions IMTAN, IMCOT, IMSEC, IMCSC, IMSINH, 
IMCOSH, IMCSCH, IMSECH in AOO. Those are defined in ODFF, but not 
implemented yet.

You find the original patch in 
https://issues.apache.org/ooo/show_bug.cgi?id=111609. It is integration 
in AOO trunk with revision r1348096.

I have now transformed it, so it is applicable to LibreOffice. If you 
like it, you can use it immediately, without waiting for an AOO release.

Kind regards
Regina

-------------- next part --------------
From d286084873ad34b35fce351f1e25e7c1e1bed4c4 Mon Sep 17 00:00:00 2001
From: Regina Henschel <rb.henschel at t-online.de>
Date: Sat, 9 Jun 2012 19:34:38 +0200
Subject: [PATCH] ODFF: implement missing imaginary functions [AOO i111609
 r1348096]

Change-Id: I04ce0b1fdf787c3d8b2301cd92400e54049494bf
---
 sc/inc/helpids.h                                   |    8 +
 sc/source/core/tool/addinhelpid.cxx                |    8 +
 sc/source/core/tool/odffmap.cxx                    |    9 +
 sc/util/hidother.src                               |    8 +
 .../idl/com/sun/star/sheet/addin/XAnalysis.idl     |   32 ++++
 scaddins/source/analysis/analysis.cxx              |   80 +++++++++
 scaddins/source/analysis/analysis.hrc              |   27 +++-
 scaddins/source/analysis/analysis.hxx              |    8 +
 scaddins/source/analysis/analysis.src              |  144 ++++++++++++++++
 scaddins/source/analysis/analysis_deffuncnames.src |   72 ++++++++
 scaddins/source/analysis/analysis_funcnames.src    |   40 +++++
 scaddins/source/analysis/analysishelper.cxx        |  172 +++++++++++++++++++-
 scaddins/source/analysis/analysishelper.hxx        |   13 ++-
 13 files changed, 608 insertions(+), 13 deletions(-)

diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index 7c5955c..8f38a0b 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -387,6 +387,14 @@
 #define HID_AAI_FUNC_OCT2HEX                                    "SC_HID_AAI_FUNC_OCT2HEX"
 #define HID_AAI_FUNC_CONVERT                                    "SC_HID_AAI_FUNC_CONVERT"
 #define HID_AAI_FUNC_FACTDOUBLE                                 "SC_HID_AAI_FUNC_FACTDOUBLE"
+#define HID_AAI_FUNC_IMTAN                                      "SC_HID_AAI_FUNC_IMTAN"
+#define HID_AAI_FUNC_IMSEC                                      "SC_HID_AAI_FUNC_IMSEC"
+#define HID_AAI_FUNC_IMCSC                                      "SC_HID_AAI_FUNC_IMCSC"
+#define HID_AAI_FUNC_IMCOT                                      "SC_HID_AAI_FUNC_IMCOT"
+#define HID_AAI_FUNC_IMSINH                                     "SC_HID_AAI_FUNC_IMSINH"
+#define HID_AAI_FUNC_IMCOSH                                     "SC_HID_AAI_FUNC_IMCOSH"
+#define HID_AAI_FUNC_IMSECH                                     "SC_HID_AAI_FUNC_IMSECH"
+#define HID_AAI_FUNC_IMCSCH                                     "SC_HID_AAI_FUNC_IMCSCH"
 
 // DateFunc Addin Functions (max.20) -----------------------------------------
 #define HID_DAI_FUNC_DAYSINMONTH                                "SC_HID_DAI_FUNC_DAYSINMONTH"
diff --git a/sc/source/core/tool/addinhelpid.cxx b/sc/source/core/tool/addinhelpid.cxx
index 67bae51..0442b5a 100644
--- a/sc/source/core/tool/addinhelpid.cxx
+++ b/sc/source/core/tool/addinhelpid.cxx
@@ -91,6 +91,10 @@ const ScUnoAddInHelpId pAnalysisHelpIds[] =
     { "getImargument"               , HID_AAI_FUNC_IMARGUMENT       },
     { "getImconjugate"              , HID_AAI_FUNC_IMCONJUGATE      },
     { "getImcos"                    , HID_AAI_FUNC_IMCOS            },
+    { "getImcosh"                   , HID_AAI_FUNC_IMCOSH           },
+    { "getImcot"                    , HID_AAI_FUNC_IMCOT            },
+    { "getImcsc"                    , HID_AAI_FUNC_IMCSC            },
+    { "getImcsch"                   , HID_AAI_FUNC_IMCSCH           },
     { "getImdiv"                    , HID_AAI_FUNC_IMDIV            },
     { "getImexp"                    , HID_AAI_FUNC_IMEXP            },
     { "getImln"                     , HID_AAI_FUNC_IMLN             },
@@ -99,10 +103,14 @@ const ScUnoAddInHelpId pAnalysisHelpIds[] =
     { "getImpower"                  , HID_AAI_FUNC_IMPOWER          },
     { "getImproduct"                , HID_AAI_FUNC_IMPRODUCT        },
     { "getImreal"                   , HID_AAI_FUNC_IMREAL           },
+    { "getImsec"                    , HID_AAI_FUNC_IMSEC            },
+    { "getImsech"                   , HID_AAI_FUNC_IMSECH           },
     { "getImsin"                    , HID_AAI_FUNC_IMSIN            },
+    { "getImsinh"                   , HID_AAI_FUNC_IMSINH           },
     { "getImsqrt"                   , HID_AAI_FUNC_IMSQRT           },
     { "getImsub"                    , HID_AAI_FUNC_IMSUB            },
     { "getImsum"                    , HID_AAI_FUNC_IMSUM            },
+    { "getImtan"                    , HID_AAI_FUNC_IMTAN            },
     { "getIntrate"                  , HID_AAI_FUNC_INTRATE          },
     { "getIseven"                   , HID_AAI_FUNC_ISEVEN           },
     { "getIsodd"                    , HID_AAI_FUNC_ISODD            },
diff --git a/sc/source/core/tool/odffmap.cxx b/sc/source/core/tool/odffmap.cxx
index 2129da3..b61f8ad 100644
--- a/sc/source/core/tool/odffmap.cxx
+++ b/sc/source/core/tool/odffmap.cxx
@@ -95,6 +95,14 @@ ScCompiler::AddInMap ScCompiler::maAddInMap[] =
     { "IMSUB", "IMSUB", false, "com.sun.star.sheet.addin.Analysis.getImsub", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMSUB" },
     { "IMSUM", "IMSUM", false, "com.sun.star.sheet.addin.Analysis.getImsum", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMSUM" },
     { "IMSQRT", "IMSQRT", false, "com.sun.star.sheet.addin.Analysis.getImsqrt", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMSQRT" },
+    { "IMTAN", "IMTAN", false, "com.sun.star.sheet.addin.Analysis.getImtan", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMTAN" },
+    { "IMSEC", "IMSEC", false, "com.sun.star.sheet.addin.Analysis.getImsec", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMSEC" },
+    { "IMCSC", "IMCSC", false, "com.sun.star.sheet.addin.Analysis.getImcsc", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMCSC" },
+    { "IMCOT", "IMCOT", false, "com.sun.star.sheet.addin.Analysis.getImcot", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMCOT" },
+    { "IMSINH", "IMSINH", false, "com.sun.star.sheet.addin.Analysis.getImsinh", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMSINH" },
+    { "IMCOSH", "IMCOSH", false, "com.sun.star.sheet.addin.Analysis.getImcosh", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMCOSH" },
+    { "IMSECH", "IMSECH", false, "com.sun.star.sheet.addin.Analysis.getImsech", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMSECH" },
+    { "IMCSCH", "IMCSCH", false, "com.sun.star.sheet.addin.Analysis.getImcsch", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETIMCSCH" },
     { "COMPLEX", "COMPLEX", false, "com.sun.star.sheet.addin.Analysis.getComplex", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETCOMPLEX" },
     { "CONVERT", "CONVERT_ADD", false, "com.sun.star.sheet.addin.Analysis.getConvert", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETCONVERT" },
     { "AMORDEGRC", "AMORDEGRC", false, "com.sun.star.sheet.addin.Analysis.getAmordegrc", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETAMORDEGRC" },
@@ -134,6 +142,7 @@ ScCompiler::AddInMap ScCompiler::maAddInMap[] =
     { "COUPPCD", "COUPPCD", false, "com.sun.star.sheet.addin.Analysis.getCouppcd", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETCOUPPCD" },
     { "COUPNUM", "COUPNUM", false, "com.sun.star.sheet.addin.Analysis.getCoupnum", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETCOUPNUM" },
     { "FVSCHEDULE", "FVSCHEDULE", false, "com.sun.star.sheet.addin.Analysis.getFvschedule", "COM.SUN.STAR.SHEET.ADDIN.ANALYSIS.GETFVSCHEDULE" },
+
 };
 
 const ScCompiler::AddInMap* ScCompiler::GetAddInMap()
diff --git a/sc/util/hidother.src b/sc/util/hidother.src
index 85d36f9..fc31e88 100644
--- a/sc/util/hidother.src
+++ b/sc/util/hidother.src
@@ -463,6 +463,14 @@ hidspecial HID_AAI_FUNC_IMSIN       { HelpID = HID_AAI_FUNC_IMSIN; };
 hidspecial HID_AAI_FUNC_IMSUB       { HelpID = HID_AAI_FUNC_IMSUB; };
 hidspecial HID_AAI_FUNC_IMSUM       { HelpID = HID_AAI_FUNC_IMSUM; };
 hidspecial HID_AAI_FUNC_IMSQRT      { HelpID = HID_AAI_FUNC_IMSQRT; };
+hidspecial HID_AAI_FUNC_IMTAN       { HelpID = HID_AAI_FUNC_IMTAN; };
+hidspecial HID_AAI_FUNC_IMSEC       { HelpID = HID_AAI_FUNC_IMSEC; };
+hidspecial HID_AAI_FUNC_IMCSC       { HelpID = HID_AAI_FUNC_IMCSC; };
+hidspecial HID_AAI_FUNC_IMCOT       { HelpID = HID_AAI_FUNC_IMCOT; };
+hidspecial HID_AAI_FUNC_IMSINH      { HelpID = HID_AAI_FUNC_IMSINH; };
+hidspecial HID_AAI_FUNC_IMCOSH      { HelpID = HID_AAI_FUNC_IMCOSH; };
+hidspecial HID_AAI_FUNC_IMSECH      { HelpID = HID_AAI_FUNC_IMSECH; };
+hidspecial HID_AAI_FUNC_IMCSCH      { HelpID = HID_AAI_FUNC_IMCSCH; };
 hidspecial HID_AAI_FUNC_COMPLEX     { HelpID = HID_AAI_FUNC_COMPLEX; };
 hidspecial HID_AAI_FUNC_OCT2BIN     { HelpID = HID_AAI_FUNC_OCT2BIN; };
 hidspecial HID_AAI_FUNC_OCT2DEZ     { HelpID = HID_AAI_FUNC_OCT2DEZ; };
diff --git a/scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl b/scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl
index 1cb0018..daae62b 100644
--- a/scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl
+++ b/scaddins/idl/com/sun/star/sheet/addin/XAnalysis.idl
@@ -321,6 +321,38 @@ module addin
         string getImsqrt( [in] string Num )
             raises( com::sun::star::lang::IllegalArgumentException );
 
+        /// imtan.
+        string getImtan( [in] string Num )
+            raises( com::sun::star::lang::IllegalArgumentException );
+
+        /// imsec.
+        string getImsec( [in] string Num)
+            raises( com::sun::star::lang::IllegalArgumentException );
+
+        /// imcsc.
+        string getImcsc( [in] string Num )
+            raises( com::sun::star::lang::IllegalArgumentException );
+
+        /// imcot.
+        string getImcot( [in] string Num )
+            raises( com::sun::star::lang::IllegalArgumentException );
+
+        /// imsinh.
+        string getImsinh( [in] string Num )
+            raises( com::sun::star::lang::IllegalArgumentException );
+
+        /// imcosh.
+        string getImcosh( [in] string Num )
+            raises( com::sun::star::lang::IllegalArgumentException );
+
+        /// imsech.
+        string getImsech( [in] string Num)
+            raises( com::sun::star::lang::IllegalArgumentException );
+
+        /// imcsch.
+        string getImcsch( [in] string Num )
+            raises( com::sun::star::lang::IllegalArgumentException );
+
         /// complex.
         string getComplex( [in] double Real, [in] double Imaginary, [in] any Suffix )
             raises( com::sun::star::lang::IllegalArgumentException );
diff --git a/scaddins/source/analysis/analysis.cxx b/scaddins/source/analysis/analysis.cxx
index e62265f..2215f28 100644
--- a/scaddins/source/analysis/analysis.cxx
+++ b/scaddins/source/analysis/analysis.cxx
@@ -1215,6 +1215,86 @@ STRING SAL_CALL AnalysisAddIn::getImsqrt( const STRING& aNum ) THROWDEF_RTE_IAE
 }
 
 
+STRING SAL_CALL AnalysisAddIn::getImtan( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+    Complex     z( aNum );
+
+    z.Tan();
+
+    return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImsec( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+    Complex     z( aNum );
+
+    z.Sec();
+
+    return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImcsc( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+    Complex     z( aNum );
+
+    z.Csc();
+
+    return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImcot( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+    Complex     z( aNum );
+
+    z.Cot();
+
+    return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImsinh( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+    Complex     z( aNum );
+
+    z.Sinh();
+
+    return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImcosh( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+    Complex     z( aNum );
+
+    z.Cosh();
+
+    return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImsech( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+    Complex     z( aNum );
+
+    z.Sech();
+
+    return z.GetString();
+}
+
+
+STRING SAL_CALL AnalysisAddIn::getImcsch( const STRING& aNum ) THROWDEF_RTE_IAE
+{
+    Complex     z( aNum );
+
+    z.Csch();
+
+    return z.GetString();
+}
+
+
 STRING SAL_CALL AnalysisAddIn::getComplex( double fR, double fI, const ANY& rSuff ) THROWDEF_RTE_IAE
 {
     sal_Bool    bi;
diff --git a/scaddins/source/analysis/analysis.hrc b/scaddins/source/analysis/analysis.hrc
index 7b5b94f..d53eb1e 100644
--- a/scaddins/source/analysis/analysis.hrc
+++ b/scaddins/source/analysis/analysis.hrc
@@ -131,7 +131,14 @@
 #define ANALYSIS_Couppcd                    (ANALYSIS_FUNCDESC_START+90)
 #define ANALYSIS_Coupnum                    (ANALYSIS_FUNCDESC_START+91)
 #define ANALYSIS_Fvschedule                 (ANALYSIS_FUNCDESC_START+92)
-
+#define ANALYSIS_Imtan                      (ANALYSIS_FUNCDESC_START+93)
+#define ANALYSIS_Imsec                      (ANALYSIS_FUNCDESC_START+94)
+#define ANALYSIS_Imcsc                      (ANALYSIS_FUNCDESC_START+95)
+#define ANALYSIS_Imcot                      (ANALYSIS_FUNCDESC_START+96)
+#define ANALYSIS_Imsinh                     (ANALYSIS_FUNCDESC_START+97)
+#define ANALYSIS_Imcosh                     (ANALYSIS_FUNCDESC_START+98)
+#define ANALYSIS_Imsech                     (ANALYSIS_FUNCDESC_START+99)
+#define ANALYSIS_Imcsch                     (ANALYSIS_FUNCDESC_START+100)
 
 #define ANALYSIS_FUNCNAME_START             (1)
 
@@ -228,7 +235,14 @@
 #define ANALYSIS_FUNCNAME_Couppcd           (ANALYSIS_FUNCNAME_START+90)
 #define ANALYSIS_FUNCNAME_Coupnum           (ANALYSIS_FUNCNAME_START+91)
 #define ANALYSIS_FUNCNAME_Fvschedule        (ANALYSIS_FUNCNAME_START+92)
-
+#define ANALYSIS_FUNCNAME_Imtan             (ANALYSIS_FUNCNAME_START+93)
+#define ANALYSIS_FUNCNAME_Imsec             (ANALYSIS_FUNCNAME_START+94)
+#define ANALYSIS_FUNCNAME_Imcsc             (ANALYSIS_FUNCNAME_START+95)
+#define ANALYSIS_FUNCNAME_Imcot             (ANALYSIS_FUNCNAME_START+96)
+#define ANALYSIS_FUNCNAME_Imsinh            (ANALYSIS_FUNCNAME_START+97)
+#define ANALYSIS_FUNCNAME_Imcosh            (ANALYSIS_FUNCNAME_START+98)
+#define ANALYSIS_FUNCNAME_Imsech            (ANALYSIS_FUNCNAME_START+99)
+#define ANALYSIS_FUNCNAME_Imcsch            (ANALYSIS_FUNCNAME_START+100)
 
 #define ANALYSIS_DEFFUNCNAME_START          (RID_ANALYSIS_DEFFUNCTION_NAMES+1)
 
@@ -325,6 +339,13 @@
 #define ANALYSIS_DEFFUNCNAME_Couppcd        (ANALYSIS_DEFFUNCNAME_START+90)
 #define ANALYSIS_DEFFUNCNAME_Coupnum        (ANALYSIS_DEFFUNCNAME_START+91)
 #define ANALYSIS_DEFFUNCNAME_Fvschedule     (ANALYSIS_DEFFUNCNAME_START+92)
-
+#define ANALYSIS_DEFFUNCNAME_Imtan          (ANALYSIS_DEFFUNCNAME_START+93)
+#define ANALYSIS_DEFFUNCNAME_Imsec          (ANALYSIS_DEFFUNCNAME_START+94)
+#define ANALYSIS_DEFFUNCNAME_Imcsc          (ANALYSIS_DEFFUNCNAME_START+95)
+#define ANALYSIS_DEFFUNCNAME_Imcot          (ANALYSIS_DEFFUNCNAME_START+96)
+#define ANALYSIS_DEFFUNCNAME_Imsinh         (ANALYSIS_DEFFUNCNAME_START+97)
+#define ANALYSIS_DEFFUNCNAME_Imcosh         (ANALYSIS_DEFFUNCNAME_START+98)
+#define ANALYSIS_DEFFUNCNAME_Imsech         (ANALYSIS_DEFFUNCNAME_START+99)
+#define ANALYSIS_DEFFUNCNAME_Imcsch         (ANALYSIS_DEFFUNCNAME_START+100)
 
 #endif
diff --git a/scaddins/source/analysis/analysis.hxx b/scaddins/source/analysis/analysis.hxx
index 3e0fd4a..b6d58e6 100644
--- a/scaddins/source/analysis/analysis.hxx
+++ b/scaddins/source/analysis/analysis.hxx
@@ -193,6 +193,14 @@ public:
     virtual STRING SAL_CALL     getImsum( constREFXPS& xOpt, const SEQSEQ( STRING )& aNum1, const SEQ( ANY )& aFollowingPars ) THROWDEF_RTE_IAE;
 
     virtual STRING SAL_CALL     getImsqrt( const STRING& aNum ) THROWDEF_RTE_IAE;
+    virtual STRING SAL_CALL     getImtan( const STRING& aNum ) THROWDEF_RTE_IAE;
+    virtual STRING SAL_CALL     getImsec( const STRING& aNum ) THROWDEF_RTE_IAE;
+    virtual STRING SAL_CALL     getImcsc( const STRING& aNum ) THROWDEF_RTE_IAE;
+    virtual STRING SAL_CALL     getImcot( const STRING& aNum ) THROWDEF_RTE_IAE;
+    virtual STRING SAL_CALL     getImsinh( const STRING& aNum ) THROWDEF_RTE_IAE;
+    virtual STRING SAL_CALL     getImcosh( const STRING& aNum ) THROWDEF_RTE_IAE;
+    virtual STRING SAL_CALL     getImsech( const STRING& aNum ) THROWDEF_RTE_IAE;
+    virtual STRING SAL_CALL     getImcsch( const STRING& aNum ) THROWDEF_RTE_IAE;
     virtual STRING SAL_CALL     getComplex( double fReal, double fImaginary, const ANY& rSuffix ) THROWDEF_RTE_IAE;
 
     virtual double SAL_CALL     getConvert( double fVal, const STRING& aFromUnit, const STRING& aToUnit ) THROWDEF_RTE_IAE;
diff --git a/scaddins/source/analysis/analysis.src b/scaddins/source/analysis/analysis.src
index bdff7932..8e81e3e 100644
--- a/scaddins/source/analysis/analysis.src
+++ b/scaddins/source/analysis/analysis.src
@@ -1352,6 +1352,150 @@ Resource RID_ANALYSIS_FUNCTION_DESCRIPTIONS
 
     };
 
+    Resource ANALYSIS_Imtan
+    {
+        String 1    // description Imtan
+        {
+            Text [ en-US ] = "Returns the tangent of a complex number";
+        };
+
+        String 2 // name of parameter 1         Imtan
+        {
+            Text [ en-US ] = "Complex number";
+        };
+
+        String 3 // description of parameter 1  Imtan
+        {
+            Text [ en-US ] = "A complex number";
+        };
+    };
+
+    Resource ANALYSIS_Imsec
+    {
+        String 1    // description Imsec
+        {
+            Text [ en-US ] = "Returns the secant of a complex number";
+        };
+
+        String 2 // name of parameter 1         Imsec
+        {
+            Text [ en-US ] = "Complex number";
+        };
+
+        String 3 // description of parameter 1  Imsec
+        {
+            Text [ en-US ] = "A complex number";
+        };
+    };
+
+    Resource ANALYSIS_Imcsc
+    {
+        String 1    // description Imcsc
+        {
+            Text [ en-US ] = "Returns the cosecant of a complex number";
+        };
+
+        String 2 // name of parameter 1         Imcsc
+        {
+            Text [ en-US ] = "Complex number";
+        };
+
+        String 3 // description of parameter 1  Imcsc
+        {
+            Text [ en-US ] = "A complex number";
+        };
+    };
+
+    Resource ANALYSIS_Imcot
+    {
+        String 1    // description Imcot
+        {
+            Text [ en-US ] = "Returns the cotangent of a complex number";
+        };
+
+        String 2 // name of parameter 1         Imcot
+        {
+            Text [ en-US ] = "Complex number";
+        };
+
+        String 3 // description of parameter 1  Imcot
+        {
+            Text [ en-US ] = "A complex number";
+        };
+    };
+
+    Resource ANALYSIS_Imsinh
+    {
+        String 1    // description Imsinh
+        {
+            Text [ en-US ] = "Returns the hyperbolic sine of a complex number";
+        };
+
+        String 2 // name of parameter 1         Imsinh
+        {
+            Text [ en-US ] = "Complex number";
+        };
+
+        String 3 // description of parameter 1  Imsinh
+        {
+            Text [ en-US ] = "A complex number";
+        };
+    };
+
+    Resource ANALYSIS_Imcosh
+    {
+        String 1    // description Imcosh
+        {
+            Text [ en-US ] = "Returns the hyperbolic cosine of a complex number";
+        };
+
+        String 2 // name of parameter 1         Imcosh
+        {
+            Text [ en-US ] = "Complex number";
+        };
+
+        String 3 // description of parameter 1  Imcosh
+        {
+            Text [ en-US ] = "A complex number";
+        };
+    };
+
+    Resource ANALYSIS_Imsech
+    {
+        String 1    // description Imsech
+        {
+            Text [ en-US ] = "Returns the hyperbolic secant of a complex number";
+        };
+
+        String 2 // name of parameter 1         Imsech
+        {
+            Text [ en-US ] = "Complex number";
+        };
+
+        String 3 // description of parameter 1  Imsech
+        {
+            Text [ en-US ] = "A complex number";
+        };
+    };
+
+    Resource ANALYSIS_Imcsch
+    {
+        String 1    // description Imcsch
+        {
+            Text [ en-US ] = "Returns the hyperbolic cosecant of a complex number";
+        };
+
+        String 2 // name of parameter 1         Imcsch
+        {
+            Text [ en-US ] = "Complex number";
+        };
+
+        String 3 // description of parameter 1  Imcsch
+        {
+            Text [ en-US ] = "A complex number";
+        };
+    };
+
     Resource ANALYSIS_Complex
     {
         String 1    // description Complex
diff --git a/scaddins/source/analysis/analysis_deffuncnames.src b/scaddins/source/analysis/analysis_deffuncnames.src
index 2c67e2c..cff3b5d 100644
--- a/scaddins/source/analysis/analysis_deffuncnames.src
+++ b/scaddins/source/analysis/analysis_deffuncnames.src
@@ -813,6 +813,78 @@ Resource RID_ANALYSIS_DEFFUNCTION_NAMES
         };
     };
 
+    StringArray ANALYSIS_DEFFUNCNAME_Imtan
+    {
+        ItemList =
+        {
+            < "IMTAN"; >;
+            < "IMTAN"; >;
+        };
+    };
+
+    StringArray ANALYSIS_DEFFUNCNAME_Imsec
+    {
+        ItemList =
+        {
+            < "IMSEC"; >;
+            < "IMSEC"; >;
+        };
+    };
+
+    StringArray ANALYSIS_DEFFUNCNAME_Imcsc
+    {
+        ItemList =
+        {
+            < "IMCSC"; >;
+            < "IMCSC"; >;
+        };
+    };
+
+    StringArray ANALYSIS_DEFFUNCNAME_Imcot
+    {
+        ItemList =
+        {
+            < "IMCOT"; >;
+            < "IMCOT"; >;
+        };
+    };
+
+    StringArray ANALYSIS_DEFFUNCNAME_Imsinh
+    {
+        ItemList =
+        {
+            < "IMSINH"; >;
+            < "IMSINH"; >;
+        };
+    };
+
+    StringArray ANALYSIS_DEFFUNCNAME_Imcosh
+    {
+        ItemList =
+        {
+            < "IMCOSH"; >;
+            < "IMCOSH"; >;
+        };
+    };
+
+    StringArray ANALYSIS_DEFFUNCNAME_Imsech
+    {
+        ItemList =
+        {
+            < "IMSECH"; >;
+            < "IMSECH"; >;
+        };
+    };
+
+    StringArray ANALYSIS_DEFFUNCNAME_Imcsch
+    {
+        ItemList =
+        {
+            < "IMCSCH"; >;
+            < "IMCSCH"; >;
+        };
+    };
+
     StringArray ANALYSIS_DEFFUNCNAME_Complex
     {
         ItemList =
diff --git a/scaddins/source/analysis/analysis_funcnames.src b/scaddins/source/analysis/analysis_funcnames.src
index 47796f3..fea61a5 100644
--- a/scaddins/source/analysis/analysis_funcnames.src
+++ b/scaddins/source/analysis/analysis_funcnames.src
@@ -465,6 +465,46 @@ Resource RID_ANALYSIS_FUNCTION_NAMES
         Text [ en-US ] = "IMSQRT";
     };
 
+    String ANALYSIS_FUNCNAME_Imtan
+    {
+        Text [ en-US ] = "IMTAN";
+    };
+
+    String ANALYSIS_FUNCNAME_Imsec
+    {
+        Text [ en-US ] = "IMSEC";
+    };
+
+    String ANALYSIS_FUNCNAME_Imcsc
+    {
+        Text [ en-US ] = "IMCSC";
+    };
+
+    String ANALYSIS_FUNCNAME_Imcot
+    {
+        Text [ en-US ] = "IMCOT";
+    };
+
+    String ANALYSIS_FUNCNAME_Imsinh
+    {
+        Text [ en-US ] = "IMSINH";
+    };
+
+    String ANALYSIS_FUNCNAME_Imcosh
+    {
+        Text [ en-US ] = "IMCOSH";
+    };
+
+    String ANALYSIS_FUNCNAME_Imsech
+    {
+        Text [ en-US ] = "IMSECH";
+    };
+
+    String ANALYSIS_FUNCNAME_Imcsch
+    {
+        Text [ en-US ] = "IMCSCH";
+    };
+
     String ANALYSIS_FUNCNAME_Complex
     {
         Text [ en-US ] = "COMPLEX";
diff --git a/scaddins/source/analysis/analysishelper.cxx b/scaddins/source/analysis/analysishelper.cxx
index c2e17a8..a37632f 100644
--- a/scaddins/source/analysis/analysishelper.cxx
+++ b/scaddins/source/analysis/analysishelper.cxx
@@ -108,6 +108,14 @@ const FuncDataBase pFuncDatas[] =
     FUNCDATA( Imsub,            UNIQUE,     STDPAR,     2,          FDCat_Tech ),
     FUNCDATA( Imsqrt,           UNIQUE,     STDPAR,     1,          FDCat_Tech ),
     FUNCDATA( Imsum,            UNIQUE,     INTPAR,     1,          FDCat_Tech ),
+    FUNCDATA( Imtan,            UNIQUE,     STDPAR,     1,          FDCat_Tech ),
+    FUNCDATA( Imsec,            UNIQUE,     STDPAR,     1,          FDCat_Tech ),
+    FUNCDATA( Imcsc,            UNIQUE,     STDPAR,     1,          FDCat_Tech ),
+    FUNCDATA( Imcot,            UNIQUE,     STDPAR,     1,          FDCat_Tech ),
+    FUNCDATA( Imsinh,           UNIQUE,     STDPAR,     1,          FDCat_Tech ),
+    FUNCDATA( Imcosh,           UNIQUE,     STDPAR,     1,          FDCat_Tech ),
+    FUNCDATA( Imsech,           UNIQUE,     STDPAR,     1,          FDCat_Tech ),
+    FUNCDATA( Imcsch,           UNIQUE,     STDPAR,     1,          FDCat_Tech ),
     FUNCDATA( Complex,          UNIQUE,     STDPAR,     3,          FDCat_Tech ),
     FUNCDATA( Convert,          DOUBLE,     STDPAR,     3,          FDCat_Tech ),
     FUNCDATA( Amordegrc,        UNIQUE,     INTPAR,     7,          FDCat_Finance ),
@@ -1861,15 +1869,9 @@ void Complex::Sqrt( void )
 }
 
 
-inline sal_Bool SinOverflow( double f )
-{
-    return fabs( f ) >= 134217728;
-}
-
-
 void Complex::Sin( void ) THROWDEF_RTE_IAE
 {
-    if( SinOverflow( r ) )
+    if( !::rtl::math::isValidArcArg( r ) )
         THROW_IAE;
 
     if( i )
@@ -1887,7 +1889,7 @@ void Complex::Sin( void ) THROWDEF_RTE_IAE
 
 void Complex::Cos( void ) THROWDEF_RTE_IAE
 {
-    if( SinOverflow( r ) )
+	if( !::rtl::math::isValidArcArg( r ) )
         THROW_IAE;
 
     if( i )
@@ -1961,6 +1963,160 @@ void Complex::Log2( void ) THROWDEF_RTE_IAE
 }
 
 
+void Complex::Tan(void) THROWDEF_RTE_IAE
+{
+    if ( i )
+    {
+        if( !::rtl::math::isValidArcArg( 2.0 * r ) )
+            THROW_IAE;
+        double fScale =1.0 / ( cos( 2.0 * r ) + cosh( 2.0 * i ));
+        r = sin( 2.0 * r ) * fScale;
+        i = sinh( 2.0 * i ) * fScale;
+    }
+    else
+    {
+        if( !::rtl::math::isValidArcArg( r ) )
+            THROW_IAE;
+        r = tan( r );
+    }
+}
+
+
+void Complex::Sec( void ) THROWDEF_RTE_IAE
+{
+    if( i )
+    {
+        if( !::rtl::math::isValidArcArg( 2 * r ) )
+            THROW_IAE;
+        double fScale = 1.0 / (cosh( 2.0 * i) + cos ( 2.0 * r));
+        double  r_;
+        r_ = 2.0 * cos( r ) * cosh( i ) * fScale;
+        i = 2.0 * sin( r ) * sinh( i ) * fScale;
+        r = r_;
+    }
+    else
+    {
+        if( !::rtl::math::isValidArcArg( r ) )
+            THROW_IAE;
+        r = 1.0 / cos( r );
+    }
+}
+
+
+void Complex::Csc( void ) THROWDEF_RTE_IAE
+{
+    if( i )
+    {
+        if( !::rtl::math::isValidArcArg( 2 * r ) )
+            THROW_IAE;
+        double fScale = 1.0 / (cosh( 2.0 * i) - cos ( 2.0 * r));
+        double  r_;
+        r_ = 2.0 * sin( r ) * cosh( i ) * fScale;
+        i = -2.0 * cos( r ) * sinh( i ) * fScale;
+        r = r_;
+    }
+    else
+    {
+        if( !::rtl::math::isValidArcArg( r ) )
+            THROW_IAE;
+        r = 1.0 / sin( r );
+    }
+}
+
+
+void Complex::Cot(void) THROWDEF_RTE_IAE
+{
+    if ( i )
+    {
+        if( !::rtl::math::isValidArcArg( 2.0 * r ) )
+            THROW_IAE;
+        double fScale =1.0 / ( cosh( 2.0 * i ) - cos( 2.0 * r ) );
+        r = sin( 2.0 * r ) * fScale;
+        i = - ( sinh( 2.0 * i ) * fScale );
+    }
+    else
+    {
+        if( !::rtl::math::isValidArcArg( r ) )
+            THROW_IAE;
+        r = 1.0 / tan( r );
+    }
+}
+
+
+void Complex::Sinh( void ) THROWDEF_RTE_IAE
+{
+    if( !::rtl::math::isValidArcArg( r ) )
+        THROW_IAE;
+
+    if( i )
+    {
+        double	r_;
+        r_ = sinh( r ) * cos( i );
+		i = cosh( r ) * sin( i );
+		r = r_;
+	}
+	else
+		r = sinh( r );
+}
+
+
+void Complex::Cosh( void ) THROWDEF_RTE_IAE
+{
+    if( !::rtl::math::isValidArcArg( r ) )
+        THROW_IAE;
+
+    if( i )
+    {
+        double	r_;
+        r_ = cosh( r ) * cos( i );
+		i = sinh( r ) * sin( i );
+		r = r_;
+	}
+	else
+		r = cosh( r );
+}
+
+
+void Complex::Sech(void) THROWDEF_RTE_IAE
+{
+    if ( i )
+    {
+        if( !::rtl::math::isValidArcArg( 2.0 * r ) )
+            THROW_IAE;
+        double fScale =1.0 / ( cosh( 2.0 * r ) + cos( 2.0 * i ));
+        double r_;
+        r_ = 2.0 * cosh( 2.0 * r ) * cos( i ) * fScale;
+        i = - (2.0 * sinh( 2.0 * r ) * sin( i ) * fScale );
+        r = r_ ;
+    }
+    else
+    {
+        if( !::rtl::math::isValidArcArg( r ) )
+            THROW_IAE;
+        r = 1.0 / cosh( r );
+    }
+}
+
+
+void Complex::Csch(void) THROWDEF_RTE_IAE
+{
+    if ( i )
+    {
+        if( !::rtl::math::isValidArcArg( 2.0 * r ) )
+            THROW_IAE;
+        double fScale =1.0 / ( cosh( 2.0 * r ) - cos( 2.0 * i ));
+        double r_;
+        r_ = 2.0 * sinh( 2.0 * r ) * cos( i ) * fScale;
+        i = - ( 2.0 * cosh( 2.0 * r ) * sin( i ) * fScale );
+        r = r_ ;
+    }
+    else
+    {
+        if( !::rtl::math::isValidArcArg( r ) )
+            THROW_IAE;
+        r = 1.0 / sinh( r );
+    }
+}
 
 
 ComplexList::~ComplexList()
diff --git a/scaddins/source/analysis/analysishelper.hxx b/scaddins/source/analysis/analysishelper.hxx
index 136a6e3..2abfc0f 100644
--- a/scaddins/source/analysis/analysishelper.hxx
+++ b/scaddins/source/analysis/analysishelper.hxx
@@ -462,7 +462,7 @@ class Complex
     sal_Unicode             c;
 
 public:
-    inline                  Complex( double fReal, double fImag = 0.0, sal_Char cC = '\0' );
+    inline                  Complex( double fReal, double fImag = 0.0, sal_Unicode cC = '\0' );
                             Complex( const STRING& rComplexAsString ) THROWDEF_RTE_IAE;
 
     inline static sal_Bool  IsImagUnit( sal_Unicode c );
@@ -490,6 +490,15 @@ public:
     inline void             Mult( const Complex& rMult );
     inline void             Sub( const Complex& rMult );
     inline void             Add( const Complex& rAdd );
+    void                    Tan( void ) THROWDEF_RTE_IAE;
+    void                    Sec( void ) THROWDEF_RTE_IAE;
+    void                    Csc( void ) THROWDEF_RTE_IAE;
+    void                    Cot( void ) THROWDEF_RTE_IAE;
+    void                    Sinh( void ) THROWDEF_RTE_IAE;
+    void                    Cosh( void ) THROWDEF_RTE_IAE;
+    void                    Sech( void ) THROWDEF_RTE_IAE;
+    void                    Csch( void ) THROWDEF_RTE_IAE;
+
 };
 
 
@@ -807,7 +816,7 @@ inline const FuncData* FuncDataList::Get( sal_uInt32 n ) const
 }
 
 
-inline Complex::Complex( double fReal, double fImag, sal_Char cC ) :
+inline Complex::Complex( double fReal, double fImag, sal_Unicode cC ) :
         r( fReal ), i( fImag ), c( cC )
 {
 }
-- 
1.7.5.1


More information about the LibreOffice mailing list