From c2b36cd6f7cf70e77dac5938f18146b0687523e6 Mon Sep 17 00:00:00 2001 From: Tamas Bunth Date: Thu, 3 Oct 2019 19:49:57 +0200 Subject: [PATCH] tdf#123206 Import/Export chart custom label text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OOX import supports custom label texts in chart diagrams (produced by e.g. double clicking on a data label, and write custom text), but - since embedded objects are exported and imported to odf right after migration - it is not displayed in case of a Writer document. In order to make it work, we have to support custom label text in the odf structure. This commit only allows the import/export of pure text, it should be improved to store and load formatted string. A new XML token is added, which currently refers to an attribute of the chart:data-point tag. If we want to store formatted string, something more clever has to be done. Change-Id: I80c4a3a0dbcf59f1dc732d795fb716da318411cb Reviewed-on: https://gerrit.libreoffice.org/80156 Tested-by: Jenkins Reviewed-by: Tamás Bunth --- chart2/qa/extras/chart2export.cxx | 16 +++++ chart2/qa/extras/data/docx/tdf123206.docx | Bin 0 -> 24223 bytes include/xmloff/xmltoken.hxx | 1 + .../OpenDocument-schema-v1.3+libreoffice.rng | 9 +++ xmloff/source/chart/SchXMLExport.cxx | 63 +++++++++++++++--- xmloff/source/chart/SchXMLPlotAreaContext.cxx | 9 +++ xmloff/source/chart/SchXMLSeries2Context.cxx | 15 +++++ xmloff/source/chart/transporttypes.hxx | 1 + xmloff/source/core/xmltoken.cxx | 1 + xmloff/source/token/tokens.txt | 1 + 10 files changed, 107 insertions(+), 9 deletions(-) create mode 100755 chart2/qa/extras/data/docx/tdf123206.docx diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx index 8d42c8ac93ac..1645c1c1d1ae 100644 --- a/chart2/qa/extras/chart2export.cxx +++ b/chart2/qa/extras/chart2export.cxx @@ -149,6 +149,7 @@ public: void testTdf121744(); void testTdf122031(); void testTdf115012(); + void testTdf123206_customLabelText(); CPPUNIT_TEST_SUITE(Chart2ExportTest); CPPUNIT_TEST(testErrorBarXLSX); @@ -261,6 +262,8 @@ public: CPPUNIT_TEST(testTdf121744); CPPUNIT_TEST(testTdf122031); CPPUNIT_TEST(testTdf115012); + CPPUNIT_TEST(testTdf123206_customLabelText); + CPPUNIT_TEST_SUITE_END(); protected: @@ -2386,6 +2389,19 @@ void Chart2ExportTest::testTdf115012() assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:dispBlanksAs", "val", "zero"); } +void Chart2ExportTest::testTdf123206_customLabelText() +{ + load("/chart2/qa/extras/data/docx/", "tdf123206.docx"); + + Reference xChartDoc(getChartDocFromWriter(0), uno::UNO_QUERY); + CPPUNIT_ASSERT(xChartDoc.is()); + + xmlDocPtr pXmlDoc = parseExport("word/charts/chart","Office Open XML Text"); + CPPUNIT_ASSERT(pXmlDoc); + + assertXPathContent(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls/c:dLbl[2]/c:tx/c:rich/a:p/a:r/a:t", "kiscica"); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/chart2/qa/extras/data/docx/tdf123206.docx b/chart2/qa/extras/data/docx/tdf123206.docx new file mode 100755 index 0000000000000000000000000000000000000000..f47089fe3b1bd00d37367d360e5c5c1db1576362 GIT binary patch literal 24223 zcmeFZgMVgA7A~BQ*-6Lh*tR>i-LY-k>e#kz+qP|WjE;TZJ~Q*3nRDiT|G=G{U-sT_ z)vlFP?Zs!UdSxX*K#_sKfgpi^fbf9~QXr<|J^=x(fCB*`0YL(*3s_q@7+N`KE4tbk z+H2CdSX$uaf&!Ce0|5h`|KIWd@Cwu?j7j&=AqYK)z6$J9i?7%6LNcHG4Ixs9wNXD}87h8(srm56;UbgJXrT3U9otS*Wfiag~lyRd1Cajv)ODMCl3Nvqf{A7NN#S_BHEVK2L;=oga=+VE$A5Y~Wz_&c0& zm>Kh^)m-uW^)!+>Ak%% zBlk*i29IHv(qX)vip*_SVZku#(?53Hip)t;*W1%Rjii||JG}-KC**=oh&dOOWY*{` zscKN^qeaP>WAmed;gmEh2Jw--J4YzP3(cctIQS)Fd%d zM@RK;)@t@Ep2RgXM3|A^QDIup(GsV}=#@ibUbWAhxaD;f4TJW}injYVIPd232Fhk=A;?!D;B-5(@buPDyFZPr z>4TXl$O&P4q^q8f8%wmUczsUo$b;`-1`efy2ohdtWv%c@I=Mditb%81R#L(Di4c4_ zF$pb=bUt=h{>TkYMUtM6S7iT!9lo@WFKC>D$#zzSM>KS{XN0C|$X;3X9|%t!L^){u zf_%I=0;`2)-8cIj(t6A_)N7_kUT={Z5@8fIi5JAzHB(O>G+XSQt*(?X)=~*Zell_{ zsCZF!1c-xm*n-1z;5VRXeskojvJqC5U0yAvdxFuW`Rgt~J&qa@3_>mR4ELT= zc4~T_$_%*ys3q)#xwk^84E%3u#r-_+z1W$prO2yHk7L+%4!e&lU3&z#| z));O$+Dd&>RPhqgh^yD zYS&43gPJ=W*f9F;{C48rRjaE)Ybd!Do^kDj9VIejfb0XlA~}P=U=4N(VNyU&e3&ys zjU66=<~r(`biZcOTUH~R3CAL+g>=%9v8uI95uJ6~(#v4HFV}O;-@_7FXH-UA6LGs7 zvy15pVHN~;PthQ=?k&(_3|=jIro0h$XPW=0>%jkGD$PN|;gkZu!xT%xy9 zH#P&2c?)YfOnhDwlqx{~kaEdE;QkIGLg&_ZHOpP-nBM1x2$vT$&+y_~QS;@BKOpa_ zml<}uVF7M>?fZ zU!AE6oj~{4PJUP&)C_f+a+9f9oc9~re-oPN5=Em%Fd!f*KriaQght;)*UrJ7_Kyqw zZ^e72vSGc(g5Zr?{lSOy%u@VZZJ;iE-jldjVbTijIOm+2Ye9fq603;Vbo9aPCE9rA zVmj+!LO&1B;7Szb{Lsev>v1<~EtYL57-sxv87>Q=(x1$Lz3{Zg{mE(vPE$mb*Pa($ zNZ&au;ALokNn5M?%Q_HE5{l2ToMbV2Pfc4)E#_0F50)bEb-Ge;X^r1CqUgebInU2+ zVS3sSTrj>ZR>}3CPmj>x#NG9pQ@FL6C}2S*lRBCN6x2wOkkO;Sdj6C%cK*6qBF=1y z=yoJ3_*nwVEaPe^$aQqr&T3NeF?M)z$>25iaKp=R8rn!u+2#_w^KBYx1jfu0a+&nf zDA*ZK#Mn|Hg6R~>7PXge{k@CRrp)w%dhp&BkNU z+vvg{NP=2RQ0h=(bV!DEz1w$9B3Re<=FfwW8+9Y`(ZsaH6upi&9_h(^;aD?%uH_u~n5=$C8N)EI-lqFNKLXKQD8P^%_z-S|#xq!!io48<57#GsC|y_j5tQiHspqx+MJzPUXE!n0F>YtQr(fm$@gplLrV>OdcFU{S8w6`Iitmw7mVb!I+whIQmd;z4-x?E5Y!|?}GIa3aV2$ z>ezh|jgz4VYcLmBaWF0OO~7*{w?ja~w9R?e@)_#L=p!R2s0aet=j9Kqah`RP)-9Kl zqBXj#KTRS`-k~kwI|L)zA@;8jvrRCfz5Q!jvK7;=i@Is0Q_pHqvHW%d$#7H)Fgp zBDfWKRp1iel<4m$`h&4##!e6nEg8o3b3i)~wh8S_V7x~jH<&Jk7#_bOyKi6t@nGenEJ&orkM{hN(G9F1-(7O4p+nRk&LYYiUwCu$3TRGZn=&NrsC`EG78Eyp z(Uyy6LOnUcG1vBsUCNk{aEGkSSQw%8ZYqXolmfG8fZ03wTbr1ums;eTY#K}r5`lan z7r}Ou>T=r~{9;=@CNP^JLV8z)s|mWuLl4U>M>ql-HKg|ql$K;gtSA+W%^c3&wdAAF zy_Jjo@;-r{0U?Wk$TD%Nx-XaOQUeU%po;p4QM%Omo8yXPQ_4W=2z;`9IWI2?#ZTz$ zzS^L(;|-k}V~te7kW=3Cion`xvqYszuB6I@r5NUh&yUO|57K!X-sr1^vhRA^&(8HP zn=N-%ehhkiItCm{4ANObgm+@MuP>*Ahw^S3teF)}Zs(n5>oPONM={?;#huv1)~>Y0 z$AncHir(`aU315k7^XNF%EUNR&g%pR?U;I^&2E zXnn&8V~uAjH2Y;3Da5Qm+MSTh0$jz{@ZGqwVDaaN`Lw6QjIBM@ktex*L+8(ggRZgB zo#S$@*F@E)M-D^hwhukM6z+E-<(}*ah){$DixKV0oU_5B}?c6p4H1PDC>@1@@d{`f||I-g+b zc@O+iPna@SVsge?wwTd~;L6*BQIEK~+SRr#;;&7tT9wb6A++J^a?`TI7?7}ur8G>K zn~O5voAB6DWHCfOF^3OVQ_<3*(jG~UMm3+ip{5|J2&Bn-7a^~qcIb+I3-VAQ{1v)BAS+h{m$uXngH^Rx}hXP3CkT&Q#Nr&nF)E z4pL^StvrN!{x)F$;P8_7NcCoN``A z`RK89bf!`{;n3|^gtZh0zxv0kC{B}&r$dZU7QjRhc)>{=E7izLL^tKlWKg9OSI5hj z;TOh{k}b3r?z@gluX0nisCiRULExk!uqLzw6~6J~c)yn1X{hTM3TcdL~yNrBMR(oB=E|xDD=Q z_K=|AX$MBspnKFPGGp(--E_0f^$Qf@(Hkw2aMh?NGY~J@cP`rL>pfCT(Z_D1fP0t8 z^j8av%ev!#7x+IR_y#39!dt*gk^CQQ_upCbf34-Qe+uXD!@@>10>6YapJ*GtqL+`@ zI($P!9ud|?7b!M^BBnoxh*(4BSH#IM{{1dfc^D!xCt;&=MNrbSts?{liCve@Qhe10rBpZd z9xFdB@GG2G1XVY&W}n1OrFkzU79PX#1hY$?&8DCX+v^#xRC)|s;NLxADk+$-n^x;( z+HnxLY8zN|-w394A-#D}OQ#RZ6EGn@GE9jK5oh0dtJO1Ik7c;_vqJTi4PTA;h2a)& z0_@e_VHaQS_@o;EBeVj91QUSWxmf%YxdWI-b3JQo^Zy}te-V>%c`1p0I)o0G_aAi5 zX-+6#Rvc&v&Xi8!AxG-T*GTXgy>7R#C|WgD7A0swtb<%HCx)CJm_P4=Al>y)7Kb8& zx*=Iya)Mb;+)RK#>YZ2M_=$iaA)cL_mYu_VPPIpB;f@`q%0y;6d?X{r_>osgAb8s{ z8^mNbN$1F5WiM_4_{00Sadoe)UaFc&X$@2Olj0Yxm$;ey+GPHyBW2TyU;H zGe`6Il#e|^_mIEZUyY<(C(V2Eo?#EL%Or40nZJ1iIpF;m7Qyu=I9W98$5`y z2PWIpd|b2E)mZ`x{D9?Jcc(Zp{RP~Z^XWvCj|{Qg?%a+u-?>NgOxK~Rj@C8`F)ts- z-lOzdF+r%K-gy2jyXUtn`ecP&t|j6mVF79D?W2w7x3-0W<(rvgMm`@W_KFVcMBSrM zOk`)IIiJCdQI&yj(&yw35nx)anB9~ZgL3hKp)gVqy|bNxx~1aC)yzU=yf2^h`0S#7 zX;Ndd&MID`rtjXbv+(IE`UmGl_ink75tpi5$gHY(#V_9{6cA$ksG1f>USv~vg39gX z+b{D{MP^{BZ`V@d@7=RG4`7`@t8Ar+MI6c4O6V0xnS(7l1pc5}Zd|G7-=&d=Wy{@p zjzZCPd#<&tWwU_&4;(qt&4pqP?7GFS|EfX| zfV;|nW4gb?6XbvJgFOI(GBi+du>0*<|JEQHQGDhAFDUTR{~aRl<-{Uf&hH$1)M=$= z1D-A<5nYeHA-?+cr8Q7~_}bHL)}3L(8+*YoMSuXt`UM(UKCP9vBXH~H;q()7SkYuu z$aHTgY{Xgzx{;h=(sC~z!-ASUr_OD=43d1xYXNo#a*F$eg7DV051H-!rP5tV9z1BN z6k|vryewnjSoqKnryzgEU1={t7Pa&lR+}G9>#3w$iQETt`dSF-tIg}*yR2s5L-R@J z51^a@{{7ztpg8>ws2wm-V!(t6{}g~ff(843s?R?@{DHpx5sd{z^+5O1AqWDZF@$@o zSvQ23!j9nSvLlG{<3_kfv0>qvF4k=!zAL7)&o4$rW;i!Q7sxAaMLF?ckamO4i*T5e zMSW&4en_pKNiRkF;?PswT8bl?bVo(FR=Wulu+7mGpg9Yc!;(wXEBX^2v9H6Kn9P@YR^M~|1m>60b(*AM&2i~Zv9=0Zo>_vOa z1KGjZDOTIjk7cnUy?RE1f11Bf)TiRG*J+Zk;{*3dahyCOXE1G7z18w2t7io4~v9$`V;^xoNgBJX; zs%st0*zu{AePH4w!L^`G8^nhf1shR3t-(%$0s3b?p1sbpYY_p-m+@mBuoJ=BI`-+^ zb>tHIMB6MG38ds4;9d08OB4y&*o3jo(tdh2?w%aP`e(2O63)&C?J_$oUo=?4P2KP` z_51jBNq;DXY)jzG&a?B^pY!t|IdSzr1f0tDgK?R(q1^pUbf!(5k+u>XKvkcx%6_+N zTi3BuQSdCRn`u>;y6MQSyRQOLwAg))@S28Sd`AX~7^0gE54)JVY;66;Gh~*1HoM!l zbhJdd$_gM4G)elI0Lv3dZ4B^o#+4E90bpD6(L^qlNq)hSSX(8 z2i8$2?tI^Z$x<|V-uLpW#7j8LhILn8KQoo@NoRVah&2_9dJahiAV8vcLViS%DwEg9 z5jmj(f+J+alQ=0tvM%=Vbe|^@)C^@y`n;cR<`Y68S9?V365D;CwoGC@u(_p2H0n2G zddkZ9GI`vceq9}p^l8iBeB*F^wBKy9GhEi>86+H-d3V6Nt84UIcr)a{jdfa(3KN3g+7Ru);e=Dj^Hsrg2dGKyk(#ZM&UN9 z2Jr3DGl{S(o0##lj3St?&PX|g>Rb5Y;h+y__R-(<>@kFwvt9jj1+y`vt8Mlfoq}r& z9h@QQcUxr!$@eTM(mDH&3H0DbqQk@aDZ(qG(SOy}e+f{;s#)necfe?fX#Ei-Nz{%S ztTqf!&)n;RK@A#eN%MoO(5?F+I@p2;KJi#(=&r>_a*EDS+S`x4X+=Xuw_RcP@4 z!Xb+qw24>4QC!G(m^5rYc5Ey;<#I1p`in9J$f~udn`A8G-CKO^%SU+a8uK$Y)5gW4 z=6rh`;wh)&L41&P-y1|i+Yi(cI9S@T!|^-5W**3NjWAyOcgt;I)~D)F6(!!7)shb3LO4MF zDut+?A$%J2=Ryf?db)9?x{x@W8v}A#Q%?4bNoSOX#25AgIHs8dKaxq?HMkS*^oWR= z_H$|7E%>BsY_lI@V6?f6Y+P7jOzt~d!m5YlXy5wtsJ6u&7?^`Yx=RGa)}0QnmKJ!C z3h+bK8^Haps)(0>RiBz-{PWYq2It6eV7{HJg@rpf!9Zu32Hur0c)M5E8^DM@@G-GF z2|L7W3d-tvX z`g=t>p7N=<(&I_rk9Pp~UHG}&ZX>(!fqgFtpoJ&*6Vi5yOdkPnCwLI-6b_&?j)`q_ z@7i^4uRi=yAU=1Q)ZY4?ocT?N-JWrx-ICrK)T&@!+48ABilIfoQ)H@S1H zEbZL|)wMwSurWzbEpp1;lN*VK#IFgH%N*Nu;C~syhI7S5aiJn; z4VXVz|5qEv1B}#{0|4_75WUfmp!XCB&uc=^nKS!qE!8LQJq zB?T8~1v}fLg`zGk=m-@%%Z~MO!TF2W_IO$NMNe#KR_4QA!EHm-H#50LqYPH$JHD`F zLhG(s(oPk;5Z%x)M=1qGy&eWPeOT4a!=?PGw4ddDI6Ek$A!EDqMKw`>qB}`R$1FtQ zwoFAt{^vv^k+U8;HC1m>Xv7~o;i97`7myOF@9={1H!fVD1&I(RkBKlB($p}7sx+5Q z;#jRHcnu+i^@37NjMp{-=5Dqj`vo(~OBc}Df=kS_D-snjwRrXI(LgU8^6}Ah7uZvC zYLv!uB~hb%kG>Z|w73cHmCzq!SZ$iFX5QJP6y1oru|)-_t9TGS;M(e8xv`F%R>j-u zeQ%Aa;xy73>{e6fB{k6vs3@jHNzc zCqLnfKt$zbX}=b3JVb493dqQ%hkuT~@8#MsQ{eN|(ql^grC7b{E8FMn&cos9bE(V; zVLCn+I+vlW=<=Oo*cJF9UNShMYRCGH(Mf^OF+R}2St%$7%L5^ZoNZQyQ>*FfmA*p1 z3nMJ`nH@KnaAis`t4gF3oZ)qaHN(g3>ey{BvL{E2lssto|)~BCX#c-2PsKJ5* zW^TwAJFkp=Nl&E8*LeZLr_P=`GOG>2u-b01Fd3K{`D1mS&`5`)q3m2|Z~l8Uc5AckK@Q;MIZyyU|AUu*M`QnVM*nm}7RQcynW>`g+;^G zxrH^+xZhrT7hvok&sbVOt=N%zg}a4Y#cg-!UksCDDTVYdnYksi)rECguKp5AMn^X9 z)mw&;$|crbJ`BlI4Y$xtUcpG9bE+I-jU7VpZs5QmIR_u|rSvd^|AJG|cDKvjEduk?|KIJK?(9oQ9Y=rYKc{@(z2bosmJO%EDquf$+x5nc8rk(|UUh zt2oE0B?fr3M62M|qDRs?v21E2Od#}XBcsSc0FS}bSrF-*?b(!!5T|#o5g%1o3<*YY zcQTv#T35Z(1~`pPJpas)kFwlwcH?bGedg5)Gsz<-Lp3PgF;vkh;W_>1vymD<@tT>P zvJFp?hEm{aRukT}AMGxgaY^Vv-Tu0g>S}OM9w~Aaanrmtm-0$N#nrtr>yJ7URegMt zg)g*)OlW+PLz5TiPvE~SuABEXa zD!CVygp)KMj62eZL8w5i)h{*&zRrS=zc!a$0V4<}ewNiWwPdr3M&znI7Hi&4sZU$f zz@RvnNf|>)zd#j2&A35~w0)SGx&0l=|2@{}A^u7u0*G@=0W9_ffDZvGa%AnSZ2;v3 z)^>)!BRfC^j&5;7i6!u^nE%7Z=a(h#NHzb03ioj@)eShoC--_q_@k){s|Sw#e;NT~u( z1ftqROGC>*vZ$QpO2-Ut5USdjlst_gBd@}qV_>^0X-@9K(B<98}5qE6< z@*4HTV&aV-h5s&)PC~c~C2R0_W{<4>U%4*`FC+gA(3AEjwBVqt2QbvMe_Z~EHVtGa z#QS&=I$=8d7@XTod1Geti)9h|{Y&7hN#cxjomtK-DqP)3#gzPpo{T!XRxUc*6|&G* zz$tV(MtSiUa%vo?w%@9|S|A2SWc4-hsC0OPG+jL#qz?OX5Ls+LX^OuIn^$t)27S*F ziIu|2WfdEAnO_%Sf^!ZY;mj~z$+#axBwGunCS%Z=htDgPj5yd#*>U_NYysnOa^_zKV08FK=fsnXk?Cazpvwkr-VuD1;EeQhfm+a|r(~ zthzQf|C3b!AN})4kL9yo`;A6{JmbP{V6kt=!upo$iGIJW*8LRQXe?EzpHoW|Tpn|_ z6xBF0zv6ZhvG4BkEGV{t&7pl8Ju@I1a*&G*28v~lcAwy~yrJoZ0u~F^a81uk9O<(w ztnDG6hK*!k=L04JS}rINuPmQynZwwu!(KhxzmBoXa%pIRX}rU-n)DfXq^!0*(FPBa zc|PeFnXIs1Nd_0LBJbiP&$>b%1quux)=1gS?xukj!!RkFj45 z(_Krmt@&DW*iW)*rN}&!x_@mm=#2?fxa$iv_7H7zF^AMza^+TBTQn$s0+T-FhMWIp z&G3S6u#sB*<9Xqxi;nAk@3!ymmz$gy&6B1vBk|UI?K{lBY|STNY5-{XuU#|$nOFbU z>-yLAzwDurmH1Br|C#gq*TCOb0O|qsZ-x7R9r&MlkbfUI3J4PZ?^%(*()lYm{wJk3 zz{a4zK;?fO{8uFP&%tnj1p^HJ8?O3S3V($r|D^DH$^ZH1|Nnr>zY_c_-1jHJ7uY`t z{uTWDD}lepT7MGg0>FpA=k)(YUVk0>SJ(E>p<#ex$N!wnpN{Tdsr;u0^Ct};pc8<< z{5OB*ufzXpg8n36g7uFD_^UzsD~12m%72ar0!qUEw}0TDI$Bl&48U+eK(K%xBmmDU z4k)PfSE#Kzs7OBlaCvOvPU%Z9sqS9>tU0+Rk)Y-Ns7PW4PaN!M~ZSh5-^ zkh3Mdw4ij<4n`9-EIQg(%{4i1C&v#nN7H~O)V0_R**EGlRPdSn$}-4FTU6?%?J!kB+tSH#V&k^_}I|7Dnh?*s{gB}2k1{5xgtO`LU-QSz$7fv^G zHlL9*hwyPQq(qGJr5b{7gu@zoML2F>za~1D{Bku5y2=Ua*YiTz4JqwZ)~nn5?eSAw z7Mi~G>IRUiMx*-+0DArQvHpCMbh*X-vKnq|_?nj0>2kAn`LUmAUf=0@eRvSIwB_|Q z6g35FljSFe;T0}FT&{jK-zp(b&({ZJBe*rO%l4_*V#k;s1S6US{MLsQ^LY_lN2mKP z8)xW6aX1jl#q(a4&?9~tLj-(#f@s0#N5D2t&LI0nynaF+-I(6ZwuAEE2H18#lT&r# zL5~H+;x~pCSj6I)c7LH!K3K+K>Jvowyfnu9+A;Yak0ds2bG4Q=LIRGXq$84PhLh%w$oV3DaV* zblaF?bUi&dg5l(mLzWD42W#jQ`l2_4DTS|M?5WAo5I)fiwK61pz_TSWjH9s(_ed;X zB#>2{Az5Sbot zz4ETz_;FL)Vaao;RsQ|CoaWbnqh^a()8@tyG)-*|TBJnXPQaQCCsNik4 zn@IZ&)dIylQh^$=yag}ZmPCTuLO8ZL^Tm>7dpMb9sGfTBsDTPu<3;Nvxho~{UrI!DEV_UK`s z5)+k_ZV#lxJCZ=hpi`h`MZ_G;BCf(W!3bov%1A)a@duM;!V##cFO-m%_RVTg8nh>r z)seSNfl*1tRmbg{DQJ)54|9?$r^KshNf<*7V`)53v@D1?#dBK@fMSXYRe3hI@U`_C zW<4X6Xf{sOmdNX^*2rz2Kym~vnUjU37+7T08&2k(T=2=@nlw_^CWAGzz)#DRaS#SN zl>c7BBK^PBt^=6`S+eac#k!Xvx~HZf5VY zXcW!fzX}gLvLr=4rR)P$9T zYt?vKk)dX~)jwmxW`AhoGS@b}9$*iCPumuo&P6Pr(;a@izIt1@#JH1AI^HfO2)TN+ z+zI74J7-J9zZvF39hiC-^wv||RKsu2SgtEnq_NYcBG604qTARQBU(S(bw(^nCN9WS z*r&t0)g|z-97m@ekicawc9$|#e8p7gxjH6T6J3kHZ#yoqHoss-C>b#8lTn>E&gVty z>!EKac^-F~wlOU9E1QtE4fgqMT%6<`c}UBn2K7N)xw_$)@|1P=`lkrqp{pds1<0=i z|K6Xv@3w@K(W=~Y)vZFNNg%Apga%m@wb*l~I_R>9wGNW{BUIcZB$iBIx{tuzxq{v*rG z3p5=&GWXnQn}pZBde}imCO7 zBtpV?i_UK@WJY&OY^j0Dch$Pz2%8gY_JJ@bO?zX2PS!p?@1+#)_4Sa-{uFxA%4Zw=o zLb{P7Ipj$77*x8g?Ox3Lwo1I1Sl~uJsCaUr>DxTGdM%EO_K*=l$aBen4a%z7CA}`w zqn6(J)RzCXD1TwPzUo+Q^DApy$xX>Pg|l<)Na46m6YNNaQzFZbdUx&5O_rXk5}vI& zHg71~fW2nq@D5|6i-qygb@Q}S<`6}&a+8dnhLe(01&Q*odP)d2b!#EcwvjEJC=#^S zyQ!!Jx}N`9P_RUaOLaFw2|j}B*ux~eUU>UYgs&^-En(QZNB8~Yc(xq7=byaip>o9j&= zM66rtSds@+8Z~6&JWGqmNH~0KwaIUvdwqUyhT$5i=4D9FS0r<}+|EDCTryO$$LE&j=8smr1)h8LjfUI$NN$Wc@A;+@fRaHj+5)`=u7AJZ4wM@KmgO}5-U%G7(_r}dck-(9 z=PwI9$yJ0hLsdq_i;T%dT|>0Eaue*o99}!p@_)U!Tk-&w;qMEzXSxG0>Oeq8|Gop# z-q69}Uqv+a$`aN9&D%*^{n0b+iZT*;z+slr8?q-A>e5!cF}6t-QyY8*7F)ZA`m*IL z8WJ-H8rUWzQ+Sy6WW+}MyzwG33C@`dm!O9VH#KX*D@aa{vZi|LS{Gh4)2%{8rzan+ z>VQY$=Kb_yeRXR^!t@=2>7C`tmUECb6 zfiD3wTKtVDk10d&Yec$G1gfjZ7kf1`Qv<^cF`BZ_#QYa1)MwA=x__)9k5;R^+EH{K#>Hz!U;~v5bd}3=@BrT#KqN)GEp&)8+Tegt{A%3 zpiAU>@UVx+fGSz8W`vTa547|5{XHv#X>#W22uv}FKX>Qz!_{FamRBfd*9stvq&cki z-tjF6KE6LgkdSWg$t~_0MlexO&zJ{_7tb~zD@&l>R=-NDnkOT|37t{Bj^7qJa(e6F zBm7v-nwS^YLyz{{G;wo_&G3EThUM!#5$)}qMvjXZTUo_HSLMGle-0c6d!I&^@SWLu zB_(*&0*d~A_4=i>ot>Lp)9PNZ&MQ@i~J0zLgEH#!=p$E*8#!r5uHe44}CDjk{5G|&mj@5|Oc9Ge_ z+fkh7H}gftS?Xl@xcTn;SiPrmCFW!@n-IY%b$(Ew!cYr?lwwj1fR z9Dj>5M$I4WhIi?o2*Y}}xft)M-=(N7gviM2_ny1Mykb6Pz$c4+b-!2NRLp;JKdsR{ z#06>drSbCV^&(h6VE}bTPdxbQ6eVwd<4B)XbaR|W)hSvh#5HME`$!>CbUiTPL9dm$ zHU2a1scQo{sLLej0|3JQUBFjd9)7g|dbj{pWr+XMghqhxg;D$sA^Zkt*JG#5_UI4> zFJS<==ZC>sq@s!vg=H4s-r64pFF>ILYq`(*OycY9o+7nz-vapUSNc}*@~wpdd4$X# zL(X|4d~ULni%ePc;`u06MHcFFJXL9FoZ@&kZF{S#s&jdu&&|*8=eot1#vlmo);SEh zg_@9_35IwarflOHwAA2OKjGkAZY_zz1*W_2n>93+YX$AAgqEYQWS77I&e1>LFZZc z^)i)Jbl?R&9eDMibTIt^x4N9XSbay>gn{!YG4kr->z1teCskd!FClS}Ps3kA>?eDy zjq*Uyq}wS7eP3fip3Y&Lve@LSi8W(TV$g&IkE-E5kG^;1`P znV@JmP@_EPPZFFb9<&SE-G3`h%05nh{i*1+#8NcuqX2dU{P<42+P|;m+e5w8YStqd zf6#_^i7+eZoUPCaQUPB)97u4o#Wg1(_v#m1@*T_8C%Y$h*f1r0`B5~dlo{hb^AYl= zp?!H*el$ipTBN~v_aoPa3xB)ylhrNX@&eacGQLR0Knf{m#&y!^A{-9YLsL2e>mxh& zhW^I{~==@_#Ag{|n#$vpGCg>i2hm1pXss?1<ve=mborgOhaJ7#Vr}Do&G!0J!>Pn?1Ix_P92oH{2a^=c zU!#y63UB6gG?P{69jUkF2VKKAf~E@25G(me(izl)2NjaWev`k#F9`-Tx=KT9_-222^yl{w2i9E*M-wBFj%Tx;asNJo@wX$R?Z+_9$jWx#-&}k+d9%@ z#4-i1*~0heT2hC^+_AZnT-+(_zv;+n8AWV=jxo2MgE9S8gho(jkNR24i z{9`l2AJNI5DT($B&F_1yC_$HP${+sUD_3Di0;1^pIL1}GVFMR*KN|yQm=7o;qO6F& z(MP{Oi`T}nS&UsLI=A@suS6MixDi{fNPE4!F(>xWW*YGmqxsML=;P~-lNBOJ(T2^$ zvHr~c*^kOttUq7;aX@FFuIDoA<2h+dYqHLR*cH`;H#TEvXFwGf2;4#q zvt04oKoukNRSC4!F!4OYQvOWC=X`zDUwS05a7GTmyfu&t2_>rUd|8r8gkiHgc>*um zR82k#*xQgmgBU~j(vI1Ki2>m-x8(ebaY2s3|MaV~LV5nS=Wj@Ois=XV?%todsP#)jr^E#G?KkBqXJa5++V~6 z_2`(0jXoA2yy;!(**Mg?>@CfzZ!!%=Jl-~Q*_u5|m-h9#@Y@=v~b(dR~sI)W?kUO=g3>8hxL%E7kb(E>f2K029q|xlfZnr z&VtG0GUQtA{P-Dh{Zb7-0zSr-RF>vgClkCXvicoFO7h$ z1zNMCdT}M{Yez>$n|I{Z-bEJTYx9dS5YNT?r>&?qZ;yw)3*5=K<`)rbKvNIq6m^nX zPe!9^?1R&aWC@oXJG|ZdYStj)M6DPg9F%n9B4!r@mSnG0LbA118$LUI`_`X2@6A0W z#er6=N{4hqu+ZYV6?(Iemc$|PSq0e?2cPc1HHJg2zeuLYV^AS8AiY+9j!%jNok)m_ z_$W<+g;f8Vh`_3oImSSC*})`(hc;Xcl&>gKHM#U%Ng>?A=RM+u*pRL`^M zSTAvbhqXHSy~KCmb_$lN&|6P-F1$2^0#i;xi76Mn%tY{9`Cg{f>5rS4;MI!UJL@Kq z7zxh)rSD(!F5I1$ zsfnX-&%yRJl@ZH0s@<=rIppOl(sJbzO8-(!@T{L|>WH*ZXCp$h)Xy zyFl764rOLV3(*o@b-4jA*+4utG+5Lvg&dKO;fLBL&y!iH3g*l-j=a`pU#vaBZot5p z-3;G0^*5T%qw60!%m%I>dL?u({ECHcM7|4+aCLgm);RaLC!J+J2F6EG1WhkdP9^4f z$2M8oY4lw|)$I}=q7(%U^ip_cqik~r#Z)F@3ioo+uj8TObrl`V8vsBTQcsSn? zuT~^!{f-NhF=I=o7NQ-Hq+)MeO5_tOgQK;Hvl#v0W@GQ8OH*8%`G^ms)QY6b2}Q&1M~@I~A@ z^36DIkDX&nRh@PflofStF@_~ZO7p6`0_|LdxEWT!z5%FoZi4aR(dy84NMB>WQ0HvF z(BVD-YsRP=_ce)*k<)0p{=o7g6KJnfQ_vZc{ew!e#k$MBr{qOI)7fn&-hj(wAKSUh zrh##^d9CKgW>44w$9X+?5+oXH#+1k|C@+YJwcuuXAJCk?4tZ+=W(>M+0=8$HhZ6pP zQGqvLTz^snZ9~XG3$YGaFNY6oIgdjL#tLkxh;U)3D9VS0LNF~H2ta0{rghP{?979;qwlxou6(@}&EVW14Y07m?u z)ga4hxh&}A5(FtdwL;;}=@k>2%wR&(`lWtJiynL2!}YipsKw5$RRrubm_;D>C}KMC z?a@PWZml0J79XmRU+mP?AE?L*cN;_th$|`DQY{I0{i3z?Vbe8Yx8LmluzTJ)>u)@= z{_n`EKeXKM{m-S|S2qiMo2A(>zoeI?T1!1QcAp&Qq&<_j&5P@2S$%Huwu{^4IF}uq zyv_0YucF%Eu6cb91-A`?x#cVm-FAB&Ws&n}o8c}oj_4h^DeG7dvE@nkXE!cyl$>+l zZGKtK@{iB{1vzBA?lV0!bM}R6x(mZzKa`MKygDP#Dg5i5mUTwEI5lkNO6=K?ClZxt ze#$>9!+6b=e{QA18-kphre9%rtZ(X4>CGEh7j(E$P}@``Vd*#dId@s~S27-p&+7Oz zO={7fC2hfyVObsrym&byR#y9+@ax%sMc}Efsmo7KUh(pXm5PjDeQl_k*dmRhV44&U zdS^9!oG!I!&(gLPW-H(7o$9-y(VG2mhiincfVtvzro!f8-3!Xmt6ZzoyiJ?Zx3O%E z%I-To?bV{4oUvDng?F8Lp|;>lNz#Wyy8<&>?`qhuEW8;s8S0J4n^c!y*^#p{G%IG? z6)jV}=pygl)6-@xIhN|}8}yt1TprMyxTGI%TB-)~5>(BTX;Ra5O+67t;58p?K;g|v z!7$6Srrw&U%Nt)-*Kl&f+xN3y@;_g#YJUG8|~gq#gM=pSl+C)_!9{z{$tE#Ci&r@Kgf2>P248hQD} z)TtV^e`a}Co*i=9h7VMp}LPpMxIC-!~Q z+b_6pSJT@!laBH7p3Ti){^Itf+q>5OKW&G7?0<6EHBSj(SI`026$EV!1-GutQ{HsD|yq?g!Q_cW&o&>uxHE7Fby!=vdoeGB>w*rq78bd9N>9uL~8_f2%t= z#qL>pTDL9RSGJk9N8S3{riKZ~uC2Xe^6P1(<&JAz-M!h;8cvJ(4^$cM-!r4Mlzp|j zhHKp>A=RSZbr)|31?BSW)?M&aQMKdKjUcz^C1<3Y&Gx^$bU;uo`p+r$c)qll(BRsX zPnuj?*OnJ}=d}xX-_JK<5!C#2P5s}sUBO%WK3Sy}9nh&XsHx1T{gdbx{$JsXo^Wt< zo6s|hK!4BQD_;3a)HR;0Jn%!_Al0IOh79Ln_LjY2FJArjU6K>-sM5J4MeFL}Dn0F` zAvV9tBZBswykeO0xiZ&z!Ml$S{kT4-zyFL_hmE?l4fRB6^qwUVYvWLlu|+oE3~-zZ z&)PWD^F5I@z5y;m0>>#tH}Y|f;BBwyOQFyYc|@3H2%Pi)n}lozx_0#A?hxA3fQ!+< z+F=t*pfm8m^GfJupdX}!Fe3msCW~wa#7}6)DnX3HeX0<`xJkg}ZD8X_IAaJk#?hB~ zAY(X?pU4x literal 0 HcmV?d00001 diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx index 751cd423556d..4418f9ba54a0 100644 --- a/include/xmloff/xmltoken.hxx +++ b/include/xmloff/xmltoken.hxx @@ -536,6 +536,7 @@ namespace xmloff { namespace token { XML_CUSTOM_ICONSET, XML_CUSTOM_ICONSET_INDEX, XML_CUSTOM_ICONSET_NAME, + XML_CUSTOM_LABEL_FIELD, XML_CUT, XML_CUT_OFFS, XML_CX, diff --git a/schema/libreoffice/OpenDocument-schema-v1.3+libreoffice.rng b/schema/libreoffice/OpenDocument-schema-v1.3+libreoffice.rng index 5da3958ef15e..766added79c3 100644 --- a/schema/libreoffice/OpenDocument-schema-v1.3+libreoffice.rng +++ b/schema/libreoffice/OpenDocument-schema-v1.3+libreoffice.rng @@ -2400,4 +2400,13 @@ xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1. + + + + + + + + + diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx index 337a322fc469..4dd2bc43b6c8 100644 --- a/xmloff/source/chart/SchXMLExport.cxx +++ b/xmloff/source/chart/SchXMLExport.cxx @@ -81,6 +81,7 @@ #include #include #include +#include #include #include #include @@ -109,6 +110,19 @@ using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Any; using ::std::vector; + +namespace +{ + struct SchXMLDataPointStruct + { + OUString maStyleName; + sal_Int32 mnRepeat; + OUString msCustomLabelText; + + SchXMLDataPointStruct() : mnRepeat( 1 ) {} + }; +} + // class SchXMLExportHelper_Impl class SchXMLExportHelper_Impl @@ -263,6 +277,33 @@ public: namespace { +OUString lcl_getCustomLabelField(sal_Int32 nDataPointIndex, + const uno::Reference< chart2::XDataSeries >& rSeries) +{ + if( !rSeries.is() ) + return OUString{}; + + const SvtSaveOptions::ODFDefaultVersion nCurrentODFVersion( SvtSaveOptions().GetODFDefaultVersion() ); + if( nCurrentODFVersion <= SvtSaveOptions::ODFVER_012 )//do not export to ODF 1.2 or older + return OUString{}; + + // export custom label text + if(Reference xLabels = rSeries->getDataPointByIndex(nDataPointIndex); xLabels.is()) + { + if(Any aAny = xLabels->getPropertyValue("CustomLabelFields"); aAny.hasValue()) + { + Sequence> aCustomLabels; + aAny >>= aCustomLabels; + OUString sLabel; + // TODO export formatted string instead of simple characters + for(auto& aLabel : aCustomLabels) + sLabel += aLabel->getString(); + return sLabel; + } + } + return OUString{}; +} + class lcl_MatchesRole { public: @@ -919,14 +960,6 @@ bool lcl_exportDomainForThisSequence( const Reference< chart2::data::XDataSequen return bDomainExported; } -struct SchXMLDataPointStruct -{ - OUString maStyleName; - sal_Int32 mnRepeat; - - SchXMLDataPointStruct() : mnRepeat( 1 ) {} -}; - } // anonymous namespace // class SchXMLExportHelper @@ -3232,6 +3265,8 @@ void SchXMLExportHelper_Impl::exportDataPoints( SchXMLDataPointStruct aPoint; aPoint.maStyleName = maAutoStyleNameQueue.front(); + if(bExportNumFmt) + aPoint.msCustomLabelText = lcl_getCustomLabelField(nElement, xSeries); maAutoStyleNameQueue.pop(); aDataPointVector.push_back( aPoint ); } @@ -3259,6 +3294,7 @@ void SchXMLExportHelper_Impl::exportDataPoints( { SchXMLDataPointStruct aPoint; aPoint.mnRepeat = nCurrIndex - nLastIndex - 1; + aPoint.msCustomLabelText = lcl_getCustomLabelField(nCurrIndex, xSeries); aDataPointVector.push_back( aPoint ); } @@ -3291,6 +3327,7 @@ void SchXMLExportHelper_Impl::exportDataPoints( SAL_WARN_IF( maAutoStyleNameQueue.empty(), "xmloff.chart", "Autostyle queue empty!" ); SchXMLDataPointStruct aPoint; aPoint.maStyleName = maAutoStyleNameQueue.front(); + aPoint.msCustomLabelText = lcl_getCustomLabelField(nCurrIndex, xSeries); maAutoStyleNameQueue.pop(); aDataPointVector.push_back( aPoint ); @@ -3306,6 +3343,7 @@ void SchXMLExportHelper_Impl::exportDataPoints( // if we get here the property states are empty SchXMLDataPointStruct aPoint; + aPoint.msCustomLabelText = lcl_getCustomLabelField(nCurrIndex, xSeries); aDataPointVector.push_back( aPoint ); nLastIndex = nCurrIndex; @@ -3335,10 +3373,13 @@ void SchXMLExportHelper_Impl::exportDataPoints( { aPoint = rPoint; - if( aPoint.maStyleName == aLastPoint.maStyleName ) + if( aPoint.maStyleName == aLastPoint.maStyleName && aPoint.msCustomLabelText.isEmpty() ) aPoint.mnRepeat += aLastPoint.mnRepeat; else if( aLastPoint.mnRepeat > 0 ) { + // export custom label text + if(!aLastPoint.msCustomLabelText.isEmpty()) + mrExport.AddAttribute( XML_NAMESPACE_LO_EXT, XML_CUSTOM_LABEL_FIELD, aLastPoint.msCustomLabelText); // write last element if( !aLastPoint.maStyleName.isEmpty() ) mrExport.AddAttribute( XML_NAMESPACE_CHART, XML_STYLE_NAME, aLastPoint.maStyleName ); @@ -3354,6 +3395,10 @@ void SchXMLExportHelper_Impl::exportDataPoints( // write last element if it hasn't been written in last iteration if( aPoint.maStyleName == aLastPoint.maStyleName ) { + // export custom label text + if(!aLastPoint.msCustomLabelText.isEmpty()) + mrExport.AddAttribute( XML_NAMESPACE_LO_EXT, XML_CUSTOM_LABEL_FIELD, aLastPoint.msCustomLabelText); + if( !aLastPoint.maStyleName.isEmpty() ) mrExport.AddAttribute( XML_NAMESPACE_CHART, XML_STYLE_NAME, aLastPoint.maStyleName ); diff --git a/xmloff/source/chart/SchXMLPlotAreaContext.cxx b/xmloff/source/chart/SchXMLPlotAreaContext.cxx index 27def14f6ece..33bb1e043893 100644 --- a/xmloff/source/chart/SchXMLPlotAreaContext.cxx +++ b/xmloff/source/chart/SchXMLPlotAreaContext.cxx @@ -609,6 +609,7 @@ void SchXMLDataPointContext::StartElement( const uno::Reference< xml::sax::XAttr sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0; OUString sAutoStyleName; sal_Int32 nRepeat = 1; + OUString sCustomLabelField; for( sal_Int16 i = 0; i < nAttrCount; i++ ) { @@ -623,6 +624,13 @@ void SchXMLDataPointContext::StartElement( const uno::Reference< xml::sax::XAttr else if( IsXMLToken( aLocalName, XML_REPEATED ) ) nRepeat = xAttrList->getValueByIndex( i ).toInt32(); } + else if( nPrefix == XML_NAMESPACE_LO_EXT) + { + if( IsXMLToken( aLocalName, XML_CUSTOM_LABEL_FIELD)) + { + sCustomLabelField = xAttrList->getValueByIndex( i ); + } + } } if( !sAutoStyleName.isEmpty()) @@ -631,6 +639,7 @@ void SchXMLDataPointContext::StartElement( const uno::Reference< xml::sax::XAttr DataRowPointStyle::DATA_POINT, m_xSeries, mrIndex, nRepeat, sAutoStyleName ); aStyle.mbSymbolSizeForSeriesIsMissingInFile = mbSymbolSizeForSeriesIsMissingInFile; + aStyle.msCustomLabelField = sCustomLabelField; mrStyleVector.push_back( aStyle ); } mrIndex += nRepeat; diff --git a/xmloff/source/chart/SchXMLSeries2Context.cxx b/xmloff/source/chart/SchXMLSeries2Context.cxx index 32f84b0feae1..66c473dfe47b 100644 --- a/xmloff/source/chart/SchXMLSeries2Context.cxx +++ b/xmloff/source/chart/SchXMLSeries2Context.cxx @@ -30,6 +30,10 @@ #include #include +#include +#include +#include + #include #include #include @@ -1085,6 +1089,17 @@ void SchXMLSeries2Context::setStylesToDataPoints( SeriesDefaultsAndStyles& rSeri if( seriesStyle.mbSymbolSizeForSeriesIsMissingInFile ) lcl_resetSymbolSizeForPointsIfNecessary( xPointProp, rImport, pPropStyleContext, pStylesCtxt ); } + + if(!seriesStyle.msCustomLabelField.isEmpty()) + { + Sequence< Reference> xLabels(1); + Reference< uno::XComponentContext > xContext( comphelper::getProcessComponentContext() ); + Reference< chart2::XDataPointCustomLabelField > xCustomLabel = chart2::DataPointCustomLabelField::create(xContext); + xLabels[0] = xCustomLabel; + xCustomLabel->setString(seriesStyle.msCustomLabelField); + xCustomLabel->setFieldType(chart2::DataPointCustomLabelFieldType::DataPointCustomLabelFieldType_TEXT); + xPointProp->setPropertyValue("CustomLabelFields", uno::Any(xLabels)); + } } catch( const uno::Exception & ) { diff --git a/xmloff/source/chart/transporttypes.hxx b/xmloff/source/chart/transporttypes.hxx index 44d3bc3a7b22..6481cfb1c004 100644 --- a/xmloff/source/chart/transporttypes.hxx +++ b/xmloff/source/chart/transporttypes.hxx @@ -168,6 +168,7 @@ struct DataRowPointStyle sal_Int32 m_nPointRepeat; OUString msStyleName; OUString msSeriesStyleNameForDonuts; + OUString msCustomLabelField; sal_Int32 mnAttachedAxis; bool mbSymbolSizeForSeriesIsMissingInFile; diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx index 9da33e32e6e1..19c7692be7cd 100644 --- a/xmloff/source/core/xmltoken.cxx +++ b/xmloff/source/core/xmltoken.cxx @@ -537,6 +537,7 @@ namespace xmloff { namespace token { TOKEN( "custom-iconset", XML_CUSTOM_ICONSET ), TOKEN( "custom-iconset-index", XML_CUSTOM_ICONSET_INDEX ), TOKEN( "custom-iconset-name", XML_CUSTOM_ICONSET_NAME ), + TOKEN( "custom-label-field", XML_CUSTOM_LABEL_FIELD ), TOKEN( "cut", XML_CUT ), TOKEN( "cut-offs", XML_CUT_OFFS ), TOKEN( "cx", XML_CX ), diff --git a/xmloff/source/token/tokens.txt b/xmloff/source/token/tokens.txt index 859cbbc08768..beb4adb8360e 100644 --- a/xmloff/source/token/tokens.txt +++ b/xmloff/source/token/tokens.txt @@ -460,6 +460,7 @@ custom5 custom-iconset custom-iconset-index custom-iconset-name +custom-label-field cut cut-offs cx