sc/qa/unit/data/functions/text/fods/find.fods | 148 +++++++++++++++++++++++++- sc/source/core/tool/interpr1.cxx | 11 + 2 files changed, 156 insertions(+), 3 deletions(-)
New commits: commit 5e2a3eed69060d63070d72df60cd84247ca0bc9e Author: Winfried Donkers <winfrieddonk...@libreoffice.org> Date: Thu Nov 23 18:44:34 2017 +0100 tdf#97198 Make Calc function FIND work with UniCode non-BMP characters. Change-Id: I512199a5d29aa955b278f0666c7ce904e67d9767 Reviewed-on: https://gerrit.libreoffice.org/45171 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Eike Rathke <er...@redhat.com> diff --git a/sc/qa/unit/data/functions/text/fods/find.fods b/sc/qa/unit/data/functions/text/fods/find.fods index f5a1f2a2c06b..4f966cbe53a4 100644 --- a/sc/qa/unit/data/functions/text/fods/find.fods +++ b/sc/qa/unit/data/functions/text/fods/find.fods @@ -1254,7 +1254,151 @@ </table:table-cell> <table:table-cell table:number-columns-repeated="11"/> </table:table-row> - <table:table-row table:style-name="ro2" table:number-rows-repeated="61"> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce32" table:formula="of:=FIND([.I16];[.J16])" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#VALUE!</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce24" table:formula="of:#VALUE!" office:value-type="string" office:string-value="" calcext:value-type="error"> + <text:p>#VALUE!</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce35" table:formula="of:=ISERROR([.A16])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce11" table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="=FIND(I16;J16)" calcext:value-type="string"> + <text:p>=FIND(I16;J16)</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Excel 2016 has same result</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce32" office:value-type="string" calcext:value-type="string"> + <text:p>Bð</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce32" office:value-type="string" calcext:value-type="string"> + <text:p>abðdeðghð¬ðððððð!</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce32" table:formula="of:=FIND([.I17];[.J16])" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce32" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce36" table:formula="of:=[.A17]=[.B17]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce11" table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="=FIND(I17;J16)" calcext:value-type="string"> + <text:p>=FIND(I17;J16)</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Excel 2016 has same result</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce32" office:value-type="string" calcext:value-type="string"> + <text:p>ðd</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce32"/> + <table:table-cell table:number-columns-repeated="5"/> + </table:table-row> + <table:table-row table:style-name="ro6"> + <table:table-cell table:style-name="ce32" table:formula="of:=FIND([.I18];[.J18])" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce32" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce37" table:formula="of:=[.A18]=[.B18]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce11" table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="=FIND(I18;J18)" calcext:value-type="string"> + <text:p>=FIND(I18;J18)</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Excel 2016 returns 4</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce32" office:value-type="string" calcext:value-type="string"> + <text:p>ð§¬</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce44" office:value-type="string" calcext:value-type="string"><text:p>"<text:span text:style-name="T1">ð§ð§¬</text:span>"</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce32" table:formula="of:=FIND([.I19];[.J16])" office:value-type="float" office:value="8" calcext:value-type="float"> + <text:p>8</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce32" office:value-type="float" office:value="8" calcext:value-type="float"> + <text:p>8</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce38" table:formula="of:=[.A19]=[.B19]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce11" table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="=FIND(I19;J16)" calcext:value-type="string"> + <text:p>=FIND(I19;J16)</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Excel 2016 returns 10</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce32" office:value-type="string" calcext:value-type="string"> + <text:p>h</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="6"/> + </table:table-row> + <table:table-row table:style-name="ro3"> + <table:table-cell table:style-name="ce32" table:formula="of:=FIND([.I20];[.J20])" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce32" office:value-type="float" office:value="4" calcext:value-type="float"> + <text:p>4</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce39" table:formula="of:=[.A20]=[.B20]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce11" table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="=FIND(I20;J20)" calcext:value-type="string"> + <text:p>=FIND(I20;J20)</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Excel 2016 has same result</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce32" office:value-type="string" calcext:value-type="string"> + <text:p>e</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce45" office:value-type="string" calcext:value-type="string"> + <text:p>"uÌeÌ"</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + </table:table-row> + <table:table-row table:style-name="ro2"> + <table:table-cell table:style-name="ce32" table:formula="of:=FIND([.I21];[.J21])" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce32" office:value-type="float" office:value="3" calcext:value-type="float"> + <text:p>3</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce40" table:formula="of:=[.A21]=[.B21]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean"> + <text:p>TRUE</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce11" table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="=FIND(I21;J21)" calcext:value-type="string"> + <text:p>=FIND(I21;J21)</text:p> + </table:table-cell> + <table:table-cell office:value-type="string" calcext:value-type="string"> + <text:p>Excel 2016 returns 5</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="3"/> + <table:table-cell table:style-name="ce32" office:value-type="string" calcext:value-type="string"> + <text:p>ðð</text:p> + </table:table-cell> + <table:table-cell table:style-name="ce46" office:value-type="string" calcext:value-type="string"> + <text:p>ð¬ðððððð!</text:p> + </table:table-cell> + <table:table-cell table:number-columns-repeated="5"/> + </table:table-row> + <table:table-row table:style-name="ro2" table:number-rows-repeated="55"> <table:table-cell table:style-name="ce23"/> <table:table-cell table:style-name="ce24"/> <table:table-cell table:style-name="ce27"/> @@ -1288,4 +1432,4 @@ </table:named-expressions> </office:spreadsheet> </office:body> -</office:document> \ No newline at end of file +</office:document> diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index 2f2955b52927..f83040c79e39 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -8526,7 +8526,16 @@ void ScInterpreter::ScFind() if (nPos == -1) PushNoValue(); else - PushDouble((double)(nPos + 1)); + { + sal_Int32 nIdx = 0; + nCnt = 0; + while ( nIdx <= nPos ) + { + sStr.iterateCodePoints( &nIdx ); + ++nCnt; + } + PushDouble( ( double )nCnt ); + } } } }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits