[Libreoffice-commits] core.git: formula/source include/formula sc/inc sc/qa sc/source
Winfried Donkers
winfrieddonkers at libreoffice.org
Mon Jan 26 14:16:43 PST 2015
formula/source/core/resource/core_resource.src | 7 ++++
include/formula/compiler.hrc | 3 +
include/formula/opcode.hxx | 1
sc/inc/helpids.h | 1
sc/qa/unit/ucalc.cxx | 1
sc/source/core/inc/interpre.hxx | 1
sc/source/core/tool/interpr4.cxx | 1
sc/source/core/tool/interpr7.cxx | 38 +++++++++++++++++++++++++
sc/source/filter/excel/xlformula.cxx | 2 -
sc/source/filter/oox/formulabase.cxx | 2 -
sc/source/ui/src/scfuncs.src | 23 +++++++++++++++
11 files changed, 77 insertions(+), 3 deletions(-)
New commits:
commit 25434372bf56e0ebdb7e7d47ab3c14c68211509f
Author: Winfried Donkers <winfrieddonkers at libreoffice.org>
Date: Mon Dec 15 09:45:26 2014 +0100
fdo#76870 Add support for Excel2013 function ENCODEURL
Change-Id: I369bcd58055364757b6a098fc3aa0c0065c79b67
Reviewed-on: https://gerrit.libreoffice.org/13478
Reviewed-by: Eike Rathke <erack at redhat.com>
Tested-by: Eike Rathke <erack at redhat.com>
diff --git a/formula/source/core/resource/core_resource.src b/formula/source/core/resource/core_resource.src
index 1e9c312..2f3f2bc 100644
--- a/formula/source/core/resource/core_resource.src
+++ b/formula/source/core/resource/core_resource.src
@@ -427,6 +427,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF
String SC_OPCODE_COLOR { Text = "ORG.LIBREOFFICE.COLOR"; };
String SC_OPCODE_ERF_MS { Text = "COM.MICROSOFT.ERF.PRECISE" ; };
String SC_OPCODE_ERFC_MS { Text = "COM.MICROSOFT.ERFC.PRECISE" ; };
+ String SC_OPCODE_ENCODEURL { Text = "COM.MICROSOFT.ENCODEURL"; };
};
/** These function names are used only in the XLSX import. */
@@ -835,6 +836,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML
String SC_OPCODE_COLOR { Text = "_xlfn.ORG.LIBREOFFICE.COLOR"; };
String SC_OPCODE_ERF_MS { Text = "_xlfn.ERF.PRECISE" ; };
String SC_OPCODE_ERFC_MS { Text = "_xlfn.ERFC.PRECISE" ; };
+ String SC_OPCODE_ENCODEURL { Text = "_xlfn.ENCODEURL"; };
};
// DO NOT CHANGE NAMES! Only add functions.
@@ -1245,6 +1247,7 @@ Resource RID_STRLIST_FUNCTION_NAMES_ENGLISH
String SC_OPCODE_COLOR { Text = "COLOR"; };
String SC_OPCODE_ERF_MS { Text = "ERF.PRECISE" ; };
String SC_OPCODE_ERFC_MS { Text = "ERFC.PRECISE" ; };
+ String SC_OPCODE_ENCODEURL { Text = "ENCODEURL"; };
};
Resource RID_STRLIST_FUNCTION_NAMES
@@ -2793,6 +2796,10 @@ Resource RID_STRLIST_FUNCTION_NAMES
{
Text [en-US ] = "ERFC.PRECISE" ;
};
+ String SC_OPCODE_ENCODEURL
+ {
+ Text [ en-US ] = "ENCODEURL";
+ };
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/formula/compiler.hrc b/include/formula/compiler.hrc
index 2d2dd36..dbbea90 100644
--- a/include/formula/compiler.hrc
+++ b/include/formula/compiler.hrc
@@ -195,7 +195,8 @@
#define SC_OPCODE_ERF_MS 163
#define SC_OPCODE_ERFC_MS 164
#define SC_OPCODE_ERROR_TYPE_ODF 165
-#define SC_OPCODE_STOP_1_PAR 166
+#define SC_OPCODE_ENCODEURL 166
+#define SC_OPCODE_STOP_1_PAR 167
/*** Functions with more than one parameters ***/
#define SC_OPCODE_START_2_PAR 201
diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx
index a282dae..3a2af3a 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -465,6 +465,7 @@ enum OpCode : sal_uInt16
ocColor = SC_OPCODE_COLOR,
ocErf_MS = SC_OPCODE_ERF_MS,
ocErfc_MS = SC_OPCODE_ERFC_MS,
+ ocEncodeURL = SC_OPCODE_ENCODEURL,
// internal stuff
ocInternalBegin = SC_OPCODE_INTERNAL_BEGIN,
ocTTT = SC_OPCODE_TTT,
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index 9768806..574afb0 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -563,6 +563,7 @@
#define HID_FUNC_BITRSHIFT "SC_HID_FUNC_BITRSHIFT"
#define HID_FUNC_FILTERXML "SC_HID_FUNC_FILTERXML"
#define HID_FUNC_WEBSERVICE "SC_HID_FUNC_WEBSERVICE"
+#define HID_FUNC_ENCODEURL "SC_HID_FUNC_ENCODEURL"
#define HID_FUNC_COLOR "SC_HID_FUNC_COLOR"
#define HID_FUNC_COVARIANCE_P "SC_HID_FUNC_COVARIANCE_P"
#define HID_FUNC_COVARIANCE_S "SC_HID_FUNC_COVARIANCE_S"
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index eb4454f..b839816 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2669,6 +2669,7 @@ void Test::testFunctionLists()
"CONCATENATE",
"DECIMAL",
"DOLLAR",
+ "ENCODEURL",
"EXACT",
"FILTERXML",
"FIND",
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 7f8d134..50864c3 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -852,6 +852,7 @@ void ScMidB();
void ScFilterXML();
void ScWebservice();
+void ScEncodeURL();
void ScColor();
void ScErf();
void ScErfc();
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 28f8e03..81ec490 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4044,6 +4044,7 @@ StackVar ScInterpreter::Interpret()
case ocRate : ScRate(); break;
case ocFilterXML : ScFilterXML(); break;
case ocWebservice : ScWebservice(); break;
+ case ocEncodeURL : ScEncodeURL(); break;
case ocColor : ScColor(); break;
case ocErf_MS : ScErf(); break;
case ocErfc_MS : ScErfc(); break;
diff --git a/sc/source/core/tool/interpr7.cxx b/sc/source/core/tool/interpr7.cxx
index c5e9b74..a4a8f60 100644
--- a/sc/source/core/tool/interpr7.cxx
+++ b/sc/source/core/tool/interpr7.cxx
@@ -203,6 +203,44 @@ void ScInterpreter::ScWebservice()
}
}
+/**
+ Returns a string in which all non-alphanumeric characters except stroke and
+ underscore (-_) have been replaced with a percent (%) sign
+ followed by hex digits.
+ It is encoded the same way that the posted data from a WWW form is encoded,
+ that is the same way as in application/x-www-form-urlencoded media type and
+ as pwer RFC 3986.
+
+ @see fdo#76870
+*/
+void ScInterpreter::ScEncodeURL()
+{
+ sal_uInt8 nParamCount = GetByte();
+ if ( MustHaveParamCount( nParamCount, 1 ) )
+ {
+ OUString aStr = GetString().getString();
+ if ( aStr.isEmpty() )
+ {
+ PushError( errNoValue );
+ return;
+ }
+
+ OStringBuffer aUrlBuf;
+ for ( int i = 0; i < aStr.getLength(); i++ )
+ {
+ sal_Unicode c = aStr[ i ];
+ if ( rtl::isAsciiAlphanumeric( c ) || c == '-' || c == '_' )
+ aUrlBuf.append( static_cast<sal_Char>( c ) );
+ else
+ {
+ aUrlBuf.append( '%' );
+ aUrlBuf.append( OString::number( static_cast<sal_Int32>( c ), 16 ).toAsciiUpperCase() );
+ }
+ }
+ PushString( OUString::fromUtf8( aUrlBuf.makeStringAndClear() ) );
+ }
+}
+
void ScInterpreter::ScDebugVar()
{
// This is to be used by developers only! Never document this for end
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index 6908344..ec31fad 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -534,7 +534,7 @@ static const XclFunctionInfo saFuncTable_2013[] =
EXC_FUNCENTRY_V_VR_IMPORT( ocCosecantHyp, 1, 1, 0, "CSCH" ),
EXC_FUNCENTRY_V_VR( ocGetDiffDate, 2, 2, 0, "DAYS" ),
EXC_FUNCENTRY_V_VR( ocDecimal, 2, 2, 0, "DECIMAL" ),
- EXC_FUNCENTRY_V_VR( ocNoName, 1, 1, 0, "ENCODEURL" ),
+ EXC_FUNCENTRY_V_VR( ocEncodeURL, 1, 1, 0, "ENCODEURL" ),
// NOTE: this FDIST is not our LEGACY.FDIST
EXC_FUNCENTRY_V_VR( ocNoName, 3, 4, 0, "FDIST" ),
// NOTE: this FINV is not our LEGACY.FINV
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index 2936189..690231b 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -857,7 +857,7 @@ static const FunctionData saFuncTable2013[] =
{ "CSCH", "CSCH", NOID, NOID, 1, 1, V, { VR }, FUNCFLAG_MACROCALL_NEW },
{ "DAYS", "DAYS", NOID, NOID, 2, 2, V, { VR }, FUNCFLAG_MACROCALL_NEW },
{ "DECIMAL", "DECIMAL", NOID, NOID, 2, 2, V, { VR }, FUNCFLAG_MACROCALL_NEW },
- { 0, "ENCODEURL", NOID, NOID, 1, 1, V, { VR }, FUNCFLAG_MACROCALL_NEW },
+ { "COM.MICROSOFT.ENCODEURL","ENCODEURL", NOID, NOID, 1, 1, V, { VR }, FUNCFLAG_MACROCALL_NEW },
{ "COM.MICROSOFT.FILTERXML","FILTERXML", NOID, NOID, 2, 2, V, { VR }, FUNCFLAG_MACROCALL_NEW },
/* FIXME: FLOOR.MATH is our/ODFF FLOOR, but we have special handling for
* the weird Excel FLOOR behavior, check that and unify or diversify. */
diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src
index 2e5e960..fcff272 100644
--- a/sc/source/ui/src/scfuncs.src
+++ b/sc/source/ui/src/scfuncs.src
@@ -12091,6 +12091,29 @@ Resource RID_SC_FUNCTION_DESCRIPTIONS2
Text [ en-US ] = "URI of the webservice";
};
};
+ Resource SC_OPCODE_ENCODEURL
+ {
+ String 1 // Description
+ {
+ Text [ en-US] = "Return a URL-encoded string.";
+ };
+ ExtraData =
+ {
+ 0;
+ ID_FUNCTION_GRP_TEXT;
+ U2S( HID_FUNC_ENCODEURL );
+ 1; 0;
+ 0;
+ };
+ String 2 // Name of Parameter 1
+ {
+ Text [ en-US ] = "Text";
+ };
+ String 3 // Description of Parameter 1
+ {
+ Text [ en-US ] = "A string to be URL encoded";
+ };
+ };
Resource SC_OPCODE_ERF_MS
{
String 1 // Description
More information about the Libreoffice-commits
mailing list