From 3dea05ab282d5a8c56f1f8f23210641d3b5d029c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BCdiger=20Timm?= Date: Tue, 6 Jan 2009 12:16:56 +0000 Subject: [PATCH] =?UTF-8?q?CWS-TOOLING:=20integrate=20CWS=20ooxml02=202008?= =?UTF-8?q?-12-18=2006:12:51=20+0100=20jpryor=20=20r265657=20:=20Remove=20?= =?UTF-8?q?valgrind=20warning=20about=20"Conditional=20jump=20or=20move=20?= =?UTF-8?q?depends=20on=20uninitialised=20value(s)"=20within=20XclFontData?= =?UTF-8?q?::SetApiEscapement(short),=20as=20nApiEscapement=20isn't=20set?= =?UTF-8?q?=20by=20maHlpChCommon>>nApiEscapement.=20=20Instead,=20provide?= =?UTF-8?q?=20a=20default=20value.=202008-12-16=2021:50:23=20+0100=20jpryo?= =?UTF-8?q?r=20=20r265575=20:=20Remove=20warnings=20from=20Mac=20OSX=20gcc?= =?UTF-8?q?-4.0.1.=202008-12-11=2020:13:08=20+0100=20jpryor=20=20r265356?= =?UTF-8?q?=20:=20Remove=20warning=20so=20that=20ooxml02=20can=20build=20o?= =?UTF-8?q?n=20Ubuntu=20build=20bots.=202008-12-11=2017:18:47=20+0100=20jp?= =?UTF-8?q?ryor=20=20r265336=20:=20CWS-TOOLING:=20rebase=20CWS=20ooxml02?= =?UTF-8?q?=20to=20trunk@264807=20(milestone:=20DEV300:m37)=202008-12-10?= =?UTF-8?q?=2017:03:09=20+0100=20kohei=20=20r265208=20:=20take=20out=20the?= =?UTF-8?q?=20xls=20english=20opcode=20bits=20from=20sc.=20=20We'll=20deci?= =?UTF-8?q?de=20what=20to=20do=20later.=202008-12-10=2016:34:30=20+0100=20?= =?UTF-8?q?kohei=20=20r265202=20:=20removed=20the=20xls=20english=20formul?= =?UTF-8?q?a=20language=20entry.=202008-12-10=2007:03:56=20+0100=20jpryor?= =?UTF-8?q?=20=20r265144=20:=20Generate=20the=20PROT4REV,=20PROT4REVPASS,?= =?UTF-8?q?=20BACKUP,=20and=20HIDEOBJ=20records.=202008-12-10=2005:16:23?= =?UTF-8?q?=20+0100=20jpryor=20=20r265143=20:=20Undo=20BIFF=20record=20reo?= =?UTF-8?q?rdering.=20This=20was=20originally=20done=20to=20increase=20cod?= =?UTF-8?q?e=20sharing=20between=20the=20BIFF=20&=20OOXML=20export=20code,?= =?UTF-8?q?=20and=20was=20tested=20as=20being=20compatible=20between=20sev?= =?UTF-8?q?eral=20.xls-supporting=20apps,=20but=20it=20is=20now=20felt=20t?= =?UTF-8?q?hat=20the=20change=20in=20ordering=20will=20complicate=20testin?= =?UTF-8?q?g=20more=20than=20is=20desirable.=202008-12-08=2019:37:27=20+01?= =?UTF-8?q?00=20kohei=20=20r265036=20:=201)=20reverted=20the=20localized?= =?UTF-8?q?=20separator=20bits,=20to=20keep=20the=20core=20functionality?= =?UTF-8?q?=20intact.=202)=20introduced=20English=20XL=20A1=20and=20R1C1?= =?UTF-8?q?=20grammars,=20which=20can=20be=20used=20for=20OOXML=20export?= =?UTF-8?q?=20filter=20(and=20later=20for=20VBA=20formula=20parsing).=203)?= =?UTF-8?q?=20use=20the=20English=20XL=20A1=20grammar=20for=20OOXML=20expo?= =?UTF-8?q?rt.=202008-12-08=2019:33:13=20+0100=20kohei=20=20r265030=20:=20?= =?UTF-8?q?added=20XL=5FENGLISH=20formula=20language,=20which=20is=20used?= =?UTF-8?q?=20in=20OOXML=20export=20(and=20probably=20useful=20in=20the=20?= =?UTF-8?q?import=20as=20well).=20=20This=20will=20also=20be=20used=20in?= =?UTF-8?q?=20VBA=20formulas=20as=20well.=202008-12-03=2004:23:54=20+0100?= =?UTF-8?q?=20jpryor=20=20r264737=20:=20Revert=20-Werror=20changes;=20thes?= =?UTF-8?q?e=20will=20be=20handled=20in=20a=20separate=20CWS.=202008-12-03?= =?UTF-8?q?=2004:21:10=20+0100=20jpryor=20=20r264736=20:=20Revert=20-Werro?= =?UTF-8?q?r=20fixes;=20these=20are=20being=20handled=20in=20a=20separate?= =?UTF-8?q?=20CWS.=202008-12-02=2015:48:04=20+0100=20kendy=20=20r264709=20?= =?UTF-8?q?:=20Fix=20even=20the=20visibility=20warnings.=202008-12-02=2009?= =?UTF-8?q?:57:16=20+0100=20kendy=20=20r264661=20:=20Deliver=20also=20scfi?= =?UTF-8?q?ltmi.dll.=202008-12-02=2005:19:37=20+0100=20jpryor=20=20r264654?= =?UTF-8?q?=20:=20-Werror=20fixes...=202008-12-02=2005:14:53=20+0100=20jpr?= =?UTF-8?q?yor=20=20r264653=20:=20-Werror=20fixes...=202008-12-02=2005:10:?= =?UTF-8?q?36=20+0100=20jpryor=20=20r264652=20:=20-Werror=20fixes...=20200?= =?UTF-8?q?8-12-02=2004:07:52=20+0100=20jpryor=20=20r264651=20:=20-Werror?= =?UTF-8?q?=20fixes...=202008-12-02=2004:00:54=20+0100=20jpryor=20=20r2646?= =?UTF-8?q?50=20:=20Further=20-Werror=20god=20appeasement...=202008-12-01?= =?UTF-8?q?=2020:23:04=20+0100=20kendy=20=20r264637=20:=20Deliver=20ioox.l?= =?UTF-8?q?ib.=202008-12-01=2020:13:38=20+0100=20kendy=20=20r264635=20:=20?= =?UTF-8?q?More=20visibility=20fixes=20in=20sc.=202008-12-01=2020:12:09=20?= =?UTF-8?q?+0100=20kendy=20=20r264634=20:=20Fix=20build=20in=20sax,=20than?= =?UTF-8?q?ks=20to=20Tor=20:-)=202008-12-01=2020:03:36=20+0100=20kendy=20?= =?UTF-8?q?=20r264631=20:=20Define=20OOXLIB=20even=20on=20Windows.=202008-?= =?UTF-8?q?12-01=2015:07:45=20+0100=20kendy=20=20r264609=20:=20More=20visi?= =?UTF-8?q?bilility=20fixes=20-=20sc=20links=20now=20even=20on=20Win32.=20?= =?UTF-8?q?2008-12-01=2012:28:18=20+0100=20kendy=20=20r264594=20:=20Fix=20?= =?UTF-8?q?visibility=20markup=20so=20that=20it=20[nearly=20;-)]=20builds?= =?UTF-8?q?=20on=20Windows.=20It=20should=20also=20save=20some=20good=20am?= =?UTF-8?q?ount=20of=20symbols...=202008-12-01=2012:18:21=20+0100=20kendy?= =?UTF-8?q?=20=20r264593=20:=20Add=20TYPEINFO=5FVISIBILITY()=20-=20it=20is?= =?UTF-8?q?=20the=20same=20as=20TYPEINFO(),=20but=20you=20can=20specify=20?= =?UTF-8?q?what=20visibility=20markup=20should=20it=20use.=202008-11-27=20?= =?UTF-8?q?16:34:23=20+0100=20mmeeks=20=20r264504=20:=20revert=20ppt=20bit?= =?UTF-8?q?s=20that=20slipped=20in=20by=20accident.=202008-11-27=2016:32:3?= =?UTF-8?q?8=20+0100=20kendy=20=20r264503=20:=20Fix=20visibility=20markup?= =?UTF-8?q?=20in=20oox=20(SAL=5FDLLPUBLIC=5FEXPORT=20->=20OOX=5FDLLPUBLIC)?= =?UTF-8?q?.=202008-11-27=2016:10:16=20+0100=20mmeeks=20=20r264502=20:=20r?= =?UTF-8?q?evert=20un-necessary=20filter=20changes=20...=202008-11-27=2015?= =?UTF-8?q?:52:28=20+0100=20mmeeks=20=20r264498=20:=20revert=20un-intended?= =?UTF-8?q?=20evoab2=20fixes=20...=202008-11-27=2015:17:59=20+0100=20mmeek?= =?UTF-8?q?s=20=20r264494=20:=20revert=20apparently=20unrelated=20evoab2?= =?UTF-8?q?=20fixups=20that=20crept=20in=20here.=202008-11-27=2011:18:26?= =?UTF-8?q?=20+0100=20mmeeks=20=20r264468=20:=20Rename=20ComplRefData=20->?= =?UTF-8?q?=20ScComplexRefData=20for=20dr=20#96652#=202008-11-26=2023:05:5?= =?UTF-8?q?7=20+0100=20kendy=20=20r264437=20:=20#i96634#=20Fix=20build=20w?= =?UTF-8?q?ith=20--disable-mozilla.=202008-11-26=2022:43:25=20+0100=20kend?= =?UTF-8?q?y=20=20r264435=20:=20#i96316#=20Fix=20filter=20signature=20to?= =?UTF-8?q?=20fix=20Win32=20build.=202008-11-25=2017:05:35=20+0100=20mmeek?= =?UTF-8?q?s=20=20r264316=20:=20distribute=20new=20scfilt=20library=202008?= =?UTF-8?q?-11-25=2017:04:56=20+0100=20mmeeks=20=20r264315=20:=20Add=20vis?= =?UTF-8?q?ibility=20markup=20to=20allow=20all=20filters=20to=20be=20built?= =?UTF-8?q?=20as=20a=20separate=20module,=20and=20tweak=20the=20build=20to?= =?UTF-8?q?=20build=20that=20way.=20Fix=20some=20existing=20instances=20of?= =?UTF-8?q?=20daft=20symbol=20naming=20around=20the=20place.=20Move=20head?= =?UTF-8?q?ers=20that=20are=20now=20internal=20into=20source/filter/inc=20?= =?UTF-8?q?Saves=20~1.4Mb=20on=20a=20normal=20calc,=20on=20Linux=202008-11?= =?UTF-8?q?-21=2022:51:08=20+0100=20jpryor=20=20r264178=20:=20Disable=20OO?= =?UTF-8?q?XML=20.xlsx=20export.=202008-11-21=2022:49:26=20+0100=20jpryor?= =?UTF-8?q?=20=20r264177=20:=20More=20-Werror=20fixes...=202008-11-21=2022?= =?UTF-8?q?:05:42=20+0100=20jpryor=20=20r264175=20:=20Appease=20the=20grea?= =?UTF-8?q?t=20-Werror=20god.=20And=20cry.=20Warnings=20fixed:=20=20=20-?= =?UTF-8?q?=20Duplicate=20definition=20of=20CREATE=5FOUSTRING.=20=20This?= =?UTF-8?q?=20is=20caused=20because=20of=20the=20=20=20=20=20use=20of=20oo?= =?UTF-8?q?x=20within=20sc/source/filter/excel,=20and=20oox=20has=20it's?= =?UTF-8?q?=20own=20version=20of=20=20=20=20=20CREATE=5FOUSTRING.=20=20Fix?= =?UTF-8?q?=20things=20by=20ensuring=20that=20the=20oox=20version=20is=20a?= =?UTF-8?q?lways=20=20=20=20=20included=20first,=20thus=20allowing=20the?= =?UTF-8?q?=20ftools.hxx=20version=20to=20#undef=20it=20and=20=20=20=20=20?= =?UTF-8?q?provide=20it's=20own=20version.=20=20=20-=20Addition=20of=20bra?= =?UTF-8?q?ces=20for=20`if`=20blocks,=20parenthesis=20to=20disambiguate=20?= =?UTF-8?q?&=20|=20&&=20||.=20=20=20-=20One=20s/=3D=3D/&&/=20in=20dpoutput?= =?UTF-8?q?.cxx=20(as=20it's=20the=20only=20thing=20that=20makes=20sense).?= =?UTF-8?q?=20=20=20-=20Changing=20parameter=20names=20so=20that=20they=20?= =?UTF-8?q?don't=20hide=20member=20variables=20with=20the=20=20=20=20=20sa?= =?UTF-8?q?me=20name.=202008-11-21=2013:33:25=20+0100=20jpryor=20=20r26413?= =?UTF-8?q?1=20:=20Fix=20the=20Win32=20build=20by=20moving=20the=20Unknown?= =?UTF-8?q?Attribute=20declaration=20into=20fastattribs.hxx=20(lest=20MSVC?= =?UTF-8?q?=20complain=20about=20vector).=202008-11-20?= =?UTF-8?q?=2019:05:27=20+0100=20jpryor=20=20r264095=20:=20fastsax=20was?= =?UTF-8?q?=20originally=20a=20UNO=20component,=20and=20then=20turned=20in?= =?UTF-8?q?to=20a=20hybrid=20UNO/C++=20library.=20=20Undo=20this=20hybridi?= =?UTF-8?q?zation,=20reverting=20it=20to=20a=20normal=20UNO=20component,?= =?UTF-8?q?=20and=20place=20the=20C++=20classes=20into=20saxinstead.=20Upd?= =?UTF-8?q?ate=20project=20references=20to=20use=20$(SAXLIB)=20instead=20o?= =?UTF-8?q?f=20$(FASTSAXLIB).=20=20=20=20=20*=20oox/util/makefile.mk,=20sc?= =?UTF-8?q?/util/makefile.mk:=20Remove=20$(FASTSAXLIB)=20and=20=20=20=20?= =?UTF-8?q?=20=20=20use=20$(SAXLIB)=20instead.=20=20=20=20=20*=20sax/prj/b?= =?UTF-8?q?uild.lst:=20Don't=20build=20sax\util,=20as=20sax\source\tools?= =?UTF-8?q?=20now=20=20=20=20=20=20=20builds=20the=20sax=20library.=20=20?= =?UTF-8?q?=20=20=20*=20sax/source/fastparser/exports.map:=20Remove;=20no?= =?UTF-8?q?=20longer=20needed.=20=20=20=20=20*=20sax/source/fastparser/fac?= =?UTF-8?q?reg.cxx:=20Change=20path=20for=20=20=20=20=20=20=20fastserializ?= =?UTF-8?q?er.hxx.=20=20=20=20=20*=20sax/source/fastparser/fastattribs.cxx?= =?UTF-8?q?,=20=20=20=20=20=20=20sax/source/fastparser/fastserializer.cxx,?= =?UTF-8?q?=20=20=20=20=20=20=20sax/source/fastparser/fastserializer.hxx,?= =?UTF-8?q?=20=20=20=20=20=20=20sax/source/fastparser/fshelper.cxx:=20Move?= =?UTF-8?q?d=20to=20sax/source/tools.=20=20=20=20=20*=20sax/source/fastpar?= =?UTF-8?q?ser/makefile.mk:=20Use=20appropriate=20UNO=20naming=20=20=20=20?= =?UTF-8?q?=20=20=20convention;=20link=20against=20$(SAXLIB)=20(which=20no?= =?UTF-8?q?w=20contains=20=20=20=20=20=20=20FastSaxSerializer,=20etc.);=20?= =?UTF-8?q?don't=20compile=20fastserializer.obj/etc.=20(now=20=20=20=20=20?= =?UTF-8?q?=20=20built=20by=20tools);=20use=20component.map=20instead=20of?= =?UTF-8?q?=20export.map=20(removed).=20=20=20=20=20*=20sax/source/tools/m?= =?UTF-8?q?akefile.mk:=20Build=20sax=20library=20instead=20of=20building?= =?UTF-8?q?=20=20=20=20=20=20=20a=20saxtools.lib=20file.=20=20The=20sax=20?= =?UTF-8?q?library=20now=20contains=20=20=20=20=20=20=20FastAttributeList,?= =?UTF-8?q?=20FastSaxSerializer,=20and=20FastSerializerHelper.=20=20=20=20?= =?UTF-8?q?=20*=20scp2/source/ooo/file=5Flibrary=5Fooo.scp:=20Install=20fa?= =?UTF-8?q?stsax.uno,=20not=20=20=20=20=20=20=20libfastsax.=202008-11-20?= =?UTF-8?q?=2019:04:06=20+0100=20jpryor=20=20r264094=20:=20=20=20=20=20*?= =?UTF-8?q?=20oox/source/core/xmlfilterbase.cxx:=20Remove=20warning.=20200?= =?UTF-8?q?8-11-19=2022:26:16=20+0100=20kendy=20=20r264025=20:=20#i96333#?= =?UTF-8?q?=20A=20better=20fix=20for=20the=20evoab2=20installation=20probl?= =?UTF-8?q?em=20Actually,=20it=20should=20be=20built=20as=20evoab2,=20not?= =?UTF-8?q?=20evoab;=20it=20should=20be=20possible=20to=20have=20both=20at?= =?UTF-8?q?=20the=20same=20time...=202008-11-19=2021:52:12=20+0100=20jpryo?= =?UTF-8?q?r=20=20r264024=20:=20Shouldn't=20export=20symbols=20by-glob=20a?= =?UTF-8?q?nymore,=20as=20we're=20using=20SAX=5FDLLPUBLIC=20now.=202008-11?= =?UTF-8?q?-19=2021:50:30=20+0100=20jpryor=20=20r264023=20:=20Fix=20Win32?= =?UTF-8?q?=20linker=20error=20as=20FastAttributeList=20and=20FastSerializ?= =?UTF-8?q?erHelper=20need=20to=20be=20accessible=20from=20other=20shared?= =?UTF-8?q?=20libraries.=20(Hopefully=20this'll=20work...)=20=09*=20sax/in?= =?UTF-8?q?c/sax/fastattribs.hxx,=20sax/inc/sax/fshelper.hxx:=20Add=20=09?= =?UTF-8?q?=20=20SAX=5FDLLPUBLIC=20to=20class=20declarations=20so=20that?= =?UTF-8?q?=20they'll=20be=20visible=20from=20=09=20=20other=20shared=20li?= =?UTF-8?q?braries.=202008-11-19=2006:47:51=20+0100=20jpryor=20=20r263961?= =?UTF-8?q?=20:=20Cope=20with=20oox::core::FilterBase=20changes.=20=09*=20?= =?UTF-8?q?xestream.cxx:=20FilterBase=20now=20requires=20that=20an=20XMode?= =?UTF-8?q?l=20be=20provided=20so=20=09=20=20that=20FilterBase::filter()?= =?UTF-8?q?=20will=20actually=20=5Fdo=5F=20anything=20useful,=20so=20=09?= =?UTF-8?q?=20=20call=20FilterBase::setSourceDocument()=20so=20that=20it?= =?UTF-8?q?=20has=20one.=202008-11-19=2006:37:34=20+0100=20jpryor=20=20r26?= =?UTF-8?q?3960=20:=20make=20sure=20evoab=20lib=20is=20not=20installed=20t?= =?UTF-8?q?wice=20(because=20it=20breaks=20install=20process=20as=202nd=20?= =?UTF-8?q?installation=20try=20fails).=20Thanks=20to=20Radek=20Doulik=20=20for=20the=20patch.=202008-11-19=2001:53:27?= =?UTF-8?q?=20+0100=20jpryor=20=20r263959=20:=20Fix=20build=20break=20unde?= =?UTF-8?q?r=20Linux.=20=09*=20connectivity/source/drivers/evoab2/NResultS?= =?UTF-8?q?etMetaData.cxx:=20Use=20a=20=09=20=20proper=20type=20declaratio?= =?UTF-8?q?n=20(`:.connectivity::SharedResource'=3F=20=20wtf=3F!),=20=09?= =?UTF-8?q?=20=20and=20use=20a=20type=20that=20actually=20exists.=20=09=20?= =?UTF-8?q?=20/me=20suspects=20that=20this=20was=20a=20bad=20case=20of=20r?= =?UTF-8?q?egex=20search=20&=20replace=20=09=20=20without=20actually=20mak?= =?UTF-8?q?ing=20sure=20things=20compiled...=20=09*=20connectivity/source/?= =?UTF-8?q?drivers/evoab2/NStatement.cxx:=20=09=20=20-=20#include=20=20so=20that=20the=20symbol=20=09=20=20=20?= =?UTF-8?q?=20STR=5FQUERY=5FTOO=5FCOMPLEX=20can=20be=20found.=20=09=20=20-?= =?UTF-8?q?=20Use=20a=20variable=20that=20actually=20has=20the=20throwGene?= =?UTF-8?q?ricSQLException()=20=09=20=20=20=20method...=202008-11-18=2021:?= =?UTF-8?q?37:46=20+0100=20kendy=20=20r263956=20:=20#i96320#=20xlsx=20expo?= =?UTF-8?q?rt=20From:=20Jonathan=20Pryor=20=20getTableS?= =?UTF-8?q?tyles()=20needs=20to=20be=20a=20member=20of=20XclExpXmlStream..?= =?UTF-8?q?.=202008-11-18=2021:37:12=20+0100=20kendy=20=20r263955=20:=20#i?= =?UTF-8?q?96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Fix=20runtime=20crash=20due=20to=20sending=20a=20non?= =?UTF-8?q?-POD=20type=20through=20a=20...=20function.=20=09*=20sc/source/?= =?UTF-8?q?filter/excel/xestyle.cxx:=20Stupid=20fix:=20=09=20=20s/.getStr(?= =?UTF-8?q?)=20FSEND/.getStr(),=20FSEND/g=20(commas=20are=20important!).?= =?UTF-8?q?=202008-11-18=2021:36:47=20+0100=20kendy=20=20r263954=20:=20#i9?= =?UTF-8?q?6320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Fix=20sc=20build=20problems...=20=09*=20excel/excdoc.?= =?UTF-8?q?cxx,=20excel/excrecds.cxx:=20Remove=20ScTableProtection,=20=09?= =?UTF-8?q?=20=20XclExpProtection=20references=20(these=20don't=20exist=20?= =?UTF-8?q?here);=20remove=20=09=20=20compiler=20warnings=20&=20errors=20(?= =?UTF-8?q?AddSdrPage=20prototype=20changed=3F!).=20=09*=20excel/expop2.cx?= =?UTF-8?q?x:=20XclEscher=20constructor=20changed;=20deal.=20=09*=20excel/?= =?UTF-8?q?xestream.cxx,=20inc/xestream.hxx:=20XmlFilterBase=20added=20som?= =?UTF-8?q?e=20=09=20=20additional=20abstract=20members;=20implement=20the?= =?UTF-8?q?m=20so=20we're=20a=20concrete=20=09=20=20type.=202008-11-18=202?= =?UTF-8?q?1:36:25=20+0100=20kendy=20=20r263953=20:=20#i96320#=20xlsx=20ex?= =?UTF-8?q?port=20From:=20Fridrich=20Strba=20=20disambi?= =?UTF-8?q?guate=202008-11-18=2021:36:00=20+0100=20kendy=20=20r263952=20:?= =?UTF-8?q?=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Flush,=20Flush,=20Flush...=202008-11-18=2021:35?= =?UTF-8?q?:38=20+0100=20kendy=20=20r263951=20:=20#i96320#=20xlsx=20export?= =?UTF-8?q?=20From:=20Jonathan=20Pryor=20=20Implement?= =?UTF-8?q?=20/styleSheet/numFmts/numFmt=20support.=20=09*=20sc/source/fil?= =?UTF-8?q?ter/inc/xestyle.hxx,=20sc/source/filter/excel/xestyle.cxx:=20?= =?UTF-8?q?=09=20=20Generate=20/styleSheet/numFmts/numFmt.=202008-11-18=20?= =?UTF-8?q?21:35:08=20+0100=20kendy=20=20r263950=20:=20#i96320#=20xlsx=20e?= =?UTF-8?q?xport=20From:=20Jonathan=20Pryor=20=20Implem?= =?UTF-8?q?ent=20/styleSheet/colors/indexedColors/rgbColor.=20Also=20gener?= =?UTF-8?q?ates=20/worksheet//col/@style.=20=09*=20sc/source/filter/excel/?= =?UTF-8?q?ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/filter/inc/x?= =?UTF-8?q?estyle.hxx,=20sc/source/filter/excel/xestyle.cxx:=20=09=20=20Ge?= =?UTF-8?q?nerate=20/styleSheet/colors/indexedColors/rgbColor.=20=09*=20sc?= =?UTF-8?q?/source/filter/excel/xetable.cxx:=20Generate=20/worksheet//col/?= =?UTF-8?q?@style.=202008-11-18=2021:34:46=20+0100=20kendy=20=20r263949=20?= =?UTF-8?q?:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Correct=20/worksheet//row/@s=20and=20/workshee?= =?UTF-8?q?t//row/@ht=20logic.=20We=20need=20an=20actual=20/styleSheet/cel?= =?UTF-8?q?lXfs=20index=20for=20//row/@s,=20which=20mnIndex=20most=20certa?= =?UTF-8?q?inly=20was=20not,=20and=20XclExpRow::mnHeight=20is=20a=20value?= =?UTF-8?q?=20in=20twips,=20while=20OOXML=20//row/@ht=20is=20a=20value=20i?= =?UTF-8?q?n=20points,=20resulting=20in=20=5Fhuge=5F=20row=20heights=20whe?= =?UTF-8?q?n=20opening=20the=20document=20in=20Excel.=20=20Oops.=20=09*=20?= =?UTF-8?q?sc/source/filter/excel/xetable.cxx:=20Fix=20//row/@s,=20//row/@?= =?UTF-8?q?ht.=202008-11-18=2021:34:15=20+0100=20kendy=20=20r263948=20:=20?= =?UTF-8?q?#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/styleSheet/cellXfs/xf/@xfId.=20Now=20?= =?UTF-8?q?that=20I=20understand=20what=20this=20field=20is=20supposed=20t?= =?UTF-8?q?o=20contain...=20=09*=20sc/source/filter/inc/xestyle.hxx,=20sc/?= =?UTF-8?q?source/filter/excel/xestyle.cxx:=20=09=20=20Generate=20/styleSh?= =?UTF-8?q?eet/cellXfs/xf/@xfId.=202008-11-18=2021:33:52=20+0100=20kendy?= =?UTF-8?q?=20=20r263947=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan?= =?UTF-8?q?=20Pryor=20=20Document=20current=20state=20o?= =?UTF-8?q?f=20style=20support.=202008-11-18=2021:33:22=20+0100=20kendy=20?= =?UTF-8?q?=20r263946=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20?= =?UTF-8?q?Pryor=20=20Style=20Index=20Support,=20Take?= =?UTF-8?q?=203!=20The=20problem=20is=20XclExpCellTable=20and=20XclExpRkCe?= =?UTF-8?q?ll:=20when=20XclExpCellTable=20creates=20XclExpRkCell=20instanc?= =?UTF-8?q?es,=20it=20sets=20their=20style=20to=20EXC=5FXFID=5FNOTFOUND,?= =?UTF-8?q?=20which=20seems=20to=20persist=20for=20quite=20some=20time,=20?= =?UTF-8?q?and=20is=20later=20"corrected"=20to=20the=20correct=20style=20i?= =?UTF-8?q?ndex=20in=20XclExpXFBuffer::GetXFIndex().=20This=20leads=20to?= =?UTF-8?q?=20all=20sorts=20of=20problems=20for=20me,=20though,=20as=20Xcl?= =?UTF-8?q?ExpXFBuffer::maCellIndexes=20and=20maStyleIndexes=20were=20a=20?= =?UTF-8?q?nXFId::index=20map,=20and=20it=20wasn't=20easy=20to=20get=20a?= =?UTF-8?q?=20"valid"=20nXFId=20value.=20Hence,=20Take=203:=20maCellIndexe?= =?UTF-8?q?s=20and=20maStyleIndexes=20aren't=20nXFId::index=20maps,=20but?= =?UTF-8?q?=20nXFIndex::index=20maps.=20(nXFId=20is=20the=20"original"=20X?= =?UTF-8?q?F=20index=20into=20XclExpXFBuffer::maXFList,=20while=20nXFIndex?= =?UTF-8?q?=20is=20the=20index=20into=20XclExpXFBuffer::maSortedXFList,=20?= =?UTF-8?q?which=20is=20the=20order=20that=20BIFF=20Excel=20export=20uses.?= =?UTF-8?q?)=20Since=20the=20nXFId::nXFIndex=20map=20logic=20must=20work?= =?UTF-8?q?=20(it's=20required=20for=20BIFF=20support),=20we=20can=20rely?= =?UTF-8?q?=20on=20this=20logic=20via=20a=20nXFIndex::xml-index=20map,=20a?= =?UTF-8?q?llowing=20us=20to=20export=20correct=20style=20indexes.=20Now?= =?UTF-8?q?=20things=20Just=20Work=20(at=20least=20until=20I=20find=20anot?= =?UTF-8?q?her=20set=20of=20bugs...).=20=09*=20sc/source/filter/excel/xest?= =?UTF-8?q?yle.cxx:=20Rewrite=20(and=20simplify)=20=09=20=20maCellIndexes?= =?UTF-8?q?=20and=20maStyleIndexes=20initialization,=20so=20that=20=09=20?= =?UTF-8?q?=20XclExpRkCell=20can=20get=20proper=20style=20indexes.=20=09*?= =?UTF-8?q?=20sc/source/filter/inc/xetable.hxx,=20sc/source/filter/excel/x?= =?UTF-8?q?etable.cxx:=20=09=20=20Rewrite=20XclExpBlankCell=20and=20XclExp?= =?UTF-8?q?RkCell=20XML=20generation=20to=20more=20=09=20=20closely=20mimi?= =?UTF-8?q?c=20BIFF=20generation=20(thus=20allowing=20us=20to=20more=20san?= =?UTF-8?q?ely=20deal=20=09=20=20with=20the=20XclExpMultiCellBase=20"chain?= =?UTF-8?q?ing"=20semantics).=202008-11-18=2021:33:01=20+0100=20kendy=20?= =?UTF-8?q?=20r263945=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20?= =?UTF-8?q?Pryor=20=20Correct=20font=20export=20within?= =?UTF-8?q?=20xl/styles.xml.=20The=20problem=20is=20that=20BIFF=20export?= =?UTF-8?q?=20inserts=20a=20"blind"=20font=20to=20appease=20older=20versio?= =?UTF-8?q?ns=20of=20Excel,=20but=20Excel/OOXML=20does=20not=20want=20the?= =?UTF-8?q?=20blind=20font.=20=20So=20instead=20of=20making=20XclExpBlindF?= =?UTF-8?q?ont=20do=20nothing=20--=20which=20causes=20all=20//*/@fontId=20?= =?UTF-8?q?values=20to=20be=20wrong=20because=20the=20@fontId=20is=20count?= =?UTF-8?q?ing=20a=20font=20that=20isn't=20present=20--=20we=20just=20don'?= =?UTF-8?q?t=20use=20XclExpBlindFont=20with=20OOXML=20output.=20=09*=20sc/?= =?UTF-8?q?source/filter/inc/xestyle.hxx,=20sc/source/filter/excel/xestyle?= =?UTF-8?q?.cxx:=20=09=20=20Don't=20override+implement=20XclExpBlindFont::?= =?UTF-8?q?SaveXml(),=20and=20instead=20=09=20=20don't=20add=20a=20XclExpB?= =?UTF-8?q?lindFont()=20record=20for=20OOXML=20export.=202008-11-18=2021:3?= =?UTF-8?q?2:30=20+0100=20kendy=20=20r263944=20:=20#i96320#=20xlsx=20expor?= =?UTF-8?q?t=20From:=20Jonathan=20Pryor=20=20Enable=20e?= =?UTF-8?q?xport=20of=20blank=20cells.=20Blank=20cells=20can=20contain=20f?= =?UTF-8?q?ormatting=20information=20(background=20color,=20borders,=20etc?= =?UTF-8?q?.),=20and=20XclExpBlankCell=20was=20previously=20overlooked.=20?= =?UTF-8?q?:-(=20=09*=20sc/source/filter/inc/xetable.hxx,=20sc/source/filt?= =?UTF-8?q?er/excel/xetable.cxx:=20=09=20=20Export=20/worksheet//c=20eleme?= =?UTF-8?q?nts=20for=20blank=20cells.=202008-11-18=2021:32:08=20+0100=20ke?= =?UTF-8?q?ndy=20=20r263943=20:=20#i96320#=20xlsx=20export=20From:=20Jonat?= =?UTF-8?q?han=20Pryor=20=20Start=20implementing=20/wor?= =?UTF-8?q?ksheet/cols/col/c/@s=20attribute.=20This=20allows=20Style=20inf?= =?UTF-8?q?ormation=20to=20be=20set=20for=20cells.=20=20It=20currently=20w?= =?UTF-8?q?orks=20for=20background=20color=20on=20cells=20with=20text;=20s?= =?UTF-8?q?till=20needs=20work=20to=20support=20~everything.=20=09*=20sc/s?= =?UTF-8?q?ource/filter/excel/xetable.cxx:=20Generate=20the=20=09=20=20/wo?= =?UTF-8?q?rksheet/cols/col/c/@s=20attribute=20so=20that=20it=20contains?= =?UTF-8?q?=20the=20Cell=20XF=20=09=20=20which=20contains=20the=20appropri?= =?UTF-8?q?ate=20formatting=20information.=202008-11-18=2021:31:41=20+0100?= =?UTF-8?q?=20kendy=20=20r263942=20:=20#i96320#=20xlsx=20export=20From:=20?= =?UTF-8?q?Jonathan=20Pryor=20=20Fix=20"Excel=20yells?= =?UTF-8?q?=20when=20importing=20a=20document=20that=20sets=20cell=20backg?= =?UTF-8?q?round=20color."=20i.e.=20styles=20weren't=20quite=20right=20(sh?= =?UTF-8?q?ock!).=20In=20this=20case,=20the=20issues=20were:=20=20=20-=20I?= =?UTF-8?q?=20wasn't=20distinguishing=20between=20*Cell*=20XFs=20and=20*St?= =?UTF-8?q?yle*=20XFs.=20=20=20-=20//cellStyle/@xfId=20refers=20to=20an=20?= =?UTF-8?q?index=20into=20//cellStyleXfs,=20and=20I=20wasn't=20=20=20=20?= =?UTF-8?q?=20generating=20//cellStyleXfs.=20=20Thus,=20if=20//cellStyle?= =?UTF-8?q?=20was=20present,=20Excel=20=20=20=20=20yelled.=20=20=20-=20"In?= =?UTF-8?q?dexes"=20were=20*completely*=20wrong.=20=20BIFF=20only=20has=20?= =?UTF-8?q?a=20single=20set=20of=20indexes=20=20=20=20=20to=20track,=20nic?= =?UTF-8?q?ely=20kept=20in=20XclExpXFBuffer::maXFIndexVec.=20=20OOXML=20ha?= =?UTF-8?q?s=20=5Ftwo=5F=20=20=20=20=20sets:=20//cellXfs=20and=20//cellSty?= =?UTF-8?q?leXfs,=20each=20of=20which=20are=20referenced=20"by=20=20=20=20?= =?UTF-8?q?=20index"=20from=20other=20XML=20parts=20(and=20from=20=5Fthis?= =?UTF-8?q?=5F=20XML=20part,=20via=20=20=20=20=20//cellStyle/@xfId=20-=20a?= =?UTF-8?q?bove).=20=20=20-=20We=20needed=20to=20export=20builtin=20styles?= =?UTF-8?q?.=20So=20*now*,=20if=20you=20create=20an=20empty=20Calc=20docum?= =?UTF-8?q?ent,=20set=20a=20cell=20background=20color,=20save,=20and=20loa?= =?UTF-8?q?d=20into=20Excel,=20it=20will=20load=20without=20error.=20You?= =?UTF-8?q?=20*still*=20won't=20see=20the=20proper=20cell=20background=20c?= =?UTF-8?q?olor=20in=20Excel,=20but=20at=20least=20it=20loads=20w/o=20erro?= =?UTF-8?q?r=20(which=20wasn't=20previously=20true).=20=09*=20sc/source/fi?= =?UTF-8?q?lter/inc/xestyle.hxx,=20sc/source/filter/excel/xestyle.cxx:=20?= =?UTF-8?q?=09=20=20Add=20XclExpXFBuffer::GetXmlCellIndex();=20lots=20of?= =?UTF-8?q?=20other=20changes=20(see=20=09=20=20above=20for=20the=20detail?= =?UTF-8?q?s).=202008-11-18=2021:31:19=20+0100=20kendy=20=20r263941=20:=20?= =?UTF-8?q?#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Er,=20yeah.=202008-11-18=2021:30:54=20+0100=20kend?= =?UTF-8?q?y=20=20r263940=20:=20#i96320#=20xlsx=20export=20From:=20Jonatha?= =?UTF-8?q?n=20Pryor=20=20Remove=20deliberate=20segfaul?= =?UTF-8?q?t-inducing=20code.=202008-11-18=2021:30:29=20+0100=20kendy=20?= =?UTF-8?q?=20r263939=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20?= =?UTF-8?q?Pryor=20=20Allow=20Excel=20to=20open=20a=20d?= =?UTF-8?q?ocument=20that=20changes=20a=20cell=20background.=20Note:=20it?= =?UTF-8?q?=20still=20doesn't=20*work*=20yet=20(as=20we=20don't=20set=20th?= =?UTF-8?q?e=20cell's=20@s=20property=20so=20Excel=20reads=20the=20appropr?= =?UTF-8?q?iate=20style),=20but=20it=20does=20LOAD=20w/o=20error=20now.=20?= =?UTF-8?q?=20This=20is=20progress.=20=09*=20sc/source/filter/excel/xestyl?= =?UTF-8?q?e.cxx:=20Lots=20'o=20changes;=20=09=20=20-=20Exclude=20the=20=20and=20=20children=20of=20//patternFill=20i?= =?UTF-8?q?f=20=09=20=20=20=20the=20colors=20aren't=20actually=20set.=20?= =?UTF-8?q?=09=20=20-=20Don't=20export=20//xf/@xfId,=20as=20I'm=20not=20su?= =?UTF-8?q?re=20wtf=20this=20is=20supposed=20to=20=09=20=20=20=20contain?= =?UTF-8?q?=20yet.=20=09=20=20-=20Enhance=20the=20Border/Fill=20lists=20cr?= =?UTF-8?q?eated=20last=20time=20so=20it=20behaves=20=09=20=20=20=20proper?= =?UTF-8?q?ly:=20use=20custom=20predicates=20to=20check=20for=20equality?= =?UTF-8?q?=20(no=20idea=20=09=20=20=20=20what=20the=20default=20operator?= =?UTF-8?q?=3D=3D=20does;=20it's=20probably=20wrong);=20don't=20use=20=09?= =?UTF-8?q?=20=20=20=20AddBorderAndFill()=20at=20all=20the=20"entry"=20poi?= =?UTF-8?q?nts=20as=20this=20misses=20cells,=20=09=20=20=20=20instead=20pr?= =?UTF-8?q?ocess=20all=20cells=20within=20XclExpXFBuffer::Finalize()=20and?= =?UTF-8?q?=20=09=20=20=20=20add=20borders/fills=20there=20(thus=20ensurin?= =?UTF-8?q?g=20we=20hit=20all=20cells);=20=09=20=20=20=20Assert=20that=20t?= =?UTF-8?q?he=20border/fill=20id=20values=20are=20valid.=20=09=20=20-=20Ad?= =?UTF-8?q?d=20a=20default=20set=20of=20fills.=20=20Excel=20complains=20lo?= =?UTF-8?q?udly=20if=20you're=20=09=20=20=20=20missing=20these=20fills,=20?= =?UTF-8?q?so=20make=20sure=20they're=20always=20present.=20=09=20=20-=20/?= =?UTF-8?q?/borders/@count=20should=20contain=20the=20*Borders*=20count,?= =?UTF-8?q?=20not=20the=20Fills=20=09=20=20=20=20count.=20=20Oops.=202008-?= =?UTF-8?q?11-18=2021:30:04=20+0100=20kendy=20=20r263938=20:=20#i96320#=20?= =?UTF-8?q?xlsx=20export=20From:=20Jonathan=20Pryor=20?= =?UTF-8?q?=20Continue=20style=20support.=20Excel=20can=20now=20(again!)?= =?UTF-8?q?=20open=20Calc-generated=20spreadsheets.=20Compared=20to=20othe?= =?UTF-8?q?r=20parts,=20this=20was=20a=20mess,=20mostly=20because=20(for?= =?UTF-8?q?=20the=20first=20time)=20the=20XML=20format=20did=20NOT=20close?= =?UTF-8?q?ly=20match=20the=20pre-existing=20binary=20format.=20=20It's=20?= =?UTF-8?q?reasonably=20close,=20but=20some=20additional=20mapping=20is=20?= =?UTF-8?q?necessary.=20=20In=20particular,=20in=20BIFF=20the=20XF=20recor?= =?UTF-8?q?ds=20contain=20"inline"=20the=20border=20and=20fill=20informati?= =?UTF-8?q?on.=20=20In=20OOXML=20this=20information=20is=20referred=20to?= =?UTF-8?q?=20"by-index";=20consequently=20we=20need=20to=20create=20an=20?= =?UTF-8?q?internal=20table=20of=20borders=20&=20fills=20so=20that=20we=20?= =?UTF-8?q?can=20then=20determine=20the=20by-index=20value=20for=20borders?= =?UTF-8?q?=20and=20fills.=20:-(=20Furthermore,=20my=20previous=20`font=20?= =?UTF-8?q?support`=20commit=20was=20broken:=20it=20removed=20duplicate=20?= =?UTF-8?q?fonts.=20=20While=20this=20*sounds*=20like=20a=20good=20idea=20?= =?UTF-8?q?(look=20ma,=20smaller=20files!),=20it's=20not=20(currently)=20a?= =?UTF-8?q?=20good=20idea=20as=20the=20XclExpXF::mnXclFont=20value=20is=20?= =?UTF-8?q?an=20index=20into=20this=20font=20list=20(=5Fwith=5F=20duplicat?= =?UTF-8?q?e=20values).=20=20Removing=20the=20duplicates=20results=20in=20?= =?UTF-8?q?invalid=20/styleSheet/cellXfs/xf/@fontId=20values,=20which=20ca?= =?UTF-8?q?uses=20Excel=20to=20complain=20(and=20no=20end=20of=20grief=20f?= =?UTF-8?q?or=20me).=20All=20told,=20this=20adds=20support=20for:=20/style?= =?UTF-8?q?Sheet/borders,=20/styleSheet/borders/border,=20/styleSheet/bord?= =?UTF-8?q?ers/border/bottom,=20/styleSheet/borders/border/diagonal,=20/st?= =?UTF-8?q?yleSheet/borders/border/left,=20/styleSheet/borders/border/righ?= =?UTF-8?q?t,=20/styleSheet/borders/border/top,=20/styleSheet/cellXfs,=20/?= =?UTF-8?q?styleSheet/cellXfs/xf,=20/styleSheet/cellXfs/xf/alignment,=20/s?= =?UTF-8?q?tyleSheet/cellXfs/xf/protection,=20/styleSheet/fills,=20/styleS?= =?UTF-8?q?heet/fills/fill,=20/styleSheet/fills/fill/patternFill,=20/style?= =?UTF-8?q?Sheet/fills/fill/patternFill/bgColor,=20and=20/styleSheet/fills?= =?UTF-8?q?/fill/patternFill/fgColor.=20=09*=20sc/source/filter/excel/ooxm?= =?UTF-8?q?l-export-TODO.txt:=20Flush.=20=09*=20sc/source/filter/inc/xesty?= =?UTF-8?q?le.hxx,=20sc/source/filter/excel/xestyle.cxx:=20=09=20=20Get=20?= =?UTF-8?q?xl/styles.xml=20into=20an=20actual=20Excel-loadable=20condition?= =?UTF-8?q?.=20=09*=20sc/source/filter/inc/xestream.hxx,=20=09=20=20sc/sou?= =?UTF-8?q?rce/filter/excel/xestream.cxx:=20Add=20=09=20=20XclXmlUtils::To?= =?UTF-8?q?OString(Color).=202008-11-18=2021:29:41=20+0100=20kendy=20=20r2?= =?UTF-8?q?63937=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor?= =?UTF-8?q?=20=20Implement=20/styleSheet/fonts/font.=20?= =?UTF-8?q?This=20generates:=20/styleSheet/fonts/font/b,=20/styleSheet/fon?= =?UTF-8?q?ts/font/charset,=20/styleSheet/fonts/font/color,=20/styleSheet/?= =?UTF-8?q?fonts/font/condense,=20/styleSheet/fonts/font/extend,=20/styleS?= =?UTF-8?q?heet/fonts/font/family,=20/styleSheet/fonts/font/i,=20/styleShe?= =?UTF-8?q?et/fonts/font/name,=20/styleSheet/fonts/font/outline,=20/styleS?= =?UTF-8?q?heet/fonts/font/shadow,=20/styleSheet/fonts/font/strike,=20/sty?= =?UTF-8?q?leSheet/fonts/font/sz,=20/styleSheet/fonts/font/u,=20and=20/sty?= =?UTF-8?q?leSheet/fonts/font/vertAlign.=20Missing=20is:=20/styleSheet/fon?= =?UTF-8?q?ts/font/scheme,=20=09*=20sc/source/filter/inc/xestream.hxx,=20?= =?UTF-8?q?=09=20=20sc/source/filter/excel/xestream.cxx:=20Change=20WriteF?= =?UTF-8?q?ontData()=20to=20take=20=09=20=20a=20`sal=5FInt32=20nFontId'=20?= =?UTF-8?q?parameter,=20which=20is=20the=20element=20to=20write=20to=20=09?= =?UTF-8?q?=20=20contain=20the=20font=20name.=20=20This=20is=20necessary?= =?UTF-8?q?=20as=20the=20shared=20string=20table=20=09=20=20wants=20to=20u?= =?UTF-8?q?se=20XML=5FrFont=20for=20the=20font=20name,=20while=20//fonts/f?= =?UTF-8?q?ont=20wants=20=09=20=20XML=5Fname=20for=20the=20font=20name.=20?= =?UTF-8?q?=09*=20sc/source/filter/excel/xestring.cxx:=20WriteFontData()?= =?UTF-8?q?=20change.=20=09*=20sc/source/filter/inc/xestyle.hxx,=20sc/sour?= =?UTF-8?q?ce/filter/excel/xestyle.cxx:=20=09=20=20Generate=20=20element=20(oops),=20and=20generate=20=09=20=20/styleSheet/f?= =?UTF-8?q?onts/font/**=20for=20all=20unique=20fonts.=202008-11-18=2021:29?= =?UTF-8?q?:12=20+0100=20kendy=20=20r263936=20:=20#i96320#=20xlsx=20export?= =?UTF-8?q?=20From:=20Jonathan=20Pryor=20=20Rename=20Xc?= =?UTF-8?q?lExpXmlStream::WriteCurrentStreamAttributes()=20to=20WriteAttri?= =?UTF-8?q?butes().=20Also=20adds=20XclExpXmlStream::WriteFontData().=20?= =?UTF-8?q?=20The=20WriteCurrentStreamAttributes()=20to=20WriteAttributes(?= =?UTF-8?q?)=20change=20was=20done=20so=20that=20method=20names=20would=20?= =?UTF-8?q?have=20a=20reasonable=20length,=20and=20adding=20WriteCurrentSt?= =?UTF-8?q?reamFontData()=20was=20looking=20like=20an=20ugly=20pattern=20c?= =?UTF-8?q?ontinuation.=20XclExpXmlStream::WriteFontData()=20is=20to=20sup?= =?UTF-8?q?port=20code=20sharing=20of=20XclFontData=20generation.=20=09*?= =?UTF-8?q?=20sc/source/filter/excel/ooxml-export-TODO.txt:=20Flush.=20=09?= =?UTF-8?q?*=20sc/source/filter/inc/xestream.hxx,=20=09=20=20sc/source/fil?= =?UTF-8?q?ter/excel/xestring.cxx:=20=09=20=20s/WriteCurrentStreamAttribut?= =?UTF-8?q?es/WriteAttributes/g,=20add=20=09=20=20WriteFontData()=20("move?= =?UTF-8?q?d"=20from=20xestring.cxx).=20=09*=20sc/source/filter/inc/xereco?= =?UTF-8?q?rd.hxx,=20=09=20=20sc/source/filter/excel/excrecds.cxx,=20=09?= =?UTF-8?q?=20=20sc/source/filter/excel/xepage.cxx,=20=09=20=20sc/source/f?= =?UTF-8?q?ilter/excel/xerecord.cxx,=20=09=20=20sc/source/filter/excel/xes?= =?UTF-8?q?tream.cxx,=20=09=20=20sc/source/filter/xcl97/xcl97rec.cxx:=20De?= =?UTF-8?q?al=20with=20above=20changes.=202008-11-18=2021:28:50=20+0100=20?= =?UTF-8?q?kendy=20=20r263935=20:=20#i96320#=20xlsx=20export=20From:=20Jon?= =?UTF-8?q?athan=20Pryor=20=20Begin=20style=20support.?= =?UTF-8?q?=20=09*=20sc/source/filter/excel/excdoc.cxx:=20For=20OOXML=20ou?= =?UTF-8?q?tput,=20create=20an=20=09=20=20XclExpXmlStyleSheet=20instance?= =?UTF-8?q?=20instead=20of=20generating=20FONTLIST,=20=09=20=20FORMATLIST,?= =?UTF-8?q?=20XFLIST,=20and=20PALETTE=20separately,=20as=20these=20need=20?= =?UTF-8?q?to=20be=20=09=20=20written=20to=20a=20separate=20.zip=20part.?= =?UTF-8?q?=20=09*=20sc/source/filter/inc/xestyle.hxx,=20sc/source/filter/?= =?UTF-8?q?excel/xestyle.cxx:=20=09=20=20Begin=20generating=20the=20xl/sty?= =?UTF-8?q?les.xml=20part.=202008-11-18=2021:28:25=20+0100=20kendy=20=20r2?= =?UTF-8?q?63934=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor?= =?UTF-8?q?=20=20=3D=3Futf-8=3Fq=3FPartially=3D20implem?= =?UTF-8?q?ent=3D20Comments=3D20(=3DC2=3DA73.7).=3F=3D=20MIME-Version:=201?= =?UTF-8?q?.0=20Content-Type:=20text/plain;=20charset=3Dutf-8=20Content-Tr?= =?UTF-8?q?ansfer-Encoding:=208bit=20This=20generates=20the=20/xl/comments?= =?UTF-8?q?N.xml=20files=20(N=20=3D=3D=20sheet=20index=20number).=20This?= =?UTF-8?q?=20is=20only=20a=20partial=20generation=20because=20Excel=20req?= =?UTF-8?q?uires=20that=20a=20drawing=20object=20be=20associated=20with=20?= =?UTF-8?q?the=20comment=20in=20order=20to=20display=20it.=20=20No=20drawi?= =?UTF-8?q?ng=20object,=20and=20instead=20Excel=20displays=20a=20dialog=20?= =?UTF-8?q?warning=20that=20the=20comments=20could=20not=20be=20displayed.?= =?UTF-8?q?=20=09*=20sc/source/filter/excel/ooxml-export-TODO.txt:=20Flush?= =?UTF-8?q?.=20=09*=20sc/source/filter/excel/excdoc.cxx:=20Create=20a=20Xc?= =?UTF-8?q?lExpComments=20object=20to=20=09=20=20generate=20the=20appropri?= =?UTF-8?q?ate=20commentsN.xml=20file,=20as=20the=20commentsN.xml=20=09=20?= =?UTF-8?q?=20file=20needs=20to=20write=20information=20about=20*all*=20of?= =?UTF-8?q?=20the=20comments=20(author=20=09=20=20information),=20so=20we?= =?UTF-8?q?=20can't=20just=20write=20out=20the=20XclExpNotes=20individuall?= =?UTF-8?q?y.=20=09*=20sc/source/filter/xcl97/xcl97rec.cxx,=20=09*=20sc/so?= =?UTF-8?q?urce/filter/excel/xecontent.cxx:=20Cope=20with=20=09=20=20XclEx?= =?UTF-8?q?pXmlStream::CreateOutputStream()=20changes.=20=09*=20sc/source/?= =?UTF-8?q?filter/inc/xeescher.hxx,=20=09=20=20sc/source/filter/excel/xees?= =?UTF-8?q?cher.cxx:=20Add=20and=20implement=20=09=20=20XclExpComments,=20?= =?UTF-8?q?and=20add=20XML=20generation=20to=20XclExpNote.=20=09*=20sc/sou?= =?UTF-8?q?rce/filter/inc/xestream.hxx,=20=09=20=20sc/source/filter/excel/?= =?UTF-8?q?xestream.cxx:=20Change=20=09=20=20XclExpXmlStream::CreateOutput?= =?UTF-8?q?Stream()=20to=20take=20full=20and=20relative=20=09=20=20paths?= =?UTF-8?q?=20(instead=20of=20trying=20to=20cosntruct=20a=20full/relative?= =?UTF-8?q?=20path=20based=20on=20=09=20=20the=20parameters).=20=20This=20?= =?UTF-8?q?was=20necessary=20because=20commentsN.xml=20needs=20to=20=09=20?= =?UTF-8?q?=20insert=20a=20relative=20path=20of=20e.g.=20"../comments1.xml?= =?UTF-8?q?",=20which=20the=20=09=20=20previous=20implementation=20would?= =?UTF-8?q?=20have=20made=20difficult.=20=20I=20think=20this=20=09=20=20ma?= =?UTF-8?q?kes=20things=20clearer=20and=20less=20magical=20as=20well.=2020?= =?UTF-8?q?08-11-18=2021:28:01=20+0100=20kendy=20=20r263933=20:=20#i96320#?= =?UTF-8?q?=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20most=20of=20the=20Shared=20String=20Table=20su?= =?UTF-8?q?pport.=20Previously=20we=20generated=20/sst/si/t,=20which=20sup?= =?UTF-8?q?ports=20non-formatted=20text.=20Now=20we=20support=20formatting?= =?UTF-8?q?=20within=20a=20cell=20--=20AS=20LONG=20AS=20the=20formatting?= =?UTF-8?q?=20isn't=20applied=20to=20the=20first=20character/token.=20=20(?= =?UTF-8?q?The=20first=20character/token=20requires=20formal=20styles=20su?= =?UTF-8?q?pport,=20which=20is=20lacking;=20everything=20after=20character?= =?UTF-8?q?=20position=201=20can=20be=20handled=20within=20the=20shared=20?= =?UTF-8?q?string=20table.)=20Now=20we=20have:=20/sst/si/r/rPr/b,=20/sst/s?= =?UTF-8?q?i/r/rPr/charset,=20/sst/si/r/rPr/color,=20/sst/si/r/rPr/family,?= =?UTF-8?q?=20/sst/si/r/rPr/i,=20/sst/si/r/rPr/outline,=20/sst/si/r/rPr/rF?= =?UTF-8?q?ont,=20/sst/si/r/rPr/scheme,=20/sst/si/r/rPr/shadow,=20/sst/si/?= =?UTF-8?q?r/rPr/strike,=20/sst/si/r/rPr/sz,=20/sst/si/r/rPr/u,=20/sst/si/?= =?UTF-8?q?r/rPr/vertAlign,=20and=20/sst/si/r/t.=20=09*=20sc/source/filter?= =?UTF-8?q?/excel/ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/filte?= =?UTF-8?q?r/excel/xecontent.cxx:=20Use=20XclExpString::WriteXml()=20=09?= =?UTF-8?q?=20=20to=20generate=20string=20values,=20instead=20of=20assumin?= =?UTF-8?q?g=20everything=20is=20=09=20=20unformatted=20/sst/si/t=20elemen?= =?UTF-8?q?ts.=20=09*=20sc/source/filter/inc/xestring.hxx,=20=09=20=20sc/s?= =?UTF-8?q?ource/filter/excel/xestring.cxx:=20Add=20and=20implement=20=09?= =?UTF-8?q?=20=20XclExpString::WriteXml(),=20which=20now=20handles=20forma?= =?UTF-8?q?tted=20text=20runs.=20=09*=20sc/source/filter/inc/xestream.hxx,?= =?UTF-8?q?=20=09=20=20sc/source/filter/excel/xestream.cxx:=20Change=20=09?= =?UTF-8?q?=20=20XclXmlUtils::ToOUString(ScfUInt16Vec)=20to=20=09=20=20Xcl?= =?UTF-8?q?XmlUtils::ToOUString(ScfUInt16Vec,int,int)=20so=20that=20it=20c?= =?UTF-8?q?an=20be=20=09=20=20easily=20used=20for=20substrings;=20add=20as?= =?UTF-8?q?serts=20to=20=09=20=20XclXmlUtils::To*String(XclExpString)=20to?= =?UTF-8?q?=20ensure=20that=20we're=20not=20=09=20=20dealing=20with=20form?= =?UTF-8?q?atted=20text=20there=20(as=20formatted=20text=20needs=20to=20go?= =?UTF-8?q?=20=09=20=20through=20XclExpString::WriteXml(),=20but=20these?= =?UTF-8?q?=20methods=20are=20often=20used=20=09=20=20for=20attribute=20va?= =?UTF-8?q?lues=20which=20cannot=20have=20formatted=20text).=202008-11-18?= =?UTF-8?q?=2021:27:35=20+0100=20kendy=20=20r263932=20:=20#i96320#=20xlsx?= =?UTF-8?q?=20export=20From:=20Jonathan=20Pryor=20=20Up?= =?UTF-8?q?date=20of=20TODO.=20=09*=20sc/source/filter/excel/ooxml-export-?= =?UTF-8?q?TODO.txt:=20Flush.=202008-11-18=2021:27:14=20+0100=20kendy=20?= =?UTF-8?q?=20r263931=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20?= =?UTF-8?q?Pryor=20=20Add=20/Relationships/Relationship?= =?UTF-8?q?/@TargetMode=20support.=20This=20also=20fixes=20Calc=20hyperlin?= =?UTF-8?q?k=20export,=20allowing=20Excel=20to=20properly=20read=20documen?= =?UTF-8?q?ts=20containing=20a=20hyperlink.=20=09*=20sc/source/filter/exce?= =?UTF-8?q?l/xecontent.cxx:=20Generate=20"External"=20for=20the=20=09=20?= =?UTF-8?q?=20hyperlink's=20TargetMode=20property,=20so=20that=20Excel=20w?= =?UTF-8?q?ill=20load=20the=20=09=20=20generated=20spreadsheet=20without?= =?UTF-8?q?=20error.=202008-11-18=2021:26:39=20+0100=20kendy=20=20r263930?= =?UTF-8?q?=20:=20#i96320#=20xlsx=20export=20From:=20Fridrich=20Strba=20=20I=20think=20this=20was=20what=20was=20meant?= =?UTF-8?q?=202008-11-18=2021:26:18=20+0100=20kendy=20=20r263929=20:=20#i9?= =?UTF-8?q?6320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Allow=20Excel=20to=20open=20documents=20w/=20all=20co?= =?UTF-8?q?ntents=20selected.=20Previously,=20if=20you=20selected=20all=20?= =?UTF-8?q?cells=20(Ctrl+A)=20then=20saved,=20the=20//selection/@sqref=20a?= =?UTF-8?q?ttribute=20would=20contain=20"A:IV",=20which=20Excel=20didn't?= =?UTF-8?q?=20like.=20=09*=20sc/source/filter/excel/xestream.cxx:=20Don't?= =?UTF-8?q?=20allow=20a=20MAXROW=20or=20MAXCOL=20=09=20=20value=20to=20hit?= =?UTF-8?q?=20ScRange::Format(),=20thus=20avoiding=20the=20"missing=20row?= =?UTF-8?q?=20=09=20=20numbers"=20issue.=202008-11-18=2021:25:46=20+0100?= =?UTF-8?q?=20kendy=20=20r263928=20:=20#i96320#=20xlsx=20export=20From:=20?= =?UTF-8?q?Jonathan=20Pryor=20=20(Mostly)=20Implement?= =?UTF-8?q?=20/worksheet/hyperlinks/hyperlink.=20The=20only=20piece=20miss?= =?UTF-8?q?ing=20is=20error-free=20Excel=20import,=20and=20in=20order=20fo?= =?UTF-8?q?r=20Excel=20to=20import=20a=20generated=20document=20error-free?= =?UTF-8?q?=20is=20for=20the=20sheetN.xml.rels=20document=20to=20contain?= =?UTF-8?q?=20a=20/Relationships/Relationship/@TargetMode=20attribute,=20e?= =?UTF-8?q?.g.=20=09=20I'm=20not=20sure=20how=20to=20add=20this=20functionality?= =?UTF-8?q?=20yet.=20=09*=20sc/source/filter/excel/excdoc.cxx:=20Generate?= =?UTF-8?q?=20the=20=09=20=20/worksheet/hyperlinks=20start=20and=20end=20e?= =?UTF-8?q?lements,=20if=20appropriate.=20=09*=20sc/source/filter/inc/xeco?= =?UTF-8?q?ntent.hxx,=20=09=20=20sc/source/filter/excel/xecontent.cxx:=20G?= =?UTF-8?q?enerate=20the=20=09=20=20/worksheet/hyperlinks/hyperlink=20elem?= =?UTF-8?q?ent=20=09*=20sc/source/filter/inc/xestream.hxx,=20=09=20=20sc/s?= =?UTF-8?q?ource/filter/excel/xestream.cxx:=20Add=20=09=20=20XclXmlUtils::?= =?UTF-8?q?ToOUString(XclExpString).=202008-11-18=2021:25:24=20+0100=20ken?= =?UTF-8?q?dy=20=20r263927=20:=20#i96320#=20xlsx=20export=20From:=20Jonath?= =?UTF-8?q?an=20Pryor=20=20Implement=20AutoFilter=20sup?= =?UTF-8?q?port.=20This=20includes=20/worksheet/autoFilter,=20/worksheet/a?= =?UTF-8?q?utoFilter/filterColumn,=20/worksheet/autoFilter/filterColumn/to?= =?UTF-8?q?p10,=20/worksheet/autofilter/filterColumn/customFilters,=20and?= =?UTF-8?q?=20/worksheet/autofilter/filterColumn/customFilter.=20=09*=20sc?= =?UTF-8?q?/source/filter/excel/ooxml-export-TODO.txt:=20Flush.=20=09*=20s?= =?UTF-8?q?c/source/filter/inc/excrecds.hxx,=20=09=20=20sc/source/filter/e?= =?UTF-8?q?xcel/excrecds.cxx:=20Generate=20//autoFilter/*.=20=09*=20sc/sou?= =?UTF-8?q?rce/filter/excel/xename.cxx:=20Apparently=20adding=20an=20AutoF?= =?UTF-8?q?ilter=20=09=20=20adds=20a=20"defined=20name"=20with=20an=20empt?= =?UTF-8?q?y=20string=20(!),=20so=20change=20=09=20=20XclExpName::SaveXml(?= =?UTF-8?q?)=20to=20skip=20entries=20with=20empty=20names.=20=09*=20sc/sou?= =?UTF-8?q?rce/filter/inc/xerecord.hxx,=20=09=20=20sc/source/filter/excel/?= =?UTF-8?q?xerecord.cxx:=20Declare=20and=20implement=20a=20=09=20=20specia?= =?UTF-8?q?lization=20for=20XclExpValueRecord::SaveXml().=20=20Thi?= =?UTF-8?q?s=20is=20=09=20=20necessary=20because=20Fridrich's=20change=20t?= =?UTF-8?q?o=20XclExpValueRecord::SaveXml()=20=09=20=20(to=20case=20maValu?= =?UTF-8?q?e=20to=20sal=5FInt32)=20broke=20double=20exports=20(as=20it=20c?= =?UTF-8?q?ast=20the=20=09=20=20double=20to=20a=20sal=5FInt32,=20thus=20tr?= =?UTF-8?q?uncating=20the=20value).=20=20Since=20we=20don't=20=09=20=20wan?= =?UTF-8?q?t=20to=20re-add=20the=20ambiguity=20warning,=20we=20need=20to?= =?UTF-8?q?=20specialize=20so=20that=20=09=20=20`double'=20output=20uses?= =?UTF-8?q?=20the=20correct=20rtl::OString::valueOf()=20method.=202008-11-?= =?UTF-8?q?18=2021:24:55=20+0100=20kendy=20=20r263926=20:=20#i96320#=20xls?= =?UTF-8?q?x=20export=20From:=20Jonathan=20Pryor=20=20F?= =?UTF-8?q?ix=20OOXML=20Calc=20export=20so=20that=20documents=20containing?= =?UTF-8?q?=20>=201=20feature=20work.=20While=20most=20previous=20features?= =?UTF-8?q?=20worked=20--=20you=20could=20create=20a=20document=20using=20?= =?UTF-8?q?the=20feature,=20save=20it,=20and=20open=20it=20in=20Excel=20w/?= =?UTF-8?q?o=20issue=20--=20they=20worked=20in=20isolation.=20=20So=20in?= =?UTF-8?q?=20trying=20to=20create=20a=20single=20test=20document=20to=20t?= =?UTF-8?q?est=20as=20many=20features=20as=20possible,=20things=20(expecte?= =?UTF-8?q?dly)=20broke,=20so=20this=20fixes=20things=20up.=20=09*=20sc/so?= =?UTF-8?q?urce/filter/excel/excdoc.cxx,=20sc/source/filter/excel/xepage.c?= =?UTF-8?q?xx,=20=09=20=20sc/source/filter/excel/excrecds.cxx:=20Reorder?= =?UTF-8?q?=20element=20output=20to=20=09=20=20conform=20to=20the=20OOXML?= =?UTF-8?q?=20XSD=20(and=20allow=20Excel=20to=20read=20features.xlsx).=202?= =?UTF-8?q?008-11-18=2021:24:34=20+0100=20kendy=20=20r263925=20:=20#i96320?= =?UTF-8?q?#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/worksheet/autoFilter.=20=09*=20sc/source/fil?= =?UTF-8?q?ter/excel/ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/fi?= =?UTF-8?q?lter/inc/excrecds.hxx,=20=09=20=20sc/source/filter/excel/excrec?= =?UTF-8?q?ds.cxx:=20Generate=20the=20=09=20=20/worksheet/autoFilter=20ele?= =?UTF-8?q?ment.=202008-11-18=2021:24:07=20+0100=20kendy=20=20r263924=20:?= =?UTF-8?q?=20#i96320#=20xlsx=20export=20From:=20Fridrich=20Strba=20=20disambiguate=20OUString::valueOf=20calls=202008?= =?UTF-8?q?-11-18=2021:23:45=20+0100=20kendy=20=20r263923=20:=20#i96320#?= =?UTF-8?q?=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20(Hopefully)=20Make=20Formula=20Export=20Locale-Independent?= =?UTF-8?q?.=20Nice=20as=20Kohei's=20patch=20was,=20it=20relied=20on=20for?= =?UTF-8?q?mula=20export=20being=20in=20the=20same=20locale=20as=20the=20u?= =?UTF-8?q?ser's=20locale.=20=20So=20import=20into=20Excel=20would=20work?= =?UTF-8?q?=20for=20*me*=20(en-US=20user),=20but=20fail=20for=20~everyone?= =?UTF-8?q?=20else=20(i.e.=20not=20very=20useful).=20This=20patch=20is=20a?= =?UTF-8?q?=20hack,=20but=20has=20the=20added=20benefit=20that=20it=20appe?= =?UTF-8?q?ars=20to=20work:=20create=20an=20ScCompiler::OpCodeMapPtr=20tha?= =?UTF-8?q?t's=20specific=20to=20OOXML=20output,=20and=20not=20cache=20the?= =?UTF-8?q?=20results.=20=20Not=20ideal,=20but=20enough=20to=20progress=20?= =?UTF-8?q?further...=20=09*=20sc/inc/grammar.hxx:=20Add=20GRAM=5FOOXML=5F?= =?UTF-8?q?A1,=20which=20is=20a=20locale-independent=20=09=20=20grammar=20?= =?UTF-8?q?value=20(forces=20ENGLISH,=20which=20is=20what=20Excel=20expect?= =?UTF-8?q?s).=20=09*=20sc/source/core/tool/compiler.cxx:=20When=20dealing?= =?UTF-8?q?=20with=20GRAM=5FOOXML=5FA1,=20=09=20=20create=20a=20new/unique?= =?UTF-8?q?=20OpCodeMap=20that=20always=20uses=20','=20for=20SC=5FOPCODE?= =?UTF-8?q?=5FSEP.=20=09*=20sc/source/filter/excel/xestream.cxx:=20Use=20G?= =?UTF-8?q?RAM=5FOOXML=5FA1=20for=20output.=202008-11-18=2021:23:20=20+010?= =?UTF-8?q?0=20kendy=20=20r263922=20:=20#i96320#=20xlsx=20export=20From:?= =?UTF-8?q?=20Jonathan=20Pryor=20=20Fix=20formula=20exp?= =?UTF-8?q?ort=20to=20use=20','=20to=20separate=20parameters=20instead=20o?= =?UTF-8?q?f=20';'.=20This=20is=20just=20Kohei's=20calc-formula-variable-s?= =?UTF-8?q?eparators-sc.diff=20patch,=20but=20it=20works=20quite=20nicely?= =?UTF-8?q?=20for=20this.=20:-)=20=09*=20sc/inc/compiler.hxx,=20sc/source/?= =?UTF-8?q?core/tool/compiler.cxx:=20Allow=20=09=20=20characters=20other?= =?UTF-8?q?=20than=20';'=20to=20be=20used=20as=20the=20parameter=20separat?= =?UTF-8?q?or=20=09=20=20within=20functions.=20=20We=20don't=20care=20so?= =?UTF-8?q?=20much=20about=20permitting=20people=20to=20=09=20=20*enter*?= =?UTF-8?q?=20such=20formulas,=20but=20this=20also=20gives=20us=20the=20ab?= =?UTF-8?q?ility=20to=20=09=20=20*export*=20such=20formulas=20using=20','?= =?UTF-8?q?=20instead=20of=20';',=20which=20Excel=20=09=20=20requires.=202?= =?UTF-8?q?008-11-18=2021:22:55=20+0100=20kendy=20=20r263921=20:=20#i96320?= =?UTF-8?q?#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Finish=20initial=20support=20for=20/worksheet/sheetData/r?= =?UTF-8?q?ow/c.=20Support=20for=20some=20attributes=20is=20missing=20(suc?= =?UTF-8?q?h=20as=20those=20storing=20formatting=20information),=20but=20w?= =?UTF-8?q?e=20now=20(almost=20completely)=20save=20cell=20values,=20error?= =?UTF-8?q?s,=20boolean=20cells,=20and=20formulas.=20The=20only=20missing?= =?UTF-8?q?=20feature=20is=20for=20>=201=20formula=20argument,=20e.g.=20"S?= =?UTF-8?q?UM(A1;B1)".=20This=20needs=20to=20be=20exported=20as=20"SUM(A1,?= =?UTF-8?q?B1)"=20(note=20the=20comma).=20=09*=20sc/source/filter/excel/oo?= =?UTF-8?q?xml-export-TODO.txt:=20Flush.=20=09*=20sc/source/filter/inc/xet?= =?UTF-8?q?able.hxx,=20sc/source/filter/excel/xetable.cxx:=20=09=20=20Add?= =?UTF-8?q?=20formula=20support=20for=20/worksheet/sheetData/row/c.=20=20R?= =?UTF-8?q?emove=20=09=20=20XclExpBlankCell::SaveXml(),=20as=20I=20can't?= =?UTF-8?q?=20think=20of=20anything=20it=20would=20=09=20=20actually=20nee?= =?UTF-8?q?d=20to=20do.=202008-11-18=2021:22:30=20+0100=20kendy=20=20r2639?= =?UTF-8?q?20=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20?= =?UTF-8?q?=20Implement=20partial=20support=20for=20/wo?= =?UTF-8?q?rksheet/sheetData/row/c.=20This=20is=20take=201=20of=20string?= =?UTF-8?q?=20and=20value=20support=20(//c[@t=3D's'=20or=20@t=3D'n']).=20B?= =?UTF-8?q?oolean=20(//c[@t=3D'b'])=20and=20error=20(//c[@t=3D'e'])=20supp?= =?UTF-8?q?ort=20is=20also=20there,=20but=20I=20have=20no=20idea=20how=20t?= =?UTF-8?q?o=20test=20bool=20and=20error=20output=20without=20formula=20su?= =?UTF-8?q?pport.=20TESTING:=20Numbers=20have=20two=20serialization=20path?= =?UTF-8?q?s:=20=20=20-=20"RK"=20numbers,=20which=20go=20through=20XclExpR?= =?UTF-8?q?kCell.=20=20=20-=20non-RK=20numbers,=20which=20go=20thorugh=20X?= =?UTF-8?q?clExpNumberCell.=20RK=20numbers=20are=20integers=20or=20numbers?= =?UTF-8?q?=20evenly=20divisible=20by=20100.=20=20All=20other=20floating?= =?UTF-8?q?=20point=20values=20(e.g.=20Pi)=20are=20non-RK=20values.=20Stri?= =?UTF-8?q?ngs=20are,=20well,=20strings.=20=09*=20sc/source/filter/excel/o?= =?UTF-8?q?oxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/filter/inc/xe?= =?UTF-8?q?table.hxx,=20sc/source/filter/excel/xetable.cxx:=20=09=20=20Gen?= =?UTF-8?q?erate=20/worksheet/sheetData/row/c=20for=20strings=20and=20nume?= =?UTF-8?q?ric=20values,=20=09=20=20and=20stub=20out=20support=20for=20the?= =?UTF-8?q?=20other=20//c=20types=20(formulas,=20errors,=20=09=20=20boolea?= =?UTF-8?q?n=20values,=20blank=20values...).=202008-11-18=2021:22:08=20+01?= =?UTF-8?q?00=20kendy=20=20r263919=20:=20#i96320#=20xlsx=20export=20From:?= =?UTF-8?q?=20Jonathan=20Pryor=20=20Implement=20/worksh?= =?UTF-8?q?eet/sheetData/row.=20=09*=20sc/source/filter/inc/xetable.hxx,?= =?UTF-8?q?=20sc/source/filter/excel/xetable.cxx:=20=09=20=20Generate=20/w?= =?UTF-8?q?orksheet/sheetData/row;=20generate=20=20instead=20o?= =?UTF-8?q?f=20=09=20=20=20if=20there=20are=20no=20?= =?UTF-8?q?rows.=202008-11-18=2021:21:40=20+0100=20kendy=20=20r263918=20:?= =?UTF-8?q?=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20=3D=3Futf-8=3Fq=3FFlush=3D20sc/source/filter/ex?= =?UTF-8?q?cel/ooxml-export-TODO.txt;=3D20completed=3D20first=3D20passs=3D?= =?UTF-8?q?20of=3D20=3DC2=3DA73.3.1.=3F=3D=20MIME-Version:=201.0=20Content?= =?UTF-8?q?-Type:=20text/plain;=20charset=3Dutf-8=20Content-Transfer-Encod?= =?UTF-8?q?ing:=208bit=20=09*=20sc/source/filter/excel/ooxml-export-TODO.t?= =?UTF-8?q?xt:=20Flush.=202008-11-18=2021:21:15=20+0100=20kendy=20=20r2639?= =?UTF-8?q?17=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20?= =?UTF-8?q?=20Implement=20/worksheet/sheetViews/sheetVi?= =?UTF-8?q?ew.=20=09*=20sc/source/filter/excel/xeview.cxx:=20Generate=20at?= =?UTF-8?q?tributes=20for=20=09=20=20/worksheet/sheetViews/sheetView.=2020?= =?UTF-8?q?08-11-18=2021:20:54=20+0100=20kendy=20=20r263916=20:=20#i96320#?= =?UTF-8?q?=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/worksheet/sheetPr/pageSetUpPr.=20This=20also?= =?UTF-8?q?=20partially=20implements=20/worksheet/sheetPr,=20but=20most=20?= =?UTF-8?q?of=20it=20is=20TODO.=20=09*=20sc/source/filter/excel/ooxml-expo?= =?UTF-8?q?rt-TODO.txt:=20Flush.=20=09*=20sc/source/filter/excel/excdoc.cx?= =?UTF-8?q?x:=20Alter=20XclExpWsbool=20initialization=20=09=20=20for=20XML?= =?UTF-8?q?=20output=20so=20we=20can=20output=20additional=20information.?= =?UTF-8?q?=20=09*=20sc/source/filter/inc/excrecds.hxx,=20=09=20=20sc/sour?= =?UTF-8?q?ce/filter/excel/excrecds.cxx:=20Generate=20/worksheet/sheetPr?= =?UTF-8?q?=20and=20=09=20=20/worksheet/sheetPtr/pageSetUpPr=20elements.?= =?UTF-8?q?=202008-11-18=2021:20:28=20+0100=20kendy=20=20r263915=20:=20#i9?= =?UTF-8?q?6320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Fix=20/worksheet/sheetViews/sheetView/selection/@sqre?= =?UTF-8?q?f=20for=20multi-selection.=20When=20multiple=20cells=20are=20se?= =?UTF-8?q?lected,=20//selection/@sqref=20needs=20to=20be=20space=20separa?= =?UTF-8?q?ted=20("A1=20A3=20B2")=20not=20comma-separated=20("A1,A3,B2").?= =?UTF-8?q?=20=09*=20sc/source/filter/excel/xestream.cxx:=20Use=20space=20?= =?UTF-8?q?as=20the=20separator=20=09=20=20character=20between=20ScRanges.?= =?UTF-8?q?=202008-11-18=2021:20:06=20+0100=20kendy=20=20r263914=20:=20#i9?= =?UTF-8?q?6320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/workbook/sheetViews/sheetView/selection.?= =?UTF-8?q?=20=09*=20sc/source/filter/excel/ooxml-export-TODO.txt:=20Flush?= =?UTF-8?q?.=20=09*=20sc/source/filter/inc/xestream.hxx,=20=09=20=20sc/sou?= =?UTF-8?q?rce/filter/excel/xestream.cxx:=20Add=20=09=20=20XclXmlUtils::To?= =?UTF-8?q?OString(XclRangeList).=20=09*=20sc/source/filter/inc/xeview.hxx?= =?UTF-8?q?,=20sc/source/filter/excel/xeview.cxx:=20=09=20=20Generate=20/w?= =?UTF-8?q?orkbook/sheetViews/sheetView/selection.=202008-11-18=2021:19:39?= =?UTF-8?q?=20+0100=20kendy=20=20r263913=20:=20#i96320#=20xlsx=20export=20?= =?UTF-8?q?From:=20Jonathan=20Pryor=20=20*Actually*=20i?= =?UTF-8?q?mplement=20/worksheet/printOptions.=20Previously=20I=20was=20em?= =?UTF-8?q?itting=20/worksheet/printOptions,=20but=20neglected=20to=20actu?= =?UTF-8?q?ally=20emit=20any=20attributes=20for=20that=20element.=20=20Oop?= =?UTF-8?q?s.=20=09*=20sc/source/filter/excel/excdoc.cxx,=20sc/source/filt?= =?UTF-8?q?er/excel/xepage.cxx:=20=09=20=20Use=20the=20new=203-argument=20?= =?UTF-8?q?XclExpBoolRecord=20constructor=20to=20specify=20the=20=09=20=20?= =?UTF-8?q?OOXML=20attribute=20to=20generate=20from=20SaveXml().=20=09*=20?= =?UTF-8?q?sc/source/filter/inc/xerecord.hxx,=20=09=20=20sc/source/filter/?= =?UTF-8?q?excel/xerecord.cxx:=20Add=20a=20`nAttribute'=20parameter=20to?= =?UTF-8?q?=20=09=20=20the=20constructor=20(default=20is=20disabled)=20so?= =?UTF-8?q?=20that=20the=20caller=20can=20specify=20=09=20=20which=20attri?= =?UTF-8?q?bute=20to=20generate=20instead=20of=20having=20a=20horrible=20?= =?UTF-8?q?=09=20=20special-case=20HACK=20in=20XclExpBoolRecord::SaveXml()?= =?UTF-8?q?=20(which=20wasn't=20a=20=09=20=20very=20scalable=20solution;?= =?UTF-8?q?=20this=20is=20much=20better).=20=20This=20isn't=20perfect,=20?= =?UTF-8?q?=09=20=20as=20XclExpBoolRecord::SaveXml()=20still=20has=20some?= =?UTF-8?q?=20special=20logic,=20but=20=09=20=20it's=20better=20than=20it?= =?UTF-8?q?=20was...=202008-11-18=2021:19:17=20+0100=20kendy=20=20r263912?= =?UTF-8?q?=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/worksheet/sheetViews/sheetView?= =?UTF-8?q?/pane.=20Slightly=20more=20complicated=20than=20you'd=20think,?= =?UTF-8?q?=20as=20//pane=20needs=20to=20be=20after=20//dimension=20but=20?= =?UTF-8?q?*before*=20//sheetData,=20and=20previously=20//dimension=20was?= =?UTF-8?q?=20being=20generated=20as=20part=20of=20the=20//sheetData=20pro?= =?UTF-8?q?cessing=20(thus=20making=20it=20difficult=20to=20interrupt=20th?= =?UTF-8?q?e=20generation=20for=20//sheetViews).=20=09*=20sc/source/filter?= =?UTF-8?q?/excel/ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/filte?= =?UTF-8?q?r/inc/excdoc.hxx,=20sc/source/filter/excel/excdoc.cxx:=20=09=20?= =?UTF-8?q?=20Add=20FillAsXmlTable();=20aRecList=20now=20gets=20filled=20e?= =?UTF-8?q?ither=20as=20a=20BINARY=20=09=20=20(FillAsXmlTable)=20or=20"XML?= =?UTF-8?q?"=20(FillAsXmlTable),=20because=20trying=20to=20juggle=20=09=20?= =?UTF-8?q?=20eBiff<=3D=20BIFF5,=20=3D=3DBIFF8,=20and=20GetOutput()!=3DEXC?= =?UTF-8?q?=5FOUTPUT=5FBINARY=20(XML)=20was=20=09=20=20straining=20my=20he?= =?UTF-8?q?ad,=20and=20OOXML=20record=20ordering=20is=20looking=20to=20be?= =?UTF-8?q?=20quite=20=09=20=20different=20from=20BIFF.=20=20"Create"=20a?= =?UTF-8?q?=20EXC=5FID3=5FDIMENSIONS=20record=20so=20that=20=09=20=20//dim?= =?UTF-8?q?ension=20is=20generated=20before=20//sheetViews.=20=09*=20sc/so?= =?UTF-8?q?urce/filter/inc/xerecord.hxx,=20=09=20=20sc/source/filter/excel?= =?UTF-8?q?/xerecord.cxx:=20Add=20XclExpDelegatingRecord.=20=09=20=20This?= =?UTF-8?q?=20is=20needed=20because=20I=20need=20an=20ScfRef=20(to=20insert=20=09=20=20the=20DIMENSION=20record=20into?= =?UTF-8?q?=20the=20correct=20location),=20but=20XclExpDimension=20=09=20?= =?UTF-8?q?=20is=20located=20within=20another=20object=20and=20thus=20can'?= =?UTF-8?q?t=20be=20heap-allocated=20=09=20=20itself=20(at=20least=20not?= =?UTF-8?q?=20w/o=20changing=20how=20it=20works).=20=20Thus=20I=20instead?= =?UTF-8?q?=20=09=20=20create=20an=20XclExpDelegatingRecord=20instance=20w?= =?UTF-8?q?hich=20points=20to=20the=20=09=20=20XclExpDimension=20instance?= =?UTF-8?q?=20I=20care=20about=20w/o=20worrying=20about=20double=20=09=20?= =?UTF-8?q?=20freeing=20or=20`delete`ing=20non-`new`d=20memory...=20=09*?= =?UTF-8?q?=20sc/source/filter/inc/xestream.hxx,=20=09=20=20sc/source/filt?= =?UTF-8?q?er/excel/xestream.cxx:=20Add=20=09=20=20XclXmlUtils::ToOString(?= =?UTF-8?q?XclAddress).=20=09*=20sc/source/filter/inc/xetable.hxx,=20sc/so?= =?UTF-8?q?urce/filter/excel/xetable.cxx:=20=09=20=20Don't=20generate=20//?= =?UTF-8?q?dimension=20from=20XclExpRowBuffer::SaveXml(),=20as=20this=20?= =?UTF-8?q?=09=20=20needs=20to=20be=20done=20earlier;=20add=20XclExpRowBuf?= =?UTF-8?q?fer::GetDimensions(),=20used=20=09=20=20by=20XclExpCellTable::C?= =?UTF-8?q?reateRecord()=20to=20return=20an=20XclExpRecordRef=20to=20=09?= =?UTF-8?q?=20=20the=20already=20existing=20XclExpDimensions=20instance;?= =?UTF-8?q?=20change=20=09=20=20XclExpCellTable::CreateRecord()=20to=20(a)?= =?UTF-8?q?=20make=20it=20non-const,=20and=20(b)=20=09=20=20return=20the?= =?UTF-8?q?=20appropriate=20XclExpDimension=20instance=20for=20the=20=09?= =?UTF-8?q?=20=20EXC=5FID3=5FDIMENSIONS=20record=20type.=20=09*=20sc/sourc?= =?UTF-8?q?e/filter/inc/xeview.hxx,=20sc/source/filter/excel/xeview.cxx:?= =?UTF-8?q?=20=09=20=20Implement=20/worksheet/sheetViews=20and=20=09=20=20?= =?UTF-8?q?/worksheet/sheetViews/sheetView/pane,=20and=20partially=20imple?= =?UTF-8?q?ment=20=09=20=20/worksheet/sheetViews/sheetView.=20=09*=20sc/so?= =?UTF-8?q?urce/filter/xcl97/xcl97rec.cxx:=20Don't=20emit=20the=20=09=20?= =?UTF-8?q?=20/workbook/workbookProtection/@revisionsPassword=20attribute,?= =?UTF-8?q?=20as=20this=20=09=20=20causes=20xmllint=20XSD=20Schema=20valid?= =?UTF-8?q?ation=20to=20fail.=202008-11-18=2021:18:48=20+0100=20kendy=20?= =?UTF-8?q?=20r263911=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20?= =?UTF-8?q?Pryor=20=20Implement=20/worksheet[pageMargin?= =?UTF-8?q?s=20and=20pageSetup=20and=20printOptions].=20Note:=20this=20cha?= =?UTF-8?q?nge=20alters=20the=20ordering=20of=20records=20in=20(binary)=20?= =?UTF-8?q?.xls=20files=20as=20well=20as=20.xlsx=20files.=20=20This=20chan?= =?UTF-8?q?ge=20does=20not=20seem=20to=20cause=20any=20repercussions;=20Ex?= =?UTF-8?q?cel=202007=20and=20Calc=202.4=20still=20open=20generated=20.xls?= =?UTF-8?q?=20files=20w/o=20complaint.=20(The=20records=20were=20reordered?= =?UTF-8?q?=20to=20simplify=20generation=20of=20OOXML,=20as=20otherwise=20?= =?UTF-8?q?we'd=20either=20have=20a=20conditional=20mess=20or=20we'd=20hav?= =?UTF-8?q?e=20code=20duplication.=20=20This=20seems=20to=20work,=20but=20?= =?UTF-8?q?can=20be=20worked=20around=20if=20deemed=20necessary.)=20=09*?= =?UTF-8?q?=20sc/source/filter/excel/ooxml-export-TODO.txt:=20Flush.=20=09?= =?UTF-8?q?*=20sc/source/filter/inc/xepage.hxx,=20sc/source/filter/excel/x?= =?UTF-8?q?epage.cxx:=20=09=20=20Generate=20/worksheet/pageMargins,=20/wor?= =?UTF-8?q?ksheet/pageSetup,=20and=20=09=20=20/worksheet/printOptions=20el?= =?UTF-8?q?ements.=20=09*=20sc/source/filter/inc/xerecord.hxx:=20Add=20Exl?= =?UTF-8?q?ExpValueRecord::SaveXml()=20=09=20=20and=20ExlExpValueRecord?= =?UTF-8?q?::SetAttribute()=20(needed=20to=20generate=20=09=20=20attrib?= =?UTF-8?q?utes=20for=20some=20of=20the=20above=20elements).=202008-11-18?= =?UTF-8?q?=2021:18:26=20+0100=20kendy=20=20r263910=20:=20#i96320#=20xlsx?= =?UTF-8?q?=20export=20From:=20Jonathan=20Pryor=20=20Im?= =?UTF-8?q?plement=20/worksheet/mergeCells/mergeCell.=20=09*=20sc/source/f?= =?UTF-8?q?ilter/excel/ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/?= =?UTF-8?q?filter/inc/xecontent.hxx,=20=09=20=20sc/source/filter/excel/xec?= =?UTF-8?q?ontent.cxx:=20Generate=20=09=20=20/worksheet/mergeCells=20and?= =?UTF-8?q?=20/worksheet/mergeCells/mergeCell=20elements.=202008-11-18=202?= =?UTF-8?q?1:17:58=20+0100=20kendy=20=20r263909=20:=20#i96320#=20xlsx=20ex?= =?UTF-8?q?port=20From:=20Jonathan=20Pryor=20=20Impleme?= =?UTF-8?q?nt=20/worksheet/scenarios,=20//scenario,=20//inputCells.=20"Min?= =?UTF-8?q?or"=20implementation=20difficulty=20(making=20this=20patch=20la?= =?UTF-8?q?rger=20than=20would=20normally=20be=20required):=20Scenarios=20?= =?UTF-8?q?implicitly=20add=20a=20new=20invisible=20worksheet=20(as=20is?= =?UTF-8?q?=20noticable=20if=20you=20look=20at=20the=20Calc=20status=20bar?= =?UTF-8?q?=20after=20clicking=20Tools->Scenarios...->OK;=20status=20goes?= =?UTF-8?q?=20from=20"Sheet=201/3"=20to=20"Sheet=201/4").=20This=20extra?= =?UTF-8?q?=20sheet=20foiled=20my=20(stupid)=20resource=20ID=20mapping=20w?= =?UTF-8?q?hich=20"just=20happened"=20to=20work,=20allowing=20rId1::sheet1?= =?UTF-8?q?=20mappings.=20=20The=20problem=20was=20that=20it=20worked=20on?= =?UTF-8?q?ly=20by=20"luck"=20(and=20I'm=20not=20exporting=20too=20much),?= =?UTF-8?q?=20and=20it=20was=20bound=20to=20break=20at=20some=20point...li?= =?UTF-8?q?ke=20now.=20Consequently=20in=20addition=20to=20exporting=20//s?= =?UTF-8?q?cenarios=20et.=20al,=20this=20also=20adds=20additional=20infras?= =?UTF-8?q?tructure=20to=20deal=20with=20creating=20and=20storing=20Resour?= =?UTF-8?q?ce=20Ids,=20in=20particular=20so=20that=20sheet's=20get=20valid?= =?UTF-8?q?=20resource=20Ids=20and=20Excel=20will=20still=20deign=20to=20o?= =?UTF-8?q?pen=20our=20files=20w/o=20generating=20errors.=20=09*=20sc/sour?= =?UTF-8?q?ce/filter/excel/ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/sou?= =?UTF-8?q?rce/filter/excel/excdoc.cxx:=20Change=20the=20ordering=20of=20?= =?UTF-8?q?=09=20=20ExcEScenarioManager=20&=20FilterManager=20to=20follow?= =?UTF-8?q?=20the=20OOXML=20XSD;=20=09=20=20ExcTable::WriteXml()=20no=20lo?= =?UTF-8?q?nger=20creates=20the=20sheet=20stream=20(this=20is=20=09=20=20d?= =?UTF-8?q?one=20by=20ExcBundlesheet8::SaveXml()),=20so=20lookup=20the=20c?= =?UTF-8?q?orrect=20stream=20=09=20=20to=20use=20instead.=20=09*=20sc/sour?= =?UTF-8?q?ce/filter/excel/xepage.cxx:=20Flush=20comments.=20=09*=20sc/sou?= =?UTF-8?q?rce/filter/excel/xetable.cxx:=20Cleanup.=20=09*=20sc/source/fil?= =?UTF-8?q?ter/inc/xcl97rec.hxx,=20=09=20=20sc/source/filter/xcl97/xcl97re?= =?UTF-8?q?c.cxx:=20Change=20=09=20=20ExcBundlesheet8::WriteXml()=20to=20o?= =?UTF-8?q?pen=20the=20appropriate=20sheet=20output=20=09=20=20stream=20(s?= =?UTF-8?q?o=20that=20we=20can=20get=20a=20valid=20ResourceId=20for=20this?= =?UTF-8?q?=20output=20stream=20=09=20=20to=20use=20in=20//sheet[@r:id]);?= =?UTF-8?q?=20implement=20//scenarios,=20//scenario,=20and=20=09=20=20//in?= =?UTF-8?q?putCells=20for=20scenario=20generation.=20=09*=20sc/source/filt?= =?UTF-8?q?er/inc/xestream.hxx,=20=09=20=20sc/source/filter/excel/xestream?= =?UTF-8?q?.cxx:=20Add=20=09=20=20XclXmlUtils::GetStreamName(),=20XclXmlUt?= =?UTF-8?q?ils::ToOString(ScAddress),=20=09=20=20XclXmlUtils::ToOString(Sc?= =?UTF-8?q?Range),=20=09=20=20XclXmlUtils::ToOString(XclExpString),=20=09?= =?UTF-8?q?=20=20XclExpXmlStream::GetIdForPath(),=20=09=20=20XclExpXmlStre?= =?UTF-8?q?am::GetStreamForPath().=20=20The=20XclXmlUtils=20methods=20are?= =?UTF-8?q?=20=09=20=20helper=20routines=20(code=20cleanup),=20while=20the?= =?UTF-8?q?=20XclExpXmlStream=20methods=20=09=20=20are=20to=20permit=20"re?= =?UTF-8?q?gistration"=20of=20a=20Path=20to=20both=20a=20RelationshipId=20?= =?UTF-8?q?and=20=09=20=20a=20FSHelperPtr=20for=20later=20output.=20=20Thi?= =?UTF-8?q?s=20allows=20e.g.=20=09=20=20ExcBundlesheet8::SaveXml()=20to=20?= =?UTF-8?q?open=20the=20output=20stream,=20and=20have=20=09=20=20ExcTable:?= =?UTF-8?q?:WriteXml()=20grab=20and=20use=20this=20output=20stream=20later?= =?UTF-8?q?.=20=09=20=20Changed=20CreateOutputStream()=20to=20(optionally)?= =?UTF-8?q?=20return=20the=20ResourceId=20=09=20=20as=20an=20output=20para?= =?UTF-8?q?meter.=202008-11-18=2021:17:35=20+0100=20kendy=20=20r263908=20:?= =?UTF-8?q?=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Move=20XML=20character=20escape=20logic=20into?= =?UTF-8?q?=20FastSerializerHelper.=20=09*=20sc/source/filter/excel/xename?= =?UTF-8?q?.cxx,=20sc/source/filter/excel/xepage.cxx,=20=09=20=20sc/source?= =?UTF-8?q?/filter/excel/xecontent.cxx:=20Use=20writeEscaped()=20instead?= =?UTF-8?q?=20of=20=09=20=20write()=20in=20places=20that=20require=20escap?= =?UTF-8?q?ing.=20=09*=20sc/source/filter/inc/xestream.hxx,=20=09=20=20sc/?= =?UTF-8?q?source/filter/excel/xestream.cxx:=20Remove=20XclXmlUtils::Escap?= =?UTF-8?q?e().=202008-11-18=2021:17:10=20+0100=20kendy=20=20r263907=20:?= =?UTF-8?q?=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/worksheet/headerFooter[oddHeader,?= =?UTF-8?q?=20oddFooter].=20Excel=20distinguishes=20between=20left,=20righ?= =?UTF-8?q?t,=20and=20front=20page=20sets,=20while=20Calc=20doesn't=20(at?= =?UTF-8?q?=20least,=20the=20.xls=20output=20doesn't=20make=20that=20disti?= =?UTF-8?q?nction).=20Consequently,=20we=20generate=20"all=20pages=20have?= =?UTF-8?q?=20these=20headers/footers"=20output.=20=09*=20sc/source/filter?= =?UTF-8?q?/excel/ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/filte?= =?UTF-8?q?r/excel/excdoc.cxx:=20Alter=20record=20ordering=20so=20that=20t?= =?UTF-8?q?he=20=09=20=20//headerFooter=20element=20is=20inserted=20into?= =?UTF-8?q?=20the=20correct=20position=20to=20=09=20=20allow=20Excel=20to?= =?UTF-8?q?=20open=20generated=20documents.=20=09*=20sc/source/filter/inc/?= =?UTF-8?q?xepage.hxx,=20sc/source/filter/excel/xepage.cxx:=20=09=20=20Gen?= =?UTF-8?q?erate=20the=20/worksheet/headerFooter,=20=09=20=20/worksheet/he?= =?UTF-8?q?aderFooter/oddHeader,=20and=20=09=20=20/worksheet/headerFooter/?= =?UTF-8?q?evenHeader=20elements.=20=09*=20sc/source/filter/inc/xerecord.h?= =?UTF-8?q?xx,=20=09=20=20sc/source/filter/excel/xerecord.cxx:=20Extend=20?= =?UTF-8?q?the=20=09=20=20XclExpStartXmlElementRecord=20and=20XclExpStartS?= =?UTF-8?q?ingleXmlElementRecord=20=09=20=20types=20to=20accept=20a=20call?= =?UTF-8?q?back=20function=20which=20is=20invoked=20after=20starting=20=09?= =?UTF-8?q?=20=20the=20element.=20=20This=20allows=20us=20to=20~easily=20p?= =?UTF-8?q?rovide=20the=20=09=20=20/worksheet/headerFooter=20attributes=20?= =?UTF-8?q?w/o=20creating=20new=20XclExpRecordBase=20=09=20=20subclasses.?= =?UTF-8?q?=20=09*=20sc/source/filter/inc/xestream.hxx,=20=09=20=20sc/sour?= =?UTF-8?q?ce/filter/excel/xestream.cxx:=20Add=20XclXmlUtils::Escape()=20?= =?UTF-8?q?=09=20=20functions=20which=20perform=20XML=20character=20escapi?= =?UTF-8?q?ng=20(e.g.=20s/=20Implement=20/worksheet/dimen?= =?UTF-8?q?sions.=20=09*=20sc/source/filter/excel/ooxml-export-TODO.txt:?= =?UTF-8?q?=20Flush.=20=09*=20sc/source/filter/excel/xetable.cxx,=20sc/sou?= =?UTF-8?q?rce/filter/inc/xetable.hxx:=20=09=20=20Implement=20/worksheet/d?= =?UTF-8?q?imensions.=202008-11-18=2021:16:21=20+0100=20kendy=20=20r263905?= =?UTF-8?q?=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/worksheet/dataValidations/data?= =?UTF-8?q?Validation[formula1,=20formula2].=20=09*=20sc/source/filter/exc?= =?UTF-8?q?el/ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/filter/ex?= =?UTF-8?q?cel/xecontent.cxx,=20=09=20=20sc/source/filter/inc/xecontent.hx?= =?UTF-8?q?x:=20Implement=20=09=20=20/worksheet/dataValidations,=20=09=20?= =?UTF-8?q?=20/worksheet/dataValidations/dataValidation,=20//formula1,=20/?= =?UTF-8?q?/formula2.=20=09*=20sc/source/filter/inc/xestream.hxx,=20=09=20?= =?UTF-8?q?=20sc/source/filter/excel/xestream.cxx:=20Add=20XESTRING=5FTO?= =?UTF-8?q?=5FPSZ(),=20=09=20=20XclXmlUtils::ToOString(ScRangeList),=20=09?= =?UTF-8?q?=20=20XclXmlUtils::ToOUString(ScDocument&,ScAddress,ScTokenArra?= =?UTF-8?q?y*).=202008-11-18=2021:15:58=20+0100=20kendy=20=20r263904=20:?= =?UTF-8?q?=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/worksheet/conditionalFormatting.?= =?UTF-8?q?=20Note=20that=20Excel=20will=20NOT=20currently=20open=20files?= =?UTF-8?q?=20containing=20this=20element,=20as=20the=20XML=20is=20incompl?= =?UTF-8?q?ete:=20the=20XSD=20requires=20at=20least=20one=20nested=20/work?= =?UTF-8?q?sheet/conditionalFormatting/cfRule=20element,=20which=20we're?= =?UTF-8?q?=20not=20yet=20generating.=20=20We=20do=20properly=20generate?= =?UTF-8?q?=20//conditionalFormatting/@sqref.=20=09*=20sc/source/filter/ex?= =?UTF-8?q?cel/ooxml-export-TODO.txt:=20Flush.=20=09*=20sc/source/filter/e?= =?UTF-8?q?xcel/xecontent.cxx,=20=09=20=20sc/source/filter/inc/xecontent.h?= =?UTF-8?q?xx:=20Generate=20=09=20=20/worksheet/conditionalFormatting.=202?= =?UTF-8?q?008-11-18=2021:15:31=20+0100=20kendy=20=20r263903=20:=20#i96320?= =?UTF-8?q?#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20/worksheet/cols/col;=20unstub=20/worksheet/sh?= =?UTF-8?q?eetData.=20=09*=20sc/source/filter/excel/ooxml-export-TODO.txt:?= =?UTF-8?q?=20Flush.=20=09*=20sc/source/filter/excel/excdoc.cxx:=20Remove?= =?UTF-8?q?=20=20stub,=20as=20=09=20=20//col=20needs=20to=20co?= =?UTF-8?q?me=20=5Fbefore=5F=20//sheetData,=20and=20emitting=20//sheetData?= =?UTF-8?q?=20=09=20=20here=20makes=20that=20impossible=20(and=20keeps=20E?= =?UTF-8?q?xcel=20from=20loading=20our=20files).=20=09*=20sc/source/filter?= =?UTF-8?q?/excel/xetable.cxx,=20sc/source/filter/inc/xetable.hxx:=20=09?= =?UTF-8?q?=20=20Implement=20/worksheet/cols=20(XclExpColinfoBuffer),=20?= =?UTF-8?q?=09=20=20/worksheet/cols/col=20(XclExpColinfo),=20and=20stub=20?= =?UTF-8?q?out=20=09=20=20/worksheet/sheetData=20in=20the=20correct=20posi?= =?UTF-8?q?tion=20to=20appease=20Excel.=202008-11-18=2021:15:06=20+0100=20?= =?UTF-8?q?kendy=20=20r263902=20:=20#i96320#=20xlsx=20export=20From:=20Jon?= =?UTF-8?q?athan=20Pryor=20=20Implement=20/worksheet/co?= =?UTF-8?q?lBreaks,=20/worksheet/rowBreaks,=20and=20/worksheet//brk.=20=09?= =?UTF-8?q?*=20sc/source/filter/excel/ooxml-export-TODO.txt:=20Flush.=20?= =?UTF-8?q?=09*=20sc/source/filter/excel/xepage.cxx,=20sc/source/filter/in?= =?UTF-8?q?c/xepage.hxx:=20=09=20=20Add=20XclExpPageSettings::SaveXml()=20?= =?UTF-8?q?and=20XclExpPageBreaks::SaveXml()=20--=20=09=20=20the=20former?= =?UTF-8?q?=20to=20call=20the=20latter,=20and=20the=20latter=20to=20genera?= =?UTF-8?q?te=20=09=20=20/worksheet/colBreaks,=20/worksheet/rowBreaks,=20a?= =?UTF-8?q?nd=20/worksheet//brk.=202008-11-18=2021:14:44=20+0100=20kendy?= =?UTF-8?q?=20=20r263901=20:=20#i96320#=20xlsx=20export=20From:=20Fridrich?= =?UTF-8?q?=20Strba=20=20disambiguate=202008-11-18=2021?= =?UTF-8?q?:14:19=20+0100=20kendy=20=20r263900=20:=20#i96320#=20xlsx=20exp?= =?UTF-8?q?ort=20From:=20Jonathan=20Pryor=20=20Implemen?= =?UTF-8?q?t=20(more-)=20proper=20/workbook/calcPr=20support.=20=20Cleanup?= =?UTF-8?q?.=20Previously,=20/workbook/calcPr=20was=20generated=20by=20fil?= =?UTF-8?q?ling=20a=20temporary=20XclExpXmlCalculationProperties=20instanc?= =?UTF-8?q?e,=20and=20generating=20the=20//calcPr=20element=20at=20the=20~?= =?UTF-8?q?end=20of=20generation.=20=20This=20was=20not=20ideal,=20as=20it?= =?UTF-8?q?=20involved=20more=20code=20(the=20class=20to=20hold=20the=20in?= =?UTF-8?q?termediate=20values,=20etc.),=20and=20it=20could=20potentially?= =?UTF-8?q?=20place=20the=20//calcPr=20element=20into=20the=20wrong=20posi?= =?UTF-8?q?tion=20(the=20XSD=20requires=20that=20it=20be=20before=20//oleS?= =?UTF-8?q?ize,=20//customWorkbookViews,=20and=20//pivotCaches,=20while=20?= =?UTF-8?q?the=20previous=20approach=20would=20have=20placed=20it=20after?= =?UTF-8?q?=20~everything).=20=09*=20sc/source/filter/excel/excdoc.cxx:=20?= =?UTF-8?q?Follow=20the=20pattern=20of=20=09=20=20//workbookProtection=20a?= =?UTF-8?q?nd=20insert=20the=20//calcPr=20BIFF=20records=20into=20the=20?= =?UTF-8?q?=09=20=20appropriate=20position=20based=20on=20file=20type.=20?= =?UTF-8?q?=20One=20minor=20quirk:=20the=20=09=20=20records=20move=20from?= =?UTF-8?q?=20the=20per-SHEET=20array=20into=20the=20workbook=20array.=20?= =?UTF-8?q?=09*=20sc/source/filter/excel/xestream.cxx,=20=09=20=20sc/sourc?= =?UTF-8?q?e/filter/inc/xestream.hxx:=20Remove=20unnecessary=20code.=20=09?= =?UTF-8?q?*=20sc/source/filter/xcl97/xcl97rec.cxx:=20Directly=20emit=20th?= =?UTF-8?q?e=20attributes=20=09=20=20instead=20of=20filling=20an=20interme?= =?UTF-8?q?diate=20object.=202008-11-18=2021:13:56=20+0100=20kendy=20=20r2?= =?UTF-8?q?63899=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor?= =?UTF-8?q?=20=20Enable=20/workbook/workbookProtection.?= =?UTF-8?q?=20/workbook/workbookProtection=20was=20previously=20disabled?= =?UTF-8?q?=20as=20emitting=20it=20would=20cause=20Excel=20to=20generate?= =?UTF-8?q?=20an=20error=20message.=20=20The=20problem=20has=20been=20reso?= =?UTF-8?q?lved:=20/workbook/workbookProtection=20*must*=20be=20before=20/?= =?UTF-8?q?workbook/bookviews=20(which=20in=20turn=20must=20be=20before=20?= =?UTF-8?q?/workbook/sheets),=20and=20this=20wasn't=20previously=20the=20c?= =?UTF-8?q?ase.=20Placing=20the=20element=20into=20the=20proper=20location?= =?UTF-8?q?=20makes=20Excel=20happy.=20=09*=20sc/source/filter/excel/excdo?= =?UTF-8?q?c.cxx:=20Place=20the=20=09=20=20workbookProtection-related=20BI?= =?UTF-8?q?FF=20records=20into=20the=20correct=20position=20to=20=09=20=20?= =?UTF-8?q?appease=20the=20Excel=20gods.=20=09*=20sc/source/filter/excel/e?= =?UTF-8?q?xcrecds.cxx,=20=09=20=20sc/source/filter/xcl97/xcl97rec.cxx:=20?= =?UTF-8?q?Enable=20output=20of=20the=20various=20=09=20=20/workbook/workb?= =?UTF-8?q?ookProtection=20attributes.=202008-11-18=2021:13:29=20+0100=20k?= =?UTF-8?q?endy=20=20r263898=20:=20#i96320#=20xlsx=20export=20From:=20Jona?= =?UTF-8?q?than=20Pryor=20=20Implement=20/workbook/book?= =?UTF-8?q?views/workbookView.=20=09*=20sc/source/filter/excel/ooxml-expor?= =?UTF-8?q?t-TODO.txt:=20Remove=20implemented=20elements.=20=09*=20sc/sour?= =?UTF-8?q?ce/filter/excel/excdoc.cxx,=20sc/source/filter/excel/excel.cxx,?= =?UTF-8?q?=20=09=20=20sc/source/filter/excel/xlroot.cxx,=20sc/source/filt?= =?UTF-8?q?er/inc/xlroot.hxx,=20=09=20=20sc/source/filter/inc/xlconst.hxx:?= =?UTF-8?q?=20The=20WINDOW1=20record=20needs=20to=20be=20in=20=09=20=20one?= =?UTF-8?q?=20of=20two=20different=20locations,=20depending=20on=20output?= =?UTF-8?q?=20format.=20=20Add=20a=20=09=20=20new=20XclOutput=20enumeratio?= =?UTF-8?q?n=20to=20contain=20the=20output=20format=20(we=20do=20NOT=20=09?= =?UTF-8?q?=20=20want=20to=20reuse=20XclBiff=20for=20this=20purpose,=20as?= =?UTF-8?q?=20otherwise=20XML=20output=20is=20a=20=09=20=20superset=20of?= =?UTF-8?q?=20BIFF8,=20and=20we=20don't=20want=20to=20update=20every=20exi?= =?UTF-8?q?sting=20check=20=09=20=20for=20BIFF8=20to=20check=20for=20both?= =?UTF-8?q?=20BIFF8=20and=20XML),=20and=20check=20for=20this=20flag=20=09?= =?UTF-8?q?=20=20so=20that=20the=20WINDOW1=20record=20is=20created=20in=20?= =?UTF-8?q?the=20appropriate=20place.=20=09*=20sc/source/filter/excel/xest?= =?UTF-8?q?ream.cxx,=20=09=20=20sc/source/filter/inc/xestream.hxx:=20Add?= =?UTF-8?q?=20GetRoot()=20method=20and=20change=20=09=20=20constructor=20t?= =?UTF-8?q?o=20take=20a=20`const=20XclExpRoot&`,=20as=20=09=20=20XclExpWin?= =?UTF-8?q?dow::SaveXml()=20requires=20this=20information.=20=09*=20sc/sou?= =?UTF-8?q?rce/filter/excel/xeview.cxx,=20sc/source/filter/inc/xeview.hxx:?= =?UTF-8?q?=20=09=20=20XclExpWindow1::SaveXml()=20generates=20the=20//work?= =?UTF-8?q?bookView=20element.=20=09*=20sc/source/filter/xcl97/xcl97rec.cx?= =?UTF-8?q?x:=20Cleanup.=202008-11-18=2021:13:04=20+0100=20kendy=20=20r263?= =?UTF-8?q?897=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor?= =?UTF-8?q?=20=20Remove=20SIGILL=20from=20ExcBundleshee?= =?UTF-8?q?t8::SaveXml().=20=09*=20sc/source/filter/excel/xestream.cxx:=20?= =?UTF-8?q?Add=20some=20asserts.=20=09*=20sc/source/filter/xcl97/xcl97rec.?= =?UTF-8?q?cxx:=20Non-POD=20types=20cause=20a=20SIGILL=20=09=20=20when=20p?= =?UTF-8?q?assed=20as=20a=20"..."=20argument=20to=20a=20function.=20=20Doh?= =?UTF-8?q?!=202008-11-18=2021:12:42=20+0100=20kendy=20=20r263896=20:=20#i?= =?UTF-8?q?96320#=20xlsx=20export=20From:=20Fridrich=20Strba=20=20disambiguate=202008-11-18=2021:12:17=20+0100=20kendy?= =?UTF-8?q?=20=20r263895=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan?= =?UTF-8?q?=20Pryor=20=20/workbook/workbookProtection,?= =?UTF-8?q?=20mostly=20cancelled=20during=20rebase.=20This=20isn't=20actua?= =?UTF-8?q?lly=20implemented=20--=20the=20::SaveXml()=20methods=20are=20`#?= =?UTF-8?q?if=200`d=20out=20--=20as=20Excel=20barfs=20when=20this=20elemen?= =?UTF-8?q?t=20+=20attributes=20are=20emitted.=20Funnier,=20even=20=20causes=20Excel=20to=20barf,=20so=20until=20all?= =?UTF-8?q?=20the=20semantics=20are=20worked=20out=20it=20all=20needs=20to?= =?UTF-8?q?=20be=20uncommented=20out.=20What=20is=20useful=20here=20is=20t?= =?UTF-8?q?he=20mapping=20from=20BIFF=20record=20->=20OOXML=20attribute.?= =?UTF-8?q?=20=09*=20sc/source/filter/excel/excdoc.cxx,=20=09=20=20sc/sour?= =?UTF-8?q?ce/filter/excel/excrecds.cxx,=20=09=20=20sc/source/filter/inc/e?= =?UTF-8?q?xcrecds.hxx,=20sc/source/filter/inc/xcl97rec.hxx,=20=09=20=20sc?= =?UTF-8?q?/source/filter/xcl97/xcl97rec.cxx:=20Add=20method=20stubs=20to?= =?UTF-8?q?=20generate=20=09=20=20the=20/workbook/workbookProtection=20ele?= =?UTF-8?q?ment=20&=20attributes.=202008-11-18=2021:11:55=20+0100=20kendy?= =?UTF-8?q?=20=20r263894=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan?= =?UTF-8?q?=20Pryor=20=20Initial=20/workbook/workbookPr?= =?UTF-8?q?=20implementation.=20=09*=20sc/source/filter/excel/ooxml-export?= =?UTF-8?q?-TODO.txt:=20Flush.=20=09*=20sc/source/filter/excel/excdoc.cxx:?= =?UTF-8?q?=20Add=20records=20to=20start/end=20the=20=09=20=20=20element;=20cleanup=20&=20document=20TODOs.=20=09*=20sc/sour?= =?UTF-8?q?ce/filter/inc/excrecds.hxx,=20=09=20=20sc/source/filter/excel/e?= =?UTF-8?q?xcrecds.cxx:=20Declare=20&=20Implement=20=09=20=20Xcl1904::Save?= =?UTF-8?q?Xml().=20=09*=20sc/source/filter/inc/xerecord.hxx,=20=09=20=20s?= =?UTF-8?q?c/source/filter/excel/xerecord.cxx:=20Declare=20and=20implement?= =?UTF-8?q?=20=09=20=20XclExpXmlStartSingleElementRecord,=20XclExpXmlEndSi?= =?UTF-8?q?ngleElementRecord,=20=09=20=20both=20used=20to=20single-style?= =?UTF-8?q?=20XML=20elements=20instead=20of=20the=20"full"=20=09=20=20star?= =?UTF-8?q?t/end=20XML=20created=20by=20XclExpXmlStartElementRecord=20and?= =?UTF-8?q?=20=09=20=20XclExpXmlEndElementRecord,=20and=20add=20XclExpBool?= =?UTF-8?q?Record::SaveXml(),=20=09=20=20which=20generates=20some=20=20attributes.=20=09*=20sc/source/filter/inc/xestream.hx?= =?UTF-8?q?x,=20=09=20=20sc/source/filter/excel/xestream.cxx:=20Declare=20?= =?UTF-8?q?&=20implement=20=09=20=20XclExpXmlStream::WriteCurrentStreamAtt?= =?UTF-8?q?ributes().=202008-11-18=2021:11:30=20+0100=20kendy=20=20r263893?= =?UTF-8?q?=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20(more-)=20proper=20/workbook/sh?= =?UTF-8?q?eets=20support.=20=20Refactor.=20Instead=20of=20hacking=20aroun?= =?UTF-8?q?d=20"limitations"=20in=20NameBuffer=20to=20generate=20/workbook?= =?UTF-8?q?/sheets/sheet=20elements,=20use=20ExcBundlesheet8=20to=20genera?= =?UTF-8?q?te=20the=20/workbook/sheets/sheet=20elements.=20=20This=20also?= =?UTF-8?q?=20allows=20us=20to=20emit=20the=20//sheet/@state=20attribute,?= =?UTF-8?q?=20which=20is=20private=20to=20ExcBundlesheet8.=20In=20order=20?= =?UTF-8?q?to=20generate=20the=20/workbook/sheets=20elements,=20XclExpXmlS?= =?UTF-8?q?tartElementRecord=20and=20XclExpXmlEndElementRecord=20were=20ad?= =?UTF-8?q?ded=20around=20the=20ExcBundlesheet8=20record=20entries,=20so?= =?UTF-8?q?=20that=20the=20existing=20record-based=20infrastructure=20coul?= =?UTF-8?q?d=20automagically=20generate=20the=20structural=20XML=20tags.?= =?UTF-8?q?=20=20These=20records=20do=20nothing=20for=20existing=20BIFF=20?= =?UTF-8?q?output.=20Finally,=20XclExpXmlStream::GetWorkbook()=20has=20bee?= =?UTF-8?q?n=20replaced=20with=20XclExpXmlStream::GetCurrentStream(),=20an?= =?UTF-8?q?d=20PushStream()/PopStream()=20methods=20were=20added.=20=20Thi?= =?UTF-8?q?s=20is=20hoped=20to=20permit=20nesting=20of=20streams,=20and=20?= =?UTF-8?q?is=20currently=20being=20used=20to=20generate=20the=20xl/worksh?= =?UTF-8?q?eets/sheetN.xml=20files=20(to=20no=20effect,=20as=20not=20enoug?= =?UTF-8?q?h=20records=20are=20generate=20XML=20for=20the=20results=20to?= =?UTF-8?q?=20be=20visible).=20=09*=20sc/source/filter/excel/excdoc.cxx:?= =?UTF-8?q?=20Undo=20the=20pTabNames/NameBuffer=20=09=20=20changes,=20as?= =?UTF-8?q?=20we=20no=20longer=20use=20pTabNames=20to=20generate=20//sheet?= =?UTF-8?q?s/;=20add=20=09=20=20records=20to=20emit=20the=20=20el?= =?UTF-8?q?ement;=20place=20the=20sheet=20stream=20on=20top=20=09=20=20of?= =?UTF-8?q?=20the=20XclExpXmlStream=20stack.=20=09*=20sc/source/filter/inc?= =?UTF-8?q?/excrecds.hxx,=20=09=20=20sc/source/filter/excel/excrecds.cxx:?= =?UTF-8?q?=20Save=20the=20tab=20that=20=09=20=20ExcBundlesheetBase=20was?= =?UTF-8?q?=20constructed=20for=20--=20needed=20for=20=20=09=20=20?= =?UTF-8?q?generation=20within=20ExcBundlesheet8.=20=09*=20sc/source/filte?= =?UTF-8?q?r/excel/xecontent.cxx,=20=09=20=20sc/source/filter/excel/xename?= =?UTF-8?q?.cxx,=20sc/source/filter/excel/xepivot.cxx:=20=09=20=20s#GetWor?= =?UTF-8?q?kbook#GetCurrentStream#g;=20don't=20emit=20empty=20collections.?= =?UTF-8?q?=20=09*=20sc/source/filter/inc/xerecord.hxx,=20=09=20=20sc/sour?= =?UTF-8?q?ce/filter/excel/xerecord.cxx:=20Declare=20and=20Implement=20=09?= =?UTF-8?q?=20=20XclExpXmlElementRecord,=20XclExpXmlStartElementRecord,=20?= =?UTF-8?q?=09=20=20XclExpXmlEndElementRecord.=20=09*=20sc/source/filter/i?= =?UTF-8?q?nc/xestream.hxx,=20=09=20=20sc/source/filter/excel/xestream.cxx?= =?UTF-8?q?:=20Add=20stream=20stack=20methods;=20=09=20=20remove=20warning?= =?UTF-8?q?=20about=20unused=20parameter.=20=09*=20sc/source/filter/inc/xc?= =?UTF-8?q?l97rec.hxx,=20=09=20=20sc/source/filter/xcl97/xcl97rec.cxx:=20A?= =?UTF-8?q?dd=20ExcBundlesheet8::SaveXml()=20=09=20=20and=20generate=20/wo?= =?UTF-8?q?rkbook/sheets/sheet=20elements=20from=20it.=202008-11-18=2021:1?= =?UTF-8?q?1:08=20+0100=20kendy=20=20r263892=20:=20#i96320#=20xlsx=20expor?= =?UTF-8?q?t=20From:=20Jonathan=20Pryor=20=20Add=20Calc?= =?UTF-8?q?=20OOXML=20TODO=20list.=20=09*=20sc/source/filter/excel/ooxml-e?= =?UTF-8?q?xport-TODO.txt:=20Added.=20=20I'm=20going=20through=20ECMA-376?= =?UTF-8?q?=20Part=204=20Section=203=20in=20a=20=09=20=20breadth-first=20f?= =?UTF-8?q?ashion=20(i.e.=20top-down),=20and=20implementing=20each=20eleme?= =?UTF-8?q?nt=20=09=20=20as=20I'm=20able.=20=20I'm=20not=20always=20able?= =?UTF-8?q?=20to=20immediately=20implement=20an=20=09=20=20element=20(freq?= =?UTF-8?q?uently=20because=20I=20can't=20find=20the=20equivalent=20binary?= =?UTF-8?q?=20=09=20=20export=20code)=20within=20a=20short=20period=20of?= =?UTF-8?q?=20time,=20so=20any=20such=20elements=20are=20=09=20=20recorded?= =?UTF-8?q?=20here=20for=20later=20passes.=20=09=20=20Just=20because=20an?= =?UTF-8?q?=20element=20isn't=20here=20doesn't=20mean=20it's=20been=20full?= =?UTF-8?q?y=20=09=20=20implemented;=20any=20elements=20with=20associated?= =?UTF-8?q?=20code=20will=20have=20OOXTODO=20=09=20=20comments=20specifyin?= =?UTF-8?q?g=20what's=20missing/needed=20for=20that=20particular=20code.?= =?UTF-8?q?=202008-11-18=2021:10:36=20+0100=20kendy=20=20r263891=20:=20#i9?= =?UTF-8?q?6320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Initial=20/workbook/pivotCaches/pivotCache=20implemen?= =?UTF-8?q?tation.=20=09*=20sc/source/filter/excel/xepivot.cxx,=20=09=20?= =?UTF-8?q?=20sc/source/filter/inc/xepivot.hxx:=20Declare=20and=20implemen?= =?UTF-8?q?t=20*Xml()=20=09=20=20methods=20so=20that=20PivotCaches=20are?= =?UTF-8?q?=20saved=20into=20xl/workbook.xml.=202008-11-18=2021:10:09=20+0?= =?UTF-8?q?100=20kendy=20=20r263890=20:=20#i96320#=20xlsx=20export=20From:?= =?UTF-8?q?=20Jonathan=20Pryor=20=20Initial=20=20implementation.=20=09*=20sc/source/filter/excel/xename.?= =?UTF-8?q?cxx:=20Generate=20.=20=09*=20sc/source/filter/exc?= =?UTF-8?q?el/xestream.cxx:=20Add=20XclXmlUtils::ToPsz(bool).=20=09*=20sc/?= =?UTF-8?q?source/filter/inc/xename.hxx:=20Declare=20=09=20=20XclExpNameMa?= =?UTF-8?q?nager::SaveXml()=20so=20we=20can=20emit=20=20elem?= =?UTF-8?q?ents.=20=09*=20sc/source/filter/inc/xestream.hxx:=20Declare=20X?= =?UTF-8?q?clXmlUtils::ToPsz(bool).=202008-11-18=2021:09:47=20+0100=20kend?= =?UTF-8?q?y=20=20r263889=20:=20#i96320#=20xlsx=20export=20From:=20Jonatha?= =?UTF-8?q?n=20Pryor=20=20Initial=20=20impleme?= =?UTF-8?q?ntation;=20provide=20count,=20uniqueCount=20=20attributes?= =?UTF-8?q?.=20=09*=20sc/source/filter/excel/excdoc.cxx:=20Initial=20/work?= =?UTF-8?q?book/calcPr=20=09=20=20generation=20implementation.=20=09*=20sc?= =?UTF-8?q?/source/filter/excel/xecontent.cxx:=20Provide=20the=20count=20a?= =?UTF-8?q?nd=20=09=20=20uniqueCount=20attributes=20for=20the=20=20e?= =?UTF-8?q?lement.=20=09*=20sc/source/filter/inc/xestream.hxx,=20=09=20=20?= =?UTF-8?q?sc/source/filter/excel/xestream.cxx:=20Provide/implement=20a=20?= =?UTF-8?q?=09=20=20XclExpXmlStream::GetWorkbookCalculationProperties()=20?= =?UTF-8?q?method=20which=20=09=20=20keeps=20track=20of=20data=20used=20by?= =?UTF-8?q?=20excdoc.cxx=20for=20=20generation.=20=09*=20sc/sourc?= =?UTF-8?q?e/filter/inc/xcl97rec.hxx,=20=09=20=20sc/source/filter/xcl97/xc?= =?UTF-8?q?l97rec.cxx:=20Override=20SaveXml()=20for=20select=20=09=20=20ty?= =?UTF-8?q?pes=20to=20cache=20the=20information=20needed=20to=20write=20.=202008-11-18=2021:09:22=20+0100=20kendy=20=20r263888?= =?UTF-8?q?=20:=20#i96320#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Simplify=20addRelation/openOutputStream=20u?= =?UTF-8?q?se=20within=20sc.=20=09*=20sc/source/filter/excel/excdoc.cxx,?= =?UTF-8?q?=20=09=20=20sc/source/filter/excel/xecontent.cxx:=20Use=20Creat?= =?UTF-8?q?eOutputStream()=20to=20=09=20=20create=20sub-streams.=20=09*=20?= =?UTF-8?q?sc/source/filter/excel/xestream.cxx:=20Implement=20CreateOutput?= =?UTF-8?q?Stream();=20=09=20=20use=20CreateOutputStream()=20to=20create?= =?UTF-8?q?=20xl/workbook.xml.=20=09*=20sc/source/filter/inc/xestream.hxx:?= =?UTF-8?q?=20Add=20CreateOutputStream()=20methods=20=09=20=20which=20merg?= =?UTF-8?q?e=20addRelation()=20w/=20openOutputStreamWithSerializer().=2020?= =?UTF-8?q?08-11-18=2021:08:59=20+0100=20kendy=20=20r263887=20:=20#i96320#?= =?UTF-8?q?=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Allow=20Excel=20to=20open=20an=20empty=20spreadsheet.=20?= =?UTF-8?q?=09*=20sc/source/filter/excel/excdoc.cxx:=20Use=20proper=20shee?= =?UTF-8?q?t=20names=20in=20the=20=09=20=20relations=20file=20so=20that=20?= =?UTF-8?q?correct=20relative=20paths=20are=20present=20within=20the=20=09?= =?UTF-8?q?=20=20.rels=20file;=20Use=20the=20correct=20content=20type=20wh?= =?UTF-8?q?en=20creating=20sheetN.xml;=20=09=20=20Insert=20a=20=20element=20into=20the=20worksheet.xml=20files;=20insert=20?= =?UTF-8?q?=09=20=20the=20sheetN.xml=20relational=20data=20into=20the=20co?= =?UTF-8?q?rrect=20.rels=20file.=20=09*=20sc/source/filter/excel/xestream.?= =?UTF-8?q?cxx:=20Use=20the=20correct=20content=20type=20=09=20=20when=20c?= =?UTF-8?q?reating=20xl/workbook.xml.=202008-11-18=2021:08:28=20+0100=20ke?= =?UTF-8?q?ndy=20=20r263886=20:=20#i96320#=20xlsx=20export=20From:=20Jonat?= =?UTF-8?q?han=20Pryor=20=20More=20Excel=20export=20cle?= =?UTF-8?q?anup.=20=09*=20sc/source/filter/excel/excdoc.cxx:=20Use=20addRe?= =?UTF-8?q?lation(XOutputStream...)=20=09=20=20so=20that=20the=20added=20r?= =?UTF-8?q?elation=20is=20(hopefully)=20inserted=20into=20the=20=09=20=20a?= =?UTF-8?q?ppropriate=20xl/=5Frels/workbook.xml.rels=20file;=20extra=20tra?= =?UTF-8?q?cing.=20=09*=20sc/source/filter/excel/xecontent.cxx:=20Cleanup/?= =?UTF-8?q?simplification.=20=09*=20sc/source/filter/excel/xestream.cxx,?= =?UTF-8?q?=20=09=20=20sc/source/filter/inc/xestream.hxx:=20Add=20more=20T?= =?UTF-8?q?oOString()=20and=20=09=20=20ToOUString()=20helper=20methods.=20?= =?UTF-8?q?2008-11-18=2021:08:06=20+0100=20kendy=20=20r263885=20:=20#i9632?= =?UTF-8?q?0#=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Current=20work-in-progress=20for=20minimal=20Excel=20sup?= =?UTF-8?q?port.=20=09*=20sc/source/filter/excel/excdoc.cxx:=20Implement?= =?UTF-8?q?=20ExcTable::WriteXml()=20to=20=09=20=20write=20xl/worksheets/s?= =?UTF-8?q?heetN.xml=20or=20the=20workbook.xml=20=20=09=20=20elem?= =?UTF-8?q?ents,=20depending=20on=20whether=20we're=20the=20header=20or=20?= =?UTF-8?q?not.=20=20Implement=20=09=20=20ExcDocument::WriteXml()=20to=20s?= =?UTF-8?q?tub=20out=20xl/workbook.xml.=20=09*=20sc/source/filter/excel/xe?= =?UTF-8?q?content.cxx:=20Use=20the=20XML=20Ids=20instead=20of=20=09=20=20?= =?UTF-8?q?strings=20to=20speed=20up=20XML=20creation.=20=09*=20sc/source/?= =?UTF-8?q?filter/excel/xestream.cxx:=20Add=20XclXmlUtils::To*String()=20?= =?UTF-8?q?=09=20=20helpers=20to=20simplify=20XML=20writing;=20open=20the?= =?UTF-8?q?=20xl/workbook.xml=20file=20so=20=09=20=20that=20it=20can=20be?= =?UTF-8?q?=20written=20to=20from=20multiple=20locations.=20=09*=20sc/sour?= =?UTF-8?q?ce/filter/inc/xestream.hxx:=20Add=20XclXmlUtils=20class=20to=20?= =?UTF-8?q?hold=20=09=20=20various=20To*String()=20helpers;=20add=20XclExp?= =?UTF-8?q?XmlStream::GetWorkbook().=202008-11-18=2021:07:41=20+0100=20ken?= =?UTF-8?q?dy=20=20r263884=20:=20#i96320#=20xlsx=20export=20From:=20Jonath?= =?UTF-8?q?an=20Pryor=20=20Generate=20a=20correct=20sha?= =?UTF-8?q?red=20string=20table.=20=09*=20sc/source/filter/excel/xecontent?= =?UTF-8?q?.cxx:=20Write=20proper=20shared=20string=20=09=20=20table=20ent?= =?UTF-8?q?ries.=20=09*=20sc/source/filter/inc/xestream.hxx:=20Include=20=20so=20we=20=09=20=20can=20easily=20use=20Xml?= =?UTF-8?q?FilterBase::openOutputStreamWithSerializer().=202008-11-18=2021?= =?UTF-8?q?:07:18=20+0100=20kendy=20=20r263883=20:=20#i96320#=20xlsx=20exp?= =?UTF-8?q?ort=20From:=20Jonathan=20Pryor=20=20Write=20?= =?UTF-8?q?an=20actual=20ZIP=20package=20for=20.xlsx=20output,=20including?= =?UTF-8?q?=20a=20(stubbed)=20shared=20=20string=20table.=20=20=20=20=20*?= =?UTF-8?q?=20sc/prj/build.lst:=20We=20now=20depend=20on=20oox=20to=20buil?= =?UTF-8?q?d.=20=20=20=20=20*=20sc/source/filter/inc/xestream.hxx,=20sc/so?= =?UTF-8?q?urce/filter/excel/xestream.cxx:=20=20=20=20=20=20=20XclExpXmlSt?= =?UTF-8?q?ream=20how=20inherits=20from=20XmlFilterBase,=20which=20produce?= =?UTF-8?q?s=20ZIP=20=20=20=20=20=20=20package=20files.=20=20This=20allows?= =?UTF-8?q?=20increased=20code=20sharing.=20=20=20=20=20*=20sc/source/filt?= =?UTF-8?q?er/excel/excdoc.cxx:=20Update=20XclExpXmlStream=20construction.?= =?UTF-8?q?=20=20=20=20=20*=20sc/source/filter/excel/excel.cxx:=20Don't=20?= =?UTF-8?q?create=20a=20SotStorage()=20instance=20=20=20=20=20=20=20over?= =?UTF-8?q?=20pMedStrm=20(this=20makes=20ZipStorage=20very=20angry);=20don?= =?UTF-8?q?'t=20call=20=20=20=20=20=20=20lcl=5FExportExcelBiff(),=20as=20w?= =?UTF-8?q?e=20want=20to=20preserve=20our=20generated=20file.=20=20=20=20?= =?UTF-8?q?=20*=20sc/source/filter/excel/xecontent.cxx:=20Write=20out=20th?= =?UTF-8?q?e=20XML=20forr=20the=20shared=20=20=20=20=20=20=20string=20tabl?= =?UTF-8?q?e=20(incomplete,=20as=20I=20need=20to=20find=20an=20easier/more?= =?UTF-8?q?=20elegant=20way=20=20=20=20=20=20=20of=20inserting=20strings?= =?UTF-8?q?=20into=20the=20XML,=20but=20it'll=20need=20updating=20anyway?= =?UTF-8?q?=20=20to=20=20=20=20=20=20=20use=20the=20FastSaxSerializer).=20?= =?UTF-8?q?=20=20=20=20*=20sc/util/makefile.mk:=20Link=20against=20$(OOXLI?= =?UTF-8?q?B)=20and=20$(FASTSAXLIB)=20as=20well.=202008-11-18=2021:06:54?= =?UTF-8?q?=20+0100=20kendy=20=20r263882=20:=20#i96320#=20xlsx=20export=20?= =?UTF-8?q?From:=20Jonathan=20Pryor=20=20Trace=20output?= =?UTF-8?q?=20for=20the=20shared=20string=20table.=20This=20is=20step=20fo?= =?UTF-8?q?rward=20as=20we're=20hooking=20into=20the=20new=20XclExpRecordB?= =?UTF-8?q?ase::SaveXml()=20to=20invoke=20the=20string=20table=20SaveXml()?= =?UTF-8?q?=20routine.=20=20It's=20still=20largely=20proof-of-concept,=20b?= =?UTF-8?q?ut=20we=20can=20actually=20invoke=20the=20appropriate=20code=20?= =?UTF-8?q?now.=20=09*=20oox/workben/ooxml-export-notes.txt:=20Flush.=20?= =?UTF-8?q?=09*=20sc/source/filter/inc/exp=5Fop.hxx,=20sc/source/filter/ex?= =?UTF-8?q?cel/expop2.cxx:=20=09=20=20Add=20and=20implement=20the=20new=20?= =?UTF-8?q?ExportXml2007=20type.=20=09*=20sc/source/filter/excel/excdoc.cx?= =?UTF-8?q?x,=20sc/source/filter/excel/excel.cxx,=20=09=20=20sc/source/fil?= =?UTF-8?q?ter/excel/xecontent.cxx,=20=09=20=20sc/source/filter/excel/xepi?= =?UTF-8?q?vot.cxx,=20=09=20=20sc/source/filter/excel/xerecord.cxx,=20=09?= =?UTF-8?q?=20=20sc/source/filter/excel/xestream.cxx,=20sc/source/filter/i?= =?UTF-8?q?nc/excdoc.hxx,=20=09=20=20sc/source/filter/inc/xecontent.hxx,?= =?UTF-8?q?=20sc/source/filter/inc/xepivot.hxx,=20=09=20=20sc/source/filte?= =?UTF-8?q?r/inc/xerecord.hxx,=20sc/source/filter/inc/xestream.hxx,=20=09?= =?UTF-8?q?=20=20sc/source/filter/inc/xestring.hxx:=20Implement=20enough?= =?UTF-8?q?=20glue=20to=20allow=20=09=20=20XclExpSstImpl::SaveXml()=20to?= =?UTF-8?q?=20be=20invoked=20from=20the=20XML=20export=20context=20=09=20?= =?UTF-8?q?=20and=20print=20useful=20information=20to=20the=20screen.=2020?= =?UTF-8?q?08-11-18=2021:06:28=20+0100=20kendy=20=20r263881=20:=20#i96320#?= =?UTF-8?q?=20xlsx=20export=20From:=20Jonathan=20Pryor=20=20Implement=20support=20for=20writing=20.xlsx=20files.=20The?= =?UTF-8?q?=20.xlsx=20file=20written=20is=20still=20a=20BIFF8=20(.xls)=20f?= =?UTF-8?q?ile,=20but=20a=20file=20is=20now=20written=20instead=20of=20gen?= =?UTF-8?q?erating=20an=20error=20message.=20=09*=20sc/inc/filter.hxx:=20C?= =?UTF-8?q?hange=20the=20prototype=20of=20ScExportExcel5=20so=20that=20we?= =?UTF-8?q?=20=09=09can=20specify=20Excel=202007=20XML=20(Exp2007Xml)=20as?= =?UTF-8?q?=20a=20file=20format.=20=09*=20sc/source/filter/excel/excel.cxx?= =?UTF-8?q?:=20Refactor=20ScExportExcel5()=20so=20that=20=09=09Exp2007Xml?= =?UTF-8?q?=20is=20a=20supported=20format,=20and=20stub=20out=20Exp2007Xml?= =?UTF-8?q?=20support=20so=20=09=09that=20BIFF8=20output=20is=20currently?= =?UTF-8?q?=20generated.=20=09*=20sc/source/ui/docshell/docsh.cxx:=20Add?= =?UTF-8?q?=20support=20for=20the=20"MS=20Excel=202007=20=09=09XML"=20filt?= =?UTF-8?q?er=20and=20the=20new=20ScExportExcel5()=20semantics.=202008-11-?= =?UTF-8?q?18=2021:06:03=20+0100=20kendy=20=20r263880=20:=20#i96320#=20xls?= =?UTF-8?q?x=20export=20From:=20Jonathan=20Pryor=20=20M?= =?UTF-8?q?ake=20the=20filter=20names=20consistent=20with=20other=20filter?= =?UTF-8?q?s=20used=20in=20sc/.../docsh.cxx.=20=09*=20filter/source/config?= =?UTF-8?q?/fragments/filters/calc=5FMS=5FExcel=5F2007=5FBinary.xcu,=20=09?= =?UTF-8?q?=20=20filter/source/config/fragments/filters/calc=5FMS=5FExcel?= =?UTF-8?q?=5F2007=5FBinary=5Fui.xcu,=20=09=20=20filter/source/config/frag?= =?UTF-8?q?ments/filters/calc=5FMS=5FExcel=5F2007=5FXML.xcu,=20=09=20=20fi?= =?UTF-8?q?lter/source/config/fragments/filters/calc=5FMS=5FExcel=5F2007?= =?UTF-8?q?=5FXML=5FTemplate.xcu,=20=09=20=20filter/source/config/fragment?= =?UTF-8?q?s/filters/calc=5FMS=5FExcel=5F2007=5FXML=5FTemplate=5Fui.xcu,?= =?UTF-8?q?=20=09=20=20filter/source/config/fragments/filters/calc=5FMS=5F?= =?UTF-8?q?Excel=5F2007=5FXML=5Fui.xcu,=20=09=20=20filter/source/config/fr?= =?UTF-8?q?agments/types/MS=5FExcel=5F2007=5FBinary.xcu,=20=09=20=20filter?= =?UTF-8?q?/source/config/fragments/types/MS=5FExcel=5F2007=5FXML.xcu,=20?= =?UTF-8?q?=09=20=20filter/source/config/fragments/types/MS=5FExcel=5F2007?= =?UTF-8?q?=5FXML=5FTemplate.xcu:=20=09=20=20Remove=20'Calc=20'=20from=20t?= =?UTF-8?q?he=20filter=20names=20(as=20none=20of=20the=20other=20filters?= =?UTF-8?q?=20=09=20=20mentioned=20in=20sc/source/ui/docshell.cxx=20use=20?= =?UTF-8?q?that=20convention),=20and=20=09=20=20remove=203RDPARTYFILTER=20?= =?UTF-8?q?from=20the=20filter's=20Flags=20property,=20as=20this=20flag=20?= =?UTF-8?q?=09=20=20causes=20objstor.cxx=20to=20use=20ExportTo()=20instead?= =?UTF-8?q?=20of=20ConvertTo(),=20and=20the=20=09=20=20existing=20Calc->Ex?= =?UTF-8?q?port=20logic=20is=20all=20within=20ConvertTo().=202008-11-18=20?= =?UTF-8?q?21:05:41=20+0100=20kendy=20=20r263879=20:=20#i96320#=20xlsx=20e?= =?UTF-8?q?xport=20From:=20Radek=20Doulik=20=20Initial=20?= =?UTF-8?q?work=20on=20ooxml=20export=20(xlsx)=20=09*=20filter/source/conf?= =?UTF-8?q?ig/fragments/filters/calc=5FMS=5FExcel=5F2007=5FXML.xcu:=20=09d?= =?UTF-8?q?itto=20=09*=20filter/source/config/fragments/types/MS=5FExcel?= =?UTF-8?q?=5F2007=5FXML.xcu:=20=09reverse=20extensions=20order=20so=20tha?= =?UTF-8?q?t=20xlsx=20is=20shown=20in=20Save=20dialog=20as=20=09default=20?= =?UTF-8?q?2008-11-18=2020:53:43=20+0100=20kendy=20=20r263877=20:=20#i9631?= =?UTF-8?q?6#=20OPC=20for=20export=20filters=20From:=20Jan=20Holesovsky=20?= =?UTF-8?q?=20Deliver=20tablestylelist.hxx=20so=20that=20we?= =?UTF-8?q?=20can=20use=20xmlfilterbase.hxx.=20And=20also=20just=20do=20fo?= =?UTF-8?q?rward=20declaration=20of=20TableStyle=20instead=20of=20includin?= =?UTF-8?q?g=20the=20header=20-=20it=20includes=20too=20much=20in=20that?= =?UTF-8?q?=20case.=202008-11-18=2020:53:21=20+0100=20kendy=20=20r263876?= =?UTF-8?q?=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Jonath?= =?UTF-8?q?an=20Pryor=20=20Fix=20build=20break.=20=09*?= =?UTF-8?q?=20source/ppt/pptimport.cxx:=20getServiceFactory()=20was=20rena?= =?UTF-8?q?med=20to=20=09=20=20getGlobalFactory().=202008-11-18=2020:52:49?= =?UTF-8?q?=20+0100=20kendy=20=20r263875=20:=20#i96316#=20OPC=20for=20expo?= =?UTF-8?q?rt=20filters=20From:=20Jan=20Holesovsky=20=20Add?= =?UTF-8?q?=20some=20namespaces=20so=20that=20sax=20builds=20again.=202008?= =?UTF-8?q?-11-18=2020:52:27=20+0100=20kendy=20=20r263874=20:=20#i96316#?= =?UTF-8?q?=20OPC=20for=20export=20filters=20From:=20Jonathan=20Pryor=20=20Cleanup=20in=20sax=20(wrt.=20escaping=20att?= =?UTF-8?q?ribute=20values).=20FastSaxSerializer::writeFastAttributeList()?= =?UTF-8?q?=20didn't=20properly=20escape=20attribute=20values,=20which=20b?= =?UTF-8?q?roke=20number=20format=20export=20if=20the=20number=20format=20?= =?UTF-8?q?included=20e.g.=20'"'=20(double=20quote),=20e.g.:=20=20=20=20?= =?UTF-8?q?=20[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00;""=20which=20shows?= =?UTF-8?q?=20numbers=20with=20a=20currency=20type,=20negative=20numbers?= =?UTF-8?q?=20in=20red,=20and=200=20values=20as=20the=20empty=20string.=20?= =?UTF-8?q?=09*=20sc/source/filter/excel/ooxml-export-TODO.txt:=20Flush.?= =?UTF-8?q?=20=09*=20sax/source/fastparser/fshelper.cxx,=20=09=20=20sax/so?= =?UTF-8?q?urce/fastparser/fastserializer.hxx,=20=09=20=20sax/source/fastp?= =?UTF-8?q?arser/fastserializer.cxx:=20Move=20fshelper.cxx's=20=09=20=20lc?= =?UTF-8?q?l=5FEscape()=20to=20FastSaxSerializer::escapeXml(),=20and=20use?= =?UTF-8?q?=20escapeXml()=20=09=20=20when=20writing=20attribute=20values.?= =?UTF-8?q?=202008-11-18=2020:51:59=20+0100=20kendy=20=20r263873=20:=20#i9?= =?UTF-8?q?6316#=20OPC=20for=20export=20filters=20From:=20Jan=20Holesovsky?= =?UTF-8?q?=20=20Make=20a=20bit=20more=20obvious=20what's?= =?UTF-8?q?=20happenning=20with=20AttributeLists.=202008-11-18=2020:51:37?= =?UTF-8?q?=20+0100=20kendy=20=20r263872=20:=20#i96316#=20OPC=20for=20expo?= =?UTF-8?q?rt=20filters=20From:=20Fridrich=20Strba=20?= =?UTF-8?q?=20a=20from-scratch-build=20reveals=20some=20missed=20changes?= =?UTF-8?q?=20in=20include=20files=20:(=202008-11-18=2020:51:11=20+0100=20?= =?UTF-8?q?kendy=20=20r263871=20:=20#i96316#=20OPC=20for=20export=20filter?= =?UTF-8?q?s=20From:=20Fridrich=20Strba=20=20deliver=20?= =?UTF-8?q?the=20header=20too=202008-11-18=2020:50:48=20+0100=20kendy=20?= =?UTF-8?q?=20r263870=20:=20#i96316#=20OPC=20for=20export=20filters=20From?= =?UTF-8?q?:=20Fridrich=20Strba=20=20public=20visibilit?= =?UTF-8?q?y=20of=20FastAttributeList=20class=20+=20some=20more=20convenie?= =?UTF-8?q?nce=20functions=20in=20fshelper=202008-11-18=2020:50:26=20+0100?= =?UTF-8?q?=20kendy=20=20r263869=20:=20#i96316#=20OPC=20for=20export=20fil?= =?UTF-8?q?ters=20From:=20Jonathan=20Pryor=20=20Add=20/?= =?UTF-8?q?Relationships/Relationship/@TargetMode=20support.=20This=20also?= =?UTF-8?q?=20fixes=20Calc=20hyperlink=20export,=20allowing=20Excel=20to?= =?UTF-8?q?=20properly=20read=20documents=20containing=20a=20hyperlink.=20?= =?UTF-8?q?=09*=20oox/inc/oox/core/xmlfilterbase.hxx,=20oox/source/core/xm?= =?UTF-8?q?lfilterbase.cxx:=20=09=20=20Add=20a=20rTargetMode=20parameter?= =?UTF-8?q?=20to=20XmlFilterBase::addRelation().=202008-11-18=2020:50:04?= =?UTF-8?q?=20+0100=20kendy=20=20r263868=20:=20#i96316#=20OPC=20for=20expo?= =?UTF-8?q?rt=20filters=20From:=20Fridrich=20Strba=20?= =?UTF-8?q?=20add=20string.h=202008-11-18=2020:49:42=20+0100=20kendy=20=20?= =?UTF-8?q?r263867=20:=20#i96316#=20OPC=20for=20export=20filters=20From:?= =?UTF-8?q?=20Jan=20Holesovsky=20=20Explicitely=20default?= =?UTF-8?q?=20construct=20maMarkStack=20[to=20be=20safe=20;-)].=202008-11-?= =?UTF-8?q?18=2020:49:13=20+0100=20kendy=20=20r263866=20:=20#i96316#=20OPC?= =?UTF-8?q?=20for=20export=20filters=20From:=20Jan=20Holesovsky=20=20Rename=20writeMarked()=20to=20mergeTopMarks()=20and?= =?UTF-8?q?=20improve=20the=20implementation.=20Just=20writing=20the=20top?= =?UTF-8?q?=20mark=20is=20not=20enough;=20in=20more=20complex=20scenarios?= =?UTF-8?q?=20it=20would=20destroy=20the=20order=20completely.=20=20This?= =?UTF-8?q?=20way=20we=20have=20better=20control=20over=20what's=20happeni?= =?UTF-8?q?ng,=20and=20can=20nest=20the=20mark()/mergeTopMarks()/mergeTopM?= =?UTF-8?q?arks(=20true=20)=20as=20necessary=20directly=20in=20the=20start?= =?UTF-8?q?/end=20tags.=202008-11-18=2020:48:51=20+0100=20kendy=20=20r2638?= =?UTF-8?q?65=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Jan?= =?UTF-8?q?=20Holesovsky=20=20Add=20mark()=20and=20writeMar?= =?UTF-8?q?ked()=20methods.=20These=20are=20to=20be=20able=20to=20change?= =?UTF-8?q?=20the=20order=20of=20the=20data=20being=20written.=20If=20you?= =?UTF-8?q?=20need=20to=20write=20eg.=20=20=20p,=20r,=20rPr,=20[something]?= =?UTF-8?q?,=20/rPr,=20t,=20[text],=20/r,=20/p,=20but=20get=20it=20in=20or?= =?UTF-8?q?der=20=20=20p,=20r,=20t,=20[text],=20/t,=20rPr,=20[something],?= =?UTF-8?q?=20/rPr,=20/r,=20/p,=20simply=20do=20=20=20p,=20r,=20mark(),=20?= =?UTF-8?q?t,=20[text],=20/t,=20mark(),=20rPr,=20[something],=20/rPr,=20?= =?UTF-8?q?=20=20writeMarked(),=20writeMarked(),=20/r,=20/p=20and=20you=20?= =?UTF-8?q?are=20done.=202008-11-18=2020:48:24=20+0100=20kendy=20=20r26386?= =?UTF-8?q?4=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Jonat?= =?UTF-8?q?han=20Pryor=20=20Move=20XML=20character=20es?= =?UTF-8?q?cape=20logic=20into=20FastSerializerHelper.=20=09*=20sax/inc/sa?= =?UTF-8?q?x/fshelper.hxx,=20sax/source/fastparser/fshelper.cxx:=20Add=20?= =?UTF-8?q?=09=20=20and=20implement=20FastSerializerHelper::writeEscaped()?= =?UTF-8?q?,=20which=20escapes=20=09=20=20any=20XML=20characters=20within?= =?UTF-8?q?=20the=20string=20before=20writing.=202008-11-18=2020:48:02=20+?= =?UTF-8?q?0100=20kendy=20=20r263863=20:=20#i96316#=20OPC=20for=20export?= =?UTF-8?q?=20filters=20From:=20Jonathan=20Pryor=20=20I?= =?UTF-8?q?ntroduce=20writeId().=20=09*=20sax/inc/sax/fshelper.hxx=20sax/s?= =?UTF-8?q?ource/fastparser/fastserializer.cxx,=20=09=20=20sax/source/fast?= =?UTF-8?q?parser/fastserializer.hxx,=20=09=20=20sax/source/fastparser/fsh?= =?UTF-8?q?elper.cxx:=20Add/implement=20=09=20=20FastSerializerHelper::wri?= =?UTF-8?q?teId(),=20which=20does=20the=20"usual"=20=09=20=20sal=5FInt32->?= =?UTF-8?q?string=20conversion=20but=20manually,=20outside=20of=20any=20au?= =?UTF-8?q?tomatic=20=09=20=20context.=20=20This=20is=20done=20so=20that?= =?UTF-8?q?=20=09=20=20XclExpXmlStream::WriteCurrentStreamAttributes()=20c?= =?UTF-8?q?an=20write=20element=20=09=20=20attributes=20"piecemeal"/on-dem?= =?UTF-8?q?and,=20without=20needing=20to=20store=20the=20=09=20=20relevant?= =?UTF-8?q?=20information=20into=20a=20separate=20object=20to=20generate?= =?UTF-8?q?=20all=20the=20=09=20=20attributes=20at=20once.=202008-11-18=20?= =?UTF-8?q?20:47:36=20+0100=20kendy=20=20r263862=20:=20#i96316#=20OPC=20fo?= =?UTF-8?q?r=20export=20filters=20From:=20Jonathan=20Pryor=20=20Change=20the=20semantics=20of=20startElement()=20and?= =?UTF-8?q?=20singleElement().=20=09*=20sax/source/fastparser/fshelper.cxx?= =?UTF-8?q?:=20Change=20the=20semantics=20of=20=09=20=20startElement()=20a?= =?UTF-8?q?nd=20singleElement(),=20so=20that=20attributes=20with=20values?= =?UTF-8?q?=20=09=20=20that=20are=20NULL=20are=20=5Fskipped=5F,=20instead?= =?UTF-8?q?=20of=20ending=20all=20attributes.=20=20This=20=09=20=20allows?= =?UTF-8?q?=20us=20to=20have=20"optional"=20attributes,=20in=20which=20the?= =?UTF-8?q?=20attribute=20=09=20=20won't=20be=20generated=20if=20the=20val?= =?UTF-8?q?ue=20is=20null.=20=20This=20is=20needed=20so=20that=20the=20=09?= =?UTF-8?q?=20=20//definedName/@localSheetId=20attribute=20is=20only=20emi?= =?UTF-8?q?tted=20for=20non-global=20=09=20=20sheet-specific=20names.=2020?= =?UTF-8?q?08-11-18=2020:47:14=20+0100=20kendy=20=20r263861=20:=20#i96316#?= =?UTF-8?q?=20OPC=20for=20export=20filters=20From:=20Radek=20Doulik=20=20call=20our=20pptx=20export=20filter=20from=20oo?= =?UTF-8?q?x/pptimport=20when=20needed=20(yup,=20it=20is=20not=20only=20im?= =?UTF-8?q?port=20filter=20from=20now=20;-)=202008-11-18=2020:46:51=20+010?= =?UTF-8?q?0=20kendy=20=20r263860=20:=20#i96316#=20OPC=20for=20export=20fi?= =?UTF-8?q?lters=20From:=20Jan=20Holesovsky=20=20How=20to?= =?UTF-8?q?=20install=20the=20stuff.=202008-11-18=2020:46:29=20+0100=20ken?= =?UTF-8?q?dy=20=20r263859=20:=20#i96316#=20OPC=20for=20export=20filters?= =?UTF-8?q?=20From:=20Jan=20Holesovsky=20=20Change=20'core:?= =?UTF-8?q?:addRelation'=20to=20'static=20addRelation=5Fimpl'.=20To=20be?= =?UTF-8?q?=20better=20readable,=20and=20no=20symbol=20for=20that.=202008-?= =?UTF-8?q?11-18=2020:46:04=20+0100=20kendy=20=20r263858=20:=20#i96316#=20?= =?UTF-8?q?OPC=20for=20export=20filters=20From:=20Radek=20Doulik=20=20generate=20document=20wide=20unique=20Id's=202008-?= =?UTF-8?q?11-18=2020:45:40=20+0100=20kendy=20=20r263857=20:=20#i96316#=20?= =?UTF-8?q?OPC=20for=20export=20filters=20From:=20Radek=20Doulik=20=20added=20standalone=3D"yes"=20to=20xml=20document?= =?UTF-8?q?=20beginning=20=20removed=20unneccessary=20::rtl::=20prefix=20i?= =?UTF-8?q?n=20one=20case=202008-11-18=2020:45:18=20+0100=20kendy=20=20r26?= =?UTF-8?q?3856=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Ra?= =?UTF-8?q?dek=20Doulik=20=20added=20FSHelperPtr=20here?= =?UTF-8?q?=20as=20well=202008-11-18=2020:44:56=20+0100=20kendy=20=20r2638?= =?UTF-8?q?55=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Rade?= =?UTF-8?q?k=20Doulik=20=20call=20commit=20on=20StorageBa?= =?UTF-8?q?se=20substorages=20rather=20than=20only=20on=20XStorage=20of=20?= =?UTF-8?q?these=20substorages=20so=20that=20the=20commit=20propagates=20r?= =?UTF-8?q?ecursively=20to=20all=20substorages=202008-11-18=2020:44:34=20+?= =?UTF-8?q?0100=20kendy=20=20r263854=20:=20#i96316#=20OPC=20for=20export?= =?UTF-8?q?=20filters=20From:=20Jonathan=20Pryor=20=20I?= =?UTF-8?q?mplement=20getOutputStream(),=20some=20cleanup.=20=09*=20sax/in?= =?UTF-8?q?c/sax/fshelper.hxx:=20Add=20a=20getOutputStream()=20method=20so?= =?UTF-8?q?=20that=20=09=20=20excdoc.cxx=20can=20easily=20use=20the=20addR?= =?UTF-8?q?elation(XOutputStream,=20...)=20method.=20=09*=20sax/source/fas?= =?UTF-8?q?tparser/fastserializer.cxx:=20Code=20refactor=20to=20remove=20?= =?UTF-8?q?=09=20=20useless=20string=20duplication=20--=20=09=20=20Sequenc?= =?UTF-8?q?e(ToString(s).getStr(),=20ToString(s).getLength())=20=3D?= =?UTF-8?q?=3D=20bad.=20=09*=20sax/source/fastparser/fastserializer.hxx:?= =?UTF-8?q?=20Add=20getOutputStream()=20(for=20=09=20=20use=20in=20fshelpe?= =?UTF-8?q?r.cxx);=20cleanupl.=20=09*=20sax/source/fastparser/fshelper.cxx?= =?UTF-8?q?:=20Implement=20getOutputStream().=202008-11-18=2020:44:12=20+0?= =?UTF-8?q?100=20kendy=20=20r263853=20:=20#i96316#=20OPC=20for=20export=20?= =?UTF-8?q?filters=20From:=20Jonathan=20Pryor=20=20Add?= =?UTF-8?q?=20write()=20methods=20to=20write=20inside=20elements.=20=09*?= =?UTF-8?q?=20sax/inc/sax/fshelper.hxx:=20Add=20write()=20methods=20to=20w?= =?UTF-8?q?rite=20content=20to=20the=20=09=20=20string=20inside=20of=20ele?= =?UTF-8?q?ments.=20=09*=20sax/source/fastparser/fshelper.cxx:=20Implement?= =?UTF-8?q?=20write()=20methods.=202008-11-18=2020:43:50=20+0100=20kendy?= =?UTF-8?q?=20=20r263852=20:=20#i96316#=20OPC=20for=20export=20filters=20F?= =?UTF-8?q?rom:=20Fridrich=20Strba=20=20making=20single?= =?UTF-8?q?UnknownElement=20and=20singleFastElement=20be=20a=20uno=20metho?= =?UTF-8?q?d=202008-11-18=2020:43:27=20+0100=20kendy=20=20r263851=20:=20#i?= =?UTF-8?q?96316#=20OPC=20for=20export=20filters=20From:=20Radek=20Doulik?= =?UTF-8?q?=20=20added=20NS=20versions=20of=20fast=20meth?= =?UTF-8?q?ods=202008-11-18=2020:43:05=20+0100=20kendy=20=20r263850=20:=20?= =?UTF-8?q?#i96316#=20OPC=20for=20export=20filters=20From:=20Radek=20Douli?= =?UTF-8?q?k=20=20support=20namespaces=20in=20attribute?= =?UTF-8?q?=20names=20as=20well=202008-11-18=2020:42:44=20+0100=20kendy=20?= =?UTF-8?q?=20r263849=20:=20#i96316#=20OPC=20for=20export=20filters=20From?= =?UTF-8?q?:=20Radek=20Doulik=20=20fix=20content=20types?= =?UTF-8?q?=20writting=20after=20it=20got=20broken=20somewhere=20between?= =?UTF-8?q?=20m4=20and=20m19=20when=20Version=20was=20added=20to=20propert?= =?UTF-8?q?ies=20between=20MediaType=20and=20FullPath=202008-11-18=2020:42?= =?UTF-8?q?:21=20+0100=20kendy=20=20r263848=20:=20#i96316#=20OPC=20for=20e?= =?UTF-8?q?xport=20filters=20From:=20Radek=20Doulik=20=20?= =?UTF-8?q?fixed=20FastAttributeList::getUnknownAttributes=20where=20a=20s?= =?UTF-8?q?td::for=5Feach=20wasn't=20working=20properly=20(because=20of=20?= =?UTF-8?q?++=20in=20bind)=202008-11-18=2020:41:55=20+0100=20kendy=20=20r2?= =?UTF-8?q?63847=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20R?= =?UTF-8?q?adek=20Doulik=20=20fix=20attributes=20list=20a?= =?UTF-8?q?nd=20its=20reference=20creation=20so=20that=20the=20instance=20?= =?UTF-8?q?can=20be=20freed=20in=20Reference::release=202008-11-18=2020:41?= =?UTF-8?q?:33=20+0100=20kendy=20=20r263846=20:=20#i96316#=20OPC=20for=20e?= =?UTF-8?q?xport=20filters=20From:=20Radek=20Doulik=20=20?= =?UTF-8?q?export=20tokens=20=20added=20xmlns=20to=20tokens=202008-11-18?= =?UTF-8?q?=2020:41:08=20+0100=20kendy=20=20r263845=20:=20#i96316#=20OPC?= =?UTF-8?q?=20for=20export=20filters=20From:=20Radek=20Doulik=20=20instantiate=20token=20handler=20=20support=20xml=20na?= =?UTF-8?q?mespaces=202008-11-18=2020:40:45=20+0100=20kendy=20=20r263844?= =?UTF-8?q?=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Radek?= =?UTF-8?q?=20Doulik=20=20added=20method=20to=20XmlFilter?= =?UTF-8?q?Base=20which=20opens=20stream=20with=20media=20type=20and=20ret?= =?UTF-8?q?urns=20newly=20created=20fast=20serializer=20shared=20ptr=20200?= =?UTF-8?q?8-11-18=2020:40:23=20+0100=20kendy=20=20r263843=20:=20#i96316#?= =?UTF-8?q?=20OPC=20for=20export=20filters=20From:=20Jonathan=20Pryor=20=20=20=20=20=20*=20oox/workben/ooxml-export-no?= =?UTF-8?q?tes.txt:=20Flush.=202008-11-18=2020:40:01=20+0100=20kendy=20=20?= =?UTF-8?q?r263842=20:=20#i96316#=20OPC=20for=20export=20filters=20From:?= =?UTF-8?q?=20Fridrich=20Strba=20=20beefing=20up=20the?= =?UTF-8?q?=20fshelper=202008-11-18=2020:39:40=20+0100=20kendy=20=20r26384?= =?UTF-8?q?1=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Radek?= =?UTF-8?q?=20Doulik=20=20export=20ChartConverterClass=20?= =?UTF-8?q?-=20it=20is=20now=20needed=20in=20XmlFilterBase=202008-11-18=20?= =?UTF-8?q?20:39:17=20+0100=20kendy=20=20r263840=20:=20#i96316#=20OPC=20fo?= =?UTF-8?q?r=20export=20filters=20From:=20Jan=20Holesovsky=20=20fastsax.uno.so=20was=20renamed=20to=20libfastsaxlx.so=2020?= =?UTF-8?q?08-11-18=2020:38:54=20+0100=20kendy=20=20r263839=20:=20#i96316#?= =?UTF-8?q?=20OPC=20for=20export=20filters=20From:=20Fridrich=20Strba=20=20trying=20to=20do=20some=20useful=20stuff=20?= =?UTF-8?q?with=20the=20serializer=202008-11-18=2020:38:26=20+0100=20kendy?= =?UTF-8?q?=20=20r263838=20:=20#i96316#=20OPC=20for=20export=20filters=20F?= =?UTF-8?q?rom:=20Radek=20Doulik=20=20use=20relation=20id?= =?UTF-8?q?=20names=20similar=20to=20ms=20office=202008-11-18=2020:38:03?= =?UTF-8?q?=20+0100=20kendy=20=20r263837=20:=20#i96316#=20OPC=20for=20expo?= =?UTF-8?q?rt=20filters=20From:=20Radek=20Doulik=20=20fix?= =?UTF-8?q?ed=20typo=20in=20namespace=20url=202008-11-18=2020:37:38=20+010?= =?UTF-8?q?0=20kendy=20=20r263836=20:=20#i96316#=20OPC=20for=20export=20fi?= =?UTF-8?q?lters=20From:=20Radek=20Doulik=20=20added=202?= =?UTF-8?q?=20new=20methods=20to=20XmlFilterBase=20for=20adding=20relation?= =?UTF-8?q?s=20to=20base=20storage=20and=20to=20output=20streams=202008-11?= =?UTF-8?q?-18=2020:37:15=20+0100=20kendy=20=20r263835=20:=20#i96316#=20OP?= =?UTF-8?q?C=20for=20export=20filters=20From:=20Radek=20Doulik=20=20let=20writable=20stream=20handle=20relation=20id's?= =?UTF-8?q?=20=20new=20id=20can=20be=20queried=20by=20asking=20for=20prope?= =?UTF-8?q?rty=20"RelId"=20=20fixed=20another=20issue=20with=20writing=20r?= =?UTF-8?q?elations=20of=20writable=20stream=20-=20the=20same=20one=20I=20?= =?UTF-8?q?fixed=20lately=20for=20storages=20-=20looks=20like=20another=20?= =?UTF-8?q?cut'n'pasted=20code=20:(=202008-11-18=2020:36:48=20+0100=20kend?= =?UTF-8?q?y=20=20r263834=20:=20#i96316#=20OPC=20for=20export=20filters=20?= =?UTF-8?q?From:=20Fridrich=20Strba=20=20trying=20to=20?= =?UTF-8?q?avoid=20char*=20->=20OUString=20and=20back=20conversions=202008?= =?UTF-8?q?-11-18=2020:36:26=20+0100=20kendy=20=20r263833=20:=20#i96316#?= =?UTF-8?q?=20OPC=20for=20export=20filters=20From:=20Radek=20Doulik=20=20added=20commit=20methods=20to=20StorageBase=20a?= =?UTF-8?q?nd=20FilterBase=20to=20make=20things=20easier=202008-11-18=2020?= =?UTF-8?q?:35:58=20+0100=20kendy=20=20r263832=20:=20#i96316#=20OPC=20for?= =?UTF-8?q?=20export=20filters=20From:=20Radek=20Doulik=20=20added=20new=20openOutputStream=20method=20to=20XmlFilterBas?= =?UTF-8?q?e=20to=20open=20output=20stream=20of=20given=20mediat=20type=20?= =?UTF-8?q?(which=20is=20then=20saved=20to=20[Content=5FTypes.xml]=20=20up?= =?UTF-8?q?dated=20pptx=20export=20filter=202008-11-18=2020:35:36=20+0100?= =?UTF-8?q?=20kendy=20=20r263831=20:=20#i96316#=20OPC=20for=20export=20fil?= =?UTF-8?q?ters=20From:=20Fridrich=20Strba=20=20some=20?= =?UTF-8?q?casts=20to=20make=20compiler=20happy=202008-11-18=2020:35:13=20?= =?UTF-8?q?+0100=20kendy=20=20r263830=20:=20#i96316#=20OPC=20for=20export?= =?UTF-8?q?=20filters=20From:=20Fridrich=20Strba=20=20t?= =?UTF-8?q?rying=20to=20make=20the=20fast=20serializer=20a=20bit=20less=20?= =?UTF-8?q?bloated=202008-11-18=2020:34:51=20+0100=20kendy=20=20r263829=20?= =?UTF-8?q?:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Radek=20D?= =?UTF-8?q?oulik=20=20do=20not=20get=20out=20of=20bounds?= =?UTF-8?q?=20of=20sequence=20=20do=20not=20overwrite=20the=20id=20tag=202?= =?UTF-8?q?008-11-18=2020:34:29=20+0100=20kendy=20=20r263828=20:=20#i96316?= =?UTF-8?q?#=20OPC=20for=20export=20filters=20From:=20Jonathan=20Pryor=20=20Notes=20for=20trace=20output=20for=20the?= =?UTF-8?q?=20shared=20string=20table.=20=09*=20oox/workben/ooxml-export-n?= =?UTF-8?q?otes.txt:=20Flush.=202008-11-18=2020:34:07=20+0100=20kendy=20?= =?UTF-8?q?=20r263827=20:=20#i96316#=20OPC=20for=20export=20filters=20From?= =?UTF-8?q?:=20Radek=20Doulik=20=20added=20ifdefs=20to=20?= =?UTF-8?q?fshelper.hxx=20to=20avoid=20problems=20when=20including=20more?= =?UTF-8?q?=20than=20once=20=20fixed=20the=20constructor=20namespace=20=20?= =?UTF-8?q?added=20export.map=20and=20made=20FastSerializerHelper=20class?= =?UTF-8?q?=20global=202008-11-18=2020:33:44=20+0100=20kendy=20=20r263826?= =?UTF-8?q?=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Radek?= =?UTF-8?q?=20Doulik=20=20defined=20OOXLIB=20and=20FASTSA?= =?UTF-8?q?XLIB=20variables=20to=20be=20used=20in=20makefiles=202008-11-18?= =?UTF-8?q?=2020:33:18=20+0100=20kendy=20=20r263825=20:=20#i96316#=20OPC?= =?UTF-8?q?=20for=20export=20filters=20From:=20Radek=20Doulik=20=20added=20constructor=20and=20added=20fshelper.obj=20to?= =?UTF-8?q?=20the=20makefile.mk=202008-11-18=2020:32:56=20+0100=20kendy=20?= =?UTF-8?q?=20r263824=20:=20#i96316#=20OPC=20for=20export=20filters=20From?= =?UTF-8?q?:=20Radek=20Doulik=20=20added=20fast=20seriali?= =?UTF-8?q?zer=20helper=20files=20(not=20implemented=20yet)=20=20make=20th?= =?UTF-8?q?e=20fastsax=20a=20shared=20library=20(fastsax.uno.so=20-->=20li?= =?UTF-8?q?bfastsaxlx.so)=20=20deliver=20the=20fast=20serializer=20header?= =?UTF-8?q?=202008-11-18=2020:32:34=20+0100=20kendy=20=20r263823=20:=20#i9?= =?UTF-8?q?6316#=20OPC=20for=20export=20filters=20From:=20Radek=20Doulik?= =?UTF-8?q?=20=20add=20fast=20serializer=20to=20the=20uno?= =?UTF-8?q?=20component=202008-11-18=2020:32:12=20+0100=20kendy=20=20r2638?= =?UTF-8?q?22=20:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Rade?= =?UTF-8?q?k=20Doulik=20=20moved=20uno=20service=20and=20?= =?UTF-8?q?implementation=20names=20to=20headers=202008-11-18=2020:31:46?= =?UTF-8?q?=20+0100=20kendy=20=20r263821=20:=20#i96316#=20OPC=20for=20expo?= =?UTF-8?q?rt=20filters=20From:=20Radek=20Doulik=20=20spl?= =?UTF-8?q?it=20fastparser.cxx=20to=20fastparser.hxx=20with=20class=20decl?= =?UTF-8?q?aration,=20fastparser.cxx=20with=20implementation=20and=20facre?= =?UTF-8?q?g.cxx=20with=20uno=20component=20implementation=202008-11-18=20?= =?UTF-8?q?20:31:19=20+0100=20kendy=20=20r263820=20:=20#i96316#=20OPC=20fo?= =?UTF-8?q?r=20export=20filters=20From:=20Radek=20Doulik=20=20export=20storage=20base=20class,=20=20remove=20old=20proof?= =?UTF-8?q?=20code=20from=20xml=20filter=20base=202008-11-18=2020:30:57=20?= =?UTF-8?q?+0100=20kendy=20=20r263819=20:=20#i96316#=20OPC=20for=20export?= =?UTF-8?q?=20filters=20From:=20Radek=20Doulik=20=20expor?= =?UTF-8?q?ted=20filter=20base=20and=20zipstorage=20to=20be=20used=20in=20?= =?UTF-8?q?other=20module's=20filters=202008-11-18=2020:30:35=20+0100=20ke?= =?UTF-8?q?ndy=20=20r263818=20:=20#i96316#=20OPC=20for=20export=20filters?= =?UTF-8?q?=20From:=20Fridrich=20Strba=20=20make=20the?= =?UTF-8?q?=20FastSerializer=20as=20UNO=20service=202008-11-18=2020:30:13?= =?UTF-8?q?=20+0100=20kendy=20=20r263817=20:=20#i96316#=20OPC=20for=20expo?= =?UTF-8?q?rt=20filters=20From:=20Fridrich=20Strba=20?= =?UTF-8?q?=20write=20out=20the=20attributes=20too=202008-11-18=2020:29:51?= =?UTF-8?q?=20+0100=20kendy=20=20r263816=20:=20#i96316#=20OPC=20for=20expo?= =?UTF-8?q?rt=20filters=20From:=20Fridrich=20Strba=20?= =?UTF-8?q?=20some=20more=20changes=20to=20the=20fastserializer=20Original?= =?UTF-8?q?ly=20this=20also=20duplicated=20the=20offapi=20changes=20in=20u?= =?UTF-8?q?noxml;=20but=20the=20unoxml=20files=20were=20removed=20recently?= =?UTF-8?q?=20;-)=202008-11-18=2020:29:24=20+0100=20kendy=20=20r263815=20:?= =?UTF-8?q?=20#i96316#=20OPC=20for=20export=20filters=20From:=20Fridrich?= =?UTF-8?q?=20Strba=20=20move=20the=20fastserializer=20?= =?UTF-8?q?from=20oox=20module=20to=20sax=20module=202008-11-18=2020:29:01?= =?UTF-8?q?=20+0100=20kendy=20=20r263814=20:=20#i96316#=20OPC=20for=20expo?= =?UTF-8?q?rt=20filters=20From:=20Fridrich=20Strba=20?= =?UTF-8?q?=20Adding=20a=20method=20to=20XFastAttributeList,=20in=20order?= =?UTF-8?q?=20to=20get=20the=20fast=20attributes=20along=20with=20unknown?= =?UTF-8?q?=20ones=202008-11-18=2020:28:38=20+0100=20kendy=20=20r263813=20?= =?UTF-8?q?:=20#i96316#=20OPC=20for=20export=20filters=20From:=20Fridrich?= =?UTF-8?q?=20Strba=20=20refactor=20the=20serializer=20?= =?UTF-8?q?2008-11-18=2020:28:16=20+0100=20kendy=20=20r263812=20:=20#i9575?= =?UTF-8?q?9#=20docx/xlsx/pptx=20export=20filters=20From:=20Fridrich=20Str?= =?UTF-8?q?ba=20=20stuffing=20the=20serializer=20a=20bi?= =?UTF-8?q?t=20more=202008-11-18=2020:25:31=20+0100=20kendy=20=20r263811?= =?UTF-8?q?=20:=20#i95759#=20docx/xlsx/pptx=20export=20filters=20From:=20J?= =?UTF-8?q?an=20Holesovsky=20=20More=20explicit=20pointers?= =?UTF-8?q?=20to=20the=20export=20code.=202008-11-18=2020:25:04=20+0100=20?= =?UTF-8?q?kendy=20=20r263810=20:=20#i95759#=20docx/xlsx/pptx=20export=20f?= =?UTF-8?q?ilters=20From:=20Fridrich=20Strba=20=20addin?= =?UTF-8?q?g=20and=20removing=20files=20up=20and=20down=202008-11-18=2020:?= =?UTF-8?q?24:42=20+0100=20kendy=20=20r263809=20:=20#i95759#=20docx/xlsx/p?= =?UTF-8?q?ptx=20export=20filters=20From:=20Fridrich=20Strba=20=20adding=20fastserializer=20dummy=20inplementation=202?= =?UTF-8?q?008-11-18=2020:24:19=20+0100=20kendy=20=20r263808=20:=20#i95759?= =?UTF-8?q?#=20docx/xlsx/pptx=20export=20filters=20From:=20Jan=20Holesovsk?= =?UTF-8?q?y=20=20Escher=20pointers.=202008-11-18=2020:23:5?= =?UTF-8?q?6=20+0100=20kendy=20=20r263807=20:=20#i95759#=20docx/xlsx/pptx?= =?UTF-8?q?=20export=20filters=20From:=20Fridrich=20Strba=20=20removing=20the=20unnecessary=20FastSerializer=20service?= =?UTF-8?q?=202008-11-18=2020:23:34=20+0100=20kendy=20=20r263806=20:=20#i9?= =?UTF-8?q?5759#=20docx/xlsx/pptx=20export=20filters=20From:=20Radek=20Dou?= =?UTF-8?q?lik=20=20XStream=20instead=20of=20XOutputStrea?= =?UTF-8?q?m=20for=20OOXML=20export=20filter.=202008-04-25=20=20Radek=20Do?= =?UTF-8?q?ulik=20=20=20=09*=20oox/workben/ooxml-export-n?= =?UTF-8?q?otes.txt:=20added=20odp=20export=20trace=20=09*=20oox/source/co?= =?UTF-8?q?re/xmlfilterbase.cxx=20(implCreateStorage):=20added=20=09test?= =?UTF-8?q?=20code=20to=20create=20test=20storage=20and=20stream,=20also?= =?UTF-8?q?=20committing=20=09changes=20here=20=09*=20oox/inc/oox/helper/o?= =?UTF-8?q?lestorage.*=20(class=20OleStorage):=20as=20below=20=09*=20oox/i?= =?UTF-8?q?nc/oox/helper/zipstorage.*:=20as=20below=20=09*=20oox/inc/oox/h?= =?UTF-8?q?elper/storagebase.*=20(class=20StorageBase):=20let=20=09export?= =?UTF-8?q?=20constructor=20use=20XStream=20instead=20of=20XOutputStream,?= =?UTF-8?q?=20change=20=09member=20type=20as=20well=20=09*=20oox/inc/oox/c?= =?UTF-8?q?ore/xmlfilterbase.*=20(class=20XmlFilterBase):=20as=20=09below?= =?UTF-8?q?=20=09*=20oox/inc/oox/core/binaryfilterbase.*=20(class=20Binary?= =?UTF-8?q?FilterBase):=20=09as=20below=20=09*=20oox/inc/oox/core/filterba?= =?UTF-8?q?se.*:=20changed=20=09implCreateStorage=20method=20to=20get=20XS?= =?UTF-8?q?tream=20instead=20of=20XOutputStream=20=09*=20sfx2/source/doc/o?= =?UTF-8?q?bjstor.cxx=20(ExportTo):=20added=20StreamForOutput=20=09XStream?= =?UTF-8?q?=20to=20media=20descriptor=20properties=20for=20OOXML=20export?= =?UTF-8?q?=20filter=20=09*=20comphelper/source/misc/mediadescriptor.cxx?= =?UTF-8?q?=20=09(PROP=5FSTREAMFOROUTPUT):=20added=20StreamForOutput=20pro?= =?UTF-8?q?perty=20=09*=20oox/source/helper/zipstorage.cxx=20(ZipStorage):?= =?UTF-8?q?=20open=20storage=20with=20=09OFOPXMLFormat=20=09*=20oox/source?= =?UTF-8?q?/helper/zipstorage.cxx=20(implOpenSubStorage):=20added=20=09imp?= =?UTF-8?q?lementation=20for=20export=20=09*=20oox/source/core/filterbase.?= =?UTF-8?q?cxx=20(setMediaDescriptor):=20add=20input=20=09stream=20only=20?= =?UTF-8?q?on=20import=202008-11-18=2020:23:07=20+0100=20kendy=20=20r26380?= =?UTF-8?q?5=20:=20#i95759#=20docx/xlsx/pptx=20export=20filters=20From:=20?= =?UTF-8?q?Fridrich=20Strba=20=20add=20FastSerializer?= =?UTF-8?q?=20Service=202008-11-18=2020:22:45=20+0100=20kendy=20=20r263804?= =?UTF-8?q?=20:=20#i95759#=20docx/xlsx/pptx=20export=20filters=20From:=20F?= =?UTF-8?q?ridrich=20Strba=20=20add=20FastSerializer=20?= =?UTF-8?q?service=202008-11-18=2020:22:23=20+0100=20kendy=20=20r263803=20?= =?UTF-8?q?:=20#i95759#=20docx/xlsx/pptx=20export=20filters=20From:=20Frid?= =?UTF-8?q?rich=20Strba=20=20adapting=20the=20makefile.?= =?UTF-8?q?mk=20to=20build=20the=20XFastSerializer=202008-11-18=2020:22:02?= =?UTF-8?q?=20+0100=20kendy=20=20r263802=20:=20#i95759#=20docx/xlsx/pptx?= =?UTF-8?q?=20export=20filters=20From:=20Fridrich=20Strba=20=20Adding=20the=20XFastSerializer=20interface=202008-11-18?= =?UTF-8?q?=2020:21:39=20+0100=20kendy=20=20r263801=20:=20#i95759#=20docx/?= =?UTF-8?q?xlsx/pptx=20export=20filters=20From:=20Jan=20Holesovsky=20=20Added=20pointers=20to=20export=20code=20of=20binar?= =?UTF-8?q?y=20filters.=202008-11-18=2020:21:13=20+0100=20kendy=20=20r2638?= =?UTF-8?q?00=20:=20#i95759#=20docx/xlsx/pptx=20export=20filters=20From:?= =?UTF-8?q?=20Jan=20Holesovsky=20=20Implementation=20notes:?= =?UTF-8?q?=20affected=20modules.=20[Started=20the=20implementation=20note?= =?UTF-8?q?s=20by=20asking=20Fridrich=20;-)]=202008-11-18=2020:20:51=20+01?= =?UTF-8?q?00=20kendy=20=20r263799=20:=20#i95759#=20docx/xlsx/pptx=20expor?= =?UTF-8?q?t=20filters=20From:=20Radek=20Doulik=20=20Init?= =?UTF-8?q?ial=20work=20on=20ooxml=20export=20=09*=20oox/source/helper/zip?= =?UTF-8?q?storage.cxx=20(implOpenOutputStream):=20added=20=09prototype=20?= =?UTF-8?q?implementation=20=09(ZipStorage):=20this=20constructor=20needs?= =?UTF-8?q?=20to=20be=20implemented=20(on=20output=20stream)?= --- comphelper/inc/comphelper/mediadescriptor.hxx | 1 + comphelper/source/misc/mediadescriptor.cxx | 6 + comphelper/source/xml/ofopxmlhelper.cxx | 2 +- .../fastparser => inc/sax}/fastattribs.hxx | 18 +- sax/inc/sax/fshelper.hxx | 115 ++++++ sax/prj/build.lst | 1 - sax/prj/d.lst | 2 + sax/source/fastparser/facreg.cxx | 106 +++++ sax/source/fastparser/fastparser.cxx | 218 +--------- sax/source/fastparser/fastparser.hxx | 163 ++++++++ sax/source/fastparser/makefile.mk | 6 +- .../{fastparser => tools}/fastattribs.cxx | 61 ++- sax/source/tools/fastserializer.cxx | 388 ++++++++++++++++++ sax/source/tools/fastserializer.hxx | 147 +++++++ sax/source/tools/fshelper.cxx | 195 +++++++++ sax/source/tools/makefile.mk | 27 +- tools/inc/tools/rtti.hxx | 7 + 17 files changed, 1216 insertions(+), 247 deletions(-) rename sax/{source/fastparser => inc/sax}/fastattribs.hxx (81%) create mode 100644 sax/inc/sax/fshelper.hxx create mode 100644 sax/source/fastparser/facreg.cxx create mode 100644 sax/source/fastparser/fastparser.hxx rename sax/source/{fastparser => tools}/fastattribs.cxx (77%) create mode 100644 sax/source/tools/fastserializer.cxx create mode 100644 sax/source/tools/fastserializer.hxx create mode 100644 sax/source/tools/fshelper.cxx diff --git a/comphelper/inc/comphelper/mediadescriptor.hxx b/comphelper/inc/comphelper/mediadescriptor.hxx index 05d5d59bc102..f1a05de9de5a 100644 --- a/comphelper/inc/comphelper/mediadescriptor.hxx +++ b/comphelper/inc/comphelper/mediadescriptor.hxx @@ -107,6 +107,7 @@ class COMPHELPER_DLLPUBLIC MediaDescriptor : public SequenceAsHashMap static const ::rtl::OUString& PROP_SILENT(); static const ::rtl::OUString& PROP_STATUSINDICATOR(); static const ::rtl::OUString& PROP_STREAM(); + static const ::rtl::OUString& PROP_STREAMFOROUTPUT(); static const ::rtl::OUString& PROP_TEMPLATENAME(); static const ::rtl::OUString& PROP_TEMPLATEREGIONNAME(); static const ::rtl::OUString& PROP_TITLE(); diff --git a/comphelper/source/misc/mediadescriptor.cxx b/comphelper/source/misc/mediadescriptor.cxx index c033b664de86..fe2a5a3801fe 100644 --- a/comphelper/source/misc/mediadescriptor.cxx +++ b/comphelper/source/misc/mediadescriptor.cxx @@ -297,6 +297,12 @@ const ::rtl::OUString& MediaDescriptor::PROP_STREAM() return sProp; } +const ::rtl::OUString& MediaDescriptor::PROP_STREAMFOROUTPUT() +{ + static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("StreamForOutput")); + return sProp; +} + const ::rtl::OUString& MediaDescriptor::PROP_TEMPLATENAME() { static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("TemplateName")); diff --git a/comphelper/source/xml/ofopxmlhelper.cxx b/comphelper/source/xml/ofopxmlhelper.cxx index 4b9dc3db631e..ed13fa2207f9 100644 --- a/comphelper/source/xml/ofopxmlhelper.cxx +++ b/comphelper/source/xml/ofopxmlhelper.cxx @@ -108,7 +108,7 @@ void SAL_CALL OFOPXMLHelper::WriteRelationsInfoSequence( const uno::Reference< i pRootAttrList->AddAttribute( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "xmlns" ) ), aCDATAString, - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "http://schemas.openxmlformats.org/package/2006/relationsships" ) ) ); + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "http://schemas.openxmlformats.org/package/2006/relationships" ) ) ); xWriterHandler->startDocument(); xWriterHandler->startElement( aRelListElement, xRootAttrList ); diff --git a/sax/source/fastparser/fastattribs.hxx b/sax/inc/sax/fastattribs.hxx similarity index 81% rename from sax/source/fastparser/fastattribs.hxx rename to sax/inc/sax/fastattribs.hxx index 15c8d6920f07..e7c42c55bafd 100644 --- a/sax/source/fastparser/fastattribs.hxx +++ b/sax/inc/sax/fastattribs.hxx @@ -34,8 +34,10 @@ #include #include #include +#include #include +#include "sax/dllapi.h" #include #include @@ -43,12 +45,23 @@ namespace sax_fastparser { -struct UnknownAttribute; +struct UnknownAttribute +{ + ::rtl::OUString maNamespaceURL; + ::rtl::OString maName; + ::rtl::OString maValue; + + UnknownAttribute( const ::rtl::OUString& rNamespaceURL, const ::rtl::OString& rName, const ::rtl::OString& rValue ); + + UnknownAttribute( const ::rtl::OString& rName, const ::rtl::OString& rValue ); + + void FillAttribute( ::com::sun::star::xml::Attribute* pAttrib ) const; +}; typedef std::map< sal_Int32, ::rtl::OString > FastAttributeMap; typedef std::vector< UnknownAttribute > UnknownAttributeList; -class FastAttributeList : public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XFastAttributeList > +class SAX_DLLPUBLIC FastAttributeList : public ::cppu::WeakImplHelper1< ::com::sun::star::xml::sax::XFastAttributeList > { public: FastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >& xTokenHandler ); @@ -66,6 +79,7 @@ public: virtual ::rtl::OUString SAL_CALL getValue( ::sal_Int32 Token ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); virtual ::rtl::OUString SAL_CALL getOptionalValue( ::sal_Int32 Token ) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::com::sun::star::xml::Attribute > SAL_CALL getUnknownAttributes( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::xml::FastAttribute > SAL_CALL getFastAttributes() throw (::com::sun::star::uno::RuntimeException); private: FastAttributeMap maAttributes; diff --git a/sax/inc/sax/fshelper.hxx b/sax/inc/sax/fshelper.hxx new file mode 100644 index 000000000000..b1ce4ba39d1b --- /dev/null +++ b/sax/inc/sax/fshelper.hxx @@ -0,0 +1,115 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile$ + * $Revision$ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SAX_FS_HELPER_HXX_ +#define _SAX_FS_HELPER_HXX_ + +#include +#include +#include +#include +#include +#include +#include "sax/dllapi.h" + +#define FSNS(namespace, element) ((namespace << 16) | element) +#define FSEND -1 // same as XML_TOKEN_INVALID + +namespace sax_fastparser { + +typedef ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList > XFastAttributeListRef; + +class FastSaxSerializer; + +class SAX_DLLPUBLIC FastSerializerHelper +{ +public: + + FastSerializerHelper( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutputStream ); + + ~FastSerializerHelper(); + + void startElement(const char* elementName, ...); + void singleElement(const char* elementName, ...); + void endElement(const char* elementName); + + void startElementV(sal_Int32 elementTokenId, va_list args); + void singleElementV(sal_Int32 elementTokenId, va_list args); + + inline void startElement(sal_Int32 elementTokenId, ...) + { va_list args; va_start( args, elementTokenId ); startElementV( elementTokenId, args ); va_end( args ); } + inline void singleElement(sal_Int32 elementTokenId, ...) + { va_list args; va_start( args, elementTokenId ); singleElementV( elementTokenId, args ); va_end( args ); } + inline void startElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, ...) + { va_list args; va_start( args, elementTokenId ); startElementV( FSNS( namespaceTokenId, elementTokenId), args ); va_end( args ); } + inline void singleElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, ...) + { va_list args; va_start( args, elementTokenId ); singleElementV( FSNS( namespaceTokenId, elementTokenId), args ); va_end( args ); } + void endElement(sal_Int32 elementTokenId); + inline void endElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId) + { endElement( FSNS( namespaceTokenId, elementTokenId ) ); } + + void singleElement(const char* elementName, XFastAttributeListRef xAttrList); + inline void singleElement(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList) + { singleElementV(elementTokenId, xAttrList); } + void singleElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList); + inline void singleElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, XFastAttributeListRef xAttrList) + { singleElementV(FSNS( namespaceTokenId, elementTokenId), xAttrList); } + + FastSerializerHelper* write(const char* value); + FastSerializerHelper* write(const rtl::OUString& value); + FastSerializerHelper* write(sal_Int32 value); + FastSerializerHelper* write(sal_Int64 value); + FastSerializerHelper* write(float value); + FastSerializerHelper* write(double value); + + FastSerializerHelper* writeEscaped(const char* value); + FastSerializerHelper* writeEscaped(const rtl::OUString& value); + + FastSerializerHelper* writeId(sal_Int32 tokenId); + + ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > getOutputStream(); + + FastAttributeList *createAttrList(); + + void mark(); + void mergeTopMarks( bool bPrepend = false ); + +private: + + FastSaxSerializer* mpSerializer; + com::sun::star::uno::Reference mxTokenHandler; + +}; + +typedef boost::shared_ptr< FastSerializerHelper > FSHelperPtr; + +} + +#endif // _SAX_FS_HELPER_HXX_ diff --git a/sax/prj/build.lst b/sax/prj/build.lst index 9cc88467d011..e3f70c484610 100644 --- a/sax/prj/build.lst +++ b/sax/prj/build.lst @@ -3,4 +3,3 @@ ax sax usr1 - all ax_mkout NULL ax sax\source\expatwrap nmake - all ax_expatwrap NULL ax sax\source\tools nmake - all ax_tools NULL ax sax\source\fastparser nmake - all ax_fastparser ax_expatwrap ax_tools NULL -ax sax\util nmake - all ax_util ax_expatwrap ax_tools ax_fastparser NULL diff --git a/sax/prj/d.lst b/sax/prj/d.lst index 3cffb18fe1f6..87f01348163c 100644 --- a/sax/prj/d.lst +++ b/sax/prj/d.lst @@ -6,6 +6,8 @@ mkdir: %_DEST%\inc%_EXT%\sax mkdir: %_DEST%\inc%_EXT%\sax\tools ..\inc\sax\dllapi.h %_DEST%\inc%_EXT%\sax\dllapi.h +..\inc\sax\fshelper.hxx %_DEST%\inc%_EXT%\sax\fshelper.hxx +..\inc\sax\fastattribs.hxx %_DEST%\inc%_EXT%\sax\fastattribs.hxx ..\inc\sax\tools\converter.hxx %_DEST%\inc%_EXT%\sax\tools\converter.hxx dos: sh -c "if test %OS% = MACOSX; then macosx-create-bundle %_DEST%\lib%_EXT%\*.dylib; fi" diff --git a/sax/source/fastparser/facreg.cxx b/sax/source/fastparser/facreg.cxx new file mode 100644 index 000000000000..1916a9740f1a --- /dev/null +++ b/sax/source/fastparser/facreg.cxx @@ -0,0 +1,106 @@ +#include +#include +#include + +#include "../tools/fastserializer.hxx" +#include "fastparser.hxx" + +using namespace sax_fastparser; +using namespace ::cppu; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::registry; +using ::rtl::OUString; +using namespace ::com::sun::star::lang; + +namespace sax_fastparser +{ + +//-------------------------------------- +// the extern interface +//--------------------------------------- +Reference< XInterface > SAL_CALL FastSaxParser_CreateInstance( const Reference< XMultiServiceFactory > & ) throw(Exception) +{ + FastSaxParser *p = new FastSaxParser; + return Reference< XInterface > ( (OWeakObject * ) p ); +} + +Reference< XInterface > SAL_CALL FastSaxSerializer_CreateInstance( const Reference< XMultiServiceFactory > & ) throw(Exception) +{ + FastSaxSerializer *p = new FastSaxSerializer; + return Reference< XInterface > ( (OWeakObject * ) p ); +} +} + +extern "C" +{ + +void SAL_CALL component_getImplementationEnvironment( + const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ ) +{ + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} + + +sal_Bool SAL_CALL component_writeInfo( + void * /*pServiceManager*/, void * pRegistryKey ) +{ + if (pRegistryKey) + { + try + { + Reference< XRegistryKey > xKey( reinterpret_cast< XRegistryKey * >( pRegistryKey ) ); + + Reference< XRegistryKey > xNewKey( xKey->createKey( + OUString::createFromAscii( "/" PARSER_IMPLEMENTATION_NAME "/UNO/SERVICES" ) ) ); + xNewKey->createKey( OUString::createFromAscii( PARSER_SERVICE_NAME ) ); + + Reference< XRegistryKey > xNewKey1( xKey->createKey( + OUString::createFromAscii( "/" SERIALIZER_IMPLEMENTATION_NAME "/UNO/SERVICES" ) ) ); + xNewKey1->createKey( OUString::createFromAscii( SERIALIZER_SERVICE_NAME ) ); + + return sal_True; + } + catch (InvalidRegistryException &) + { + OSL_ENSURE( sal_False, "### InvalidRegistryException!" ); + } + } + return sal_False; +} + +void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * /*pRegistryKey*/ ) +{ + void * pRet = 0; + + if (pServiceManager ) + { + Reference< XSingleServiceFactory > xRet; + Reference< XMultiServiceFactory > xSMgr( reinterpret_cast< XMultiServiceFactory * > ( pServiceManager ) ); + + OUString aImplementationName( OUString::createFromAscii( pImplName ) ); + + if (aImplementationName == OUString( RTL_CONSTASCII_USTRINGPARAM( PARSER_IMPLEMENTATION_NAME ) ) ) + { + xRet = createSingleFactory( xSMgr, aImplementationName, + FastSaxParser_CreateInstance, + FastSaxParser::getSupportedServiceNames_Static() ); + } + else if (aImplementationName == OUString( RTL_CONSTASCII_USTRINGPARAM( SERIALIZER_IMPLEMENTATION_NAME ) ) ) + { + xRet = createSingleFactory( xSMgr, aImplementationName, + FastSaxSerializer_CreateInstance, + FastSaxSerializer::getSupportedServiceNames_Static() ); + } + + if (xRet.is()) + { + xRet->acquire(); + pRet = xRet.get(); + } + } + + return pRet; +} + + +} diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx index 8cf48649c8e4..2b2461c1173f 100644 --- a/sax/source/fastparser/fastparser.cxx +++ b/sax/source/fastparser/fastparser.cxx @@ -31,35 +31,17 @@ //#include //#include -#include -#include -#include #include -#include #include -#include -#include #include -#include -#include #include #include #include -#include -#include -#include +#include "fastparser.hxx" -#include "fastattribs.hxx" -#include "xml2utf.hxx" - -#ifdef SYSTEM_EXPAT -#include -#else -#include "expat/xmlparse.h" -#endif #include using ::rtl::OUString; @@ -69,7 +51,6 @@ using namespace ::osl; using namespace ::cppu; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::registry; using namespace ::com::sun::star::xml::sax; //using namespace ::com::sun::star::util; using namespace ::com::sun::star::io; @@ -78,11 +59,6 @@ namespace sax_fastparser // -------------------------------------------------------------------- -struct SaxContextImpl; -typedef boost::shared_ptr< SaxContextImpl > SaxContextImplPtr; - -// -------------------------------------------------------------------- - struct SaxContextImpl { Reference< XFastContextHandler > mxContext; @@ -97,16 +73,6 @@ struct SaxContextImpl // -------------------------------------------------------------------- -// Entity binds all information neede for a single file -struct Entity -{ - InputSource maStructSource; - XML_Parser mpParser; - sax_expatwrap::XMLFile2UTFConverter maConverter; -}; - -// -------------------------------------------------------------------- - struct NamespaceDefine { OString maPrefix; @@ -116,10 +82,6 @@ struct NamespaceDefine NamespaceDefine( const OString& rPrefix, sal_Int32 nToken, const OUString& rNamespaceURL ) : maPrefix( rPrefix ), mnToken( nToken ), maNamespaceURL( rNamespaceURL ) {} }; -typedef ::std::hash_map< ::rtl::OUString, sal_Int32, - ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > - > NamespaceMap; - // -------------------------------------------------------------------- // FastLocatorImpl // -------------------------------------------------------------------- @@ -148,107 +110,6 @@ private: // FastSaxParser // -------------------------------------------------------------------- -#define IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.FastParser" -#define SERVICE_NAME "com.sun.star.xml.sax.FastParser" - - -// This class implements the external Parser interface -class FastSaxParser : public WeakImplHelper2< XFastParser, XServiceInfo > -{ -public: - FastSaxParser(); - ~FastSaxParser(); - - // The implementation details - static Sequence< OUString > getSupportedServiceNames_Static(void); - - // XFastParser - virtual void SAL_CALL parseStream( const InputSource& aInputSource ) throw (SAXException, IOException, RuntimeException); - virtual void SAL_CALL setFastDocumentHandler( const Reference< XFastDocumentHandler >& Handler ) throw (RuntimeException); - virtual void SAL_CALL setTokenHandler( const Reference< XFastTokenHandler >& Handler ) throw (RuntimeException); - virtual void SAL_CALL registerNamespace( const OUString& NamespaceURL, sal_Int32 NamespaceToken ) throw (IllegalArgumentException, RuntimeException); - virtual void SAL_CALL setErrorHandler( const Reference< XErrorHandler >& Handler ) throw (RuntimeException); - virtual void SAL_CALL setEntityResolver( const Reference< XEntityResolver >& Resolver ) throw (RuntimeException); - virtual void SAL_CALL setLocale( const Locale& Locale ) throw (RuntimeException); - - // XServiceInfo - virtual OUString SAL_CALL getImplementationName( ) throw (RuntimeException); - virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw (RuntimeException); - virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); - -public: - // the C-Callbacks for the expat parser - void static callbackStartElement(void *userData, const XML_Char *name , const XML_Char **atts); - void static callbackEndElement(void *userData, const XML_Char *name); - void static callbackCharacters( void *userData , const XML_Char *s , int nLen ); - int static callbackExternalEntityRef( XML_Parser parser, const XML_Char *openEntityNames, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); - -public: - void pushEntity( const struct Entity &entity ) { vecEntity.push_back( entity ); } - void popEntity() { vecEntity.pop_back( ); } - struct Entity &getEntity() { return vecEntity.back(); } - -private: - void parse(); - - sal_Int32 GetToken( const OString& rToken ); - sal_Int32 GetToken( const sal_Char* pToken, sal_Int32 nTokenLen = 0 ); - sal_Int32 GetTokenWithPrefix( const OString& rPrefix, const OString& rName ) throw (SAXException); - sal_Int32 GetTokenWithPrefix( const sal_Char*pPrefix, int nPrefixLen, const sal_Char* pName, int nNameLen ) throw (SAXException); - OUString GetNamespaceURL( const OString& rPrefix ) throw (SAXException); - OUString GetNamespaceURL( const sal_Char*pPrefix, int nPrefixLen ) throw (SAXException); - sal_Int32 GetNamespaceToken( const OUString& rNamespaceURL ); - sal_Int32 GetTokenWithNamespaceURL( const OUString& rNamespaceURL, const sal_Char* pName, int nNameLen ); - void DefineNamespace( const OString& rPrefix, const sal_Char* pNamespaceURL ); - sal_Int32 CreateCustomToken( const sal_Char* pToken, int len = 0 ); - - void pushContext(); - void popContext(); - - void splitName( const XML_Char *pwName, const XML_Char *&rpPrefix, sal_Int32 &rPrefixLen, const XML_Char *&rpName, sal_Int32 &rNameLen ); - -private: - Mutex maMutex; - - Reference< XFastDocumentHandler > mxDocumentHandler; - Reference< XFastTokenHandler > mxTokenHandler; - Reference< XErrorHandler > mxErrorHandler; - Reference< XEntityResolver > mxEntityResolver; - rtl::Reference < FastLocatorImpl > mxDocumentLocator; - - rtl::Reference < FastAttributeList > mxAttributes; - - // External entity stack - vector vecEntity; - - // Exception cannot be thrown through the C-XmlParser (possible resource leaks), - // therefor the maSavedException must be saved somewhere. - Any maSavedException; - sal_Bool mbExceptionWasThrown; - - Locale maLocale; - - std::stack< SaxContextImplPtr > maContextStack; - std::vector< boost::shared_ptr< NamespaceDefine > > maNamespaceDefines; - NamespaceMap maNamespaceMap; -}; - -//-------------------------------------- -// the extern interface -//--------------------------------------- -Reference< XInterface > SAL_CALL FastSaxParser_CreateInstance( const Reference< XMultiServiceFactory > & ) throw(Exception) -{ - FastSaxParser *p = new FastSaxParser; - return Reference< XInterface > ( (OWeakObject * ) p ); -} - -Sequence< OUString > FastSaxParser::getSupportedServiceNames_Static(void) -{ - Sequence aRet(1); - aRet.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(SERVICE_NAME) ); - return aRet; -} - //--------------------------------------------- // the implementation part //--------------------------------------------- @@ -670,10 +531,17 @@ void FastSaxParser::setLocale( const Locale & Locale ) throw (RuntimeException) maLocale = Locale; } +Sequence< OUString > FastSaxParser::getSupportedServiceNames_Static(void) +{ + Sequence aRet(1); + aRet.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(PARSER_SERVICE_NAME) ); + return aRet; +} + // XServiceInfo OUString FastSaxParser::getImplementationName() throw (RuntimeException) { - return OUString::createFromAscii( IMPLEMENTATION_NAME ); + return OUString::createFromAscii( PARSER_IMPLEMENTATION_NAME ); } // XServiceInfo @@ -694,7 +562,7 @@ Sequence< OUString > FastSaxParser::getSupportedServiceNames(void) throw (Runtim { Sequence seq(1); - seq.getArray()[0] = OUString::createFromAscii( SERVICE_NAME ); + seq.getArray()[0] = OUString::createFromAscii( PARSER_SERVICE_NAME ); return seq; } @@ -1135,70 +1003,4 @@ int FastSaxParser::callbackExternalEntityRef( XML_Parser parser, return bOK; } -} - -using namespace sax_fastparser; - -extern "C" -{ - -void SAL_CALL component_getImplementationEnvironment( - const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ ) -{ - *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; -} - - -sal_Bool SAL_CALL component_writeInfo( - void * /*pServiceManager*/, void * pRegistryKey ) -{ - if (pRegistryKey) - { - try - { - Reference< XRegistryKey > xKey( reinterpret_cast< XRegistryKey * >( pRegistryKey ) ); - - Reference< XRegistryKey > xNewKey( xKey->createKey( - OUString::createFromAscii( "/" IMPLEMENTATION_NAME "/UNO/SERVICES" ) ) ); - xNewKey->createKey( OUString::createFromAscii( SERVICE_NAME ) ); - - return sal_True; - } - catch (InvalidRegistryException &) - { - OSL_ENSURE( sal_False, "### InvalidRegistryException!" ); - } - } - return sal_False; -} - -void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * /*pRegistryKey*/ ) -{ - void * pRet = 0; - - if (pServiceManager ) - { - Reference< XSingleServiceFactory > xRet; - Reference< XMultiServiceFactory > xSMgr( reinterpret_cast< XMultiServiceFactory * > ( pServiceManager ) ); - - OUString aImplementationName( OUString::createFromAscii( pImplName ) ); - - if (aImplementationName == OUString( RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATION_NAME ) ) ) - { - xRet = createSingleFactory( xSMgr, aImplementationName, - FastSaxParser_CreateInstance, - FastSaxParser::getSupportedServiceNames_Static() ); - } - - if (xRet.is()) - { - xRet->acquire(); - pRet = xRet.get(); - } - } - - return pRet; -} - - } diff --git a/sax/source/fastparser/fastparser.hxx b/sax/source/fastparser/fastparser.hxx new file mode 100644 index 000000000000..07cb6afac77d --- /dev/null +++ b/sax/source/fastparser/fastparser.hxx @@ -0,0 +1,163 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile$ + * $Revision$ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SAX_FASTPARSER_HXX_ +#define _SAX_FASTPARSER_HXX_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef SYSTEM_EXPAT +#include +#else +#include "expat/xmlparse.h" +#endif +#include "xml2utf.hxx" + +#include + +#define PARSER_IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.FastParser" +#define PARSER_SERVICE_NAME "com.sun.star.xml.sax.FastParser" + +namespace sax_fastparser +{ + + class FastLocatorImpl; + struct NamespaceDefine; + struct SaxContextImpl; + typedef boost::shared_ptr< SaxContextImpl > SaxContextImplPtr; + typedef ::std::hash_map< ::rtl::OUString, sal_Int32, + ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > + > NamespaceMap; + +// -------------------------------------------------------------------- + +// Entity binds all information neede for a single file +struct Entity +{ + ::com::sun::star::xml::sax::InputSource maStructSource; + XML_Parser mpParser; + sax_expatwrap::XMLFile2UTFConverter maConverter; +}; + +// -------------------------------------------------------------------- + +// This class implements the external Parser interface +class FastSaxParser : public ::cppu::WeakImplHelper2< ::com::sun::star::xml::sax::XFastParser, ::com::sun::star::lang::XServiceInfo > +{ +public: + FastSaxParser(); + ~FastSaxParser(); + + // The implementation details + static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void); + + // XFastParser + virtual void SAL_CALL parseStream( const ::com::sun::star::xml::sax::InputSource& aInputSource ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setFastDocumentHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastDocumentHandler >& Handler ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setTokenHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >& Handler ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL registerNamespace( const ::rtl::OUString& NamespaceURL, sal_Int32 NamespaceToken ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setErrorHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XErrorHandler >& Handler ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setEntityResolver( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XEntityResolver >& Resolver ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setLocale( const ::com::sun::star::lang::Locale& rLocale ) throw (::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); + +public: + // the C-Callbacks for the expat parser + void static callbackStartElement(void *userData, const XML_Char *name , const XML_Char **atts); + void static callbackEndElement(void *userData, const XML_Char *name); + void static callbackCharacters( void *userData , const XML_Char *s , int nLen ); + int static callbackExternalEntityRef( XML_Parser parser, const XML_Char *openEntityNames, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); + +public: + void pushEntity( const struct Entity &entity ) { vecEntity.push_back( entity ); } + void popEntity() { vecEntity.pop_back( ); } + struct Entity &getEntity() { return vecEntity.back(); } + +private: + void parse(); + + sal_Int32 GetToken( const ::rtl::OString& rToken ); + sal_Int32 GetToken( const sal_Char* pToken, sal_Int32 nTokenLen = 0 ); + sal_Int32 GetTokenWithPrefix( const ::rtl::OString& rPrefix, const ::rtl::OString& rName ) throw (::com::sun::star::xml::sax::SAXException); + sal_Int32 GetTokenWithPrefix( const sal_Char*pPrefix, int nPrefixLen, const sal_Char* pName, int nNameLen ) throw (::com::sun::star::xml::sax::SAXException); + ::rtl::OUString GetNamespaceURL( const ::rtl::OString& rPrefix ) throw (::com::sun::star::xml::sax::SAXException); + ::rtl::OUString GetNamespaceURL( const sal_Char*pPrefix, int nPrefixLen ) throw (::com::sun::star::xml::sax::SAXException); + sal_Int32 GetNamespaceToken( const ::rtl::OUString& rNamespaceURL ); + sal_Int32 GetTokenWithNamespaceURL( const ::rtl::OUString& rNamespaceURL, const sal_Char* pName, int nNameLen ); + void DefineNamespace( const ::rtl::OString& rPrefix, const sal_Char* pNamespaceURL ); + sal_Int32 CreateCustomToken( const sal_Char* pToken, int len = 0 ); + + void pushContext(); + void popContext(); + + void splitName( const XML_Char *pwName, const XML_Char *&rpPrefix, sal_Int32 &rPrefixLen, const XML_Char *&rpName, sal_Int32 &rNameLen ); + +private: + ::osl::Mutex maMutex; + + ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastDocumentHandler > mxDocumentHandler; + ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxTokenHandler; + ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XErrorHandler > mxErrorHandler; + ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XEntityResolver > mxEntityResolver; + + rtl::Reference < FastLocatorImpl > mxDocumentLocator; + rtl::Reference < FastAttributeList > mxAttributes; + + // External entity stack + std::vector< struct Entity > vecEntity; + + // Exception cannot be thrown through the C-XmlParser (possible resource leaks), + // therefor the maSavedException must be saved somewhere. + ::com::sun::star::uno::Any maSavedException; + sal_Bool mbExceptionWasThrown; + + ::com::sun::star::lang::Locale maLocale; + + std::stack< SaxContextImplPtr > maContextStack; + std::vector< boost::shared_ptr< NamespaceDefine > > maNamespaceDefines; + NamespaceMap maNamespaceMap; +}; + +} + +#endif // _SAX_FASTPARSER_HXX_ diff --git a/sax/source/fastparser/makefile.mk b/sax/source/fastparser/makefile.mk index d3a6a9312978..625d7790ed1a 100644 --- a/sax/source/fastparser/makefile.mk +++ b/sax/source/fastparser/makefile.mk @@ -37,7 +37,7 @@ ENABLE_EXCEPTIONS=TRUE # --- Settings ----------------------------------------------------- .INCLUDE : settings.mk -DLLPRE = +DLLPRE = .IF "$(SYSTEM_ZLIB)" == "YES" CFLAGS+=-DSYSTEM_ZLIB @@ -50,8 +50,8 @@ CFLAGS+=-DSYSTEM_EXPAT #----------------------------------------------------------- SLOFILES =\ + $(SLO)$/facreg.obj\ $(SLO)$/fastparser.obj\ - $(SLO)$/fastattribs.obj\ $(SLO)$/xml2utf.obj SHL1TARGET= $(TARGET) @@ -59,8 +59,10 @@ SHL1IMPLIB= i$(TARGET) SHL1STDLIBS= \ $(SALLIB) \ + $(SAXLIB) \ $(CPPULIB) \ $(CPPUHELPERLIB)\ + $(COMPHELPERLIB)\ $(EXPATASCII3RDLIB) SHL1DEPN= diff --git a/sax/source/fastparser/fastattribs.cxx b/sax/source/tools/fastattribs.cxx similarity index 77% rename from sax/source/fastparser/fastattribs.cxx rename to sax/source/tools/fastattribs.cxx index a414071bdb49..43e5f75d2907 100644 --- a/sax/source/fastparser/fastattribs.cxx +++ b/sax/source/tools/fastattribs.cxx @@ -31,7 +31,7 @@ #include #include -#include "fastattribs.hxx" +#include using ::rtl::OUString; using ::rtl::OString; @@ -41,40 +41,25 @@ using namespace ::com::sun::star::xml::sax; namespace sax_fastparser { -struct UnknownAttribute +UnknownAttribute::UnknownAttribute( const OUString& rNamespaceURL, const OString& rName, const OString& rValue ) + : maNamespaceURL( rNamespaceURL ), maName( rName ), maValue( rValue ) { - OUString maNamespaceURL; - OString maName; - OString maValue; +} - UnknownAttribute( const OUString& rNamespaceURL, const OString& rName, const OString& rValue ) - : maNamespaceURL( rNamespaceURL ), maName( rName ), maValue( rValue ) {} +UnknownAttribute::UnknownAttribute( const OString& rName, const OString& rValue ) + : maName( rName ), maValue( rValue ) +{ +} - UnknownAttribute( const OString& rName, const OString& rValue ) - : maName( rName ), maValue( rValue ) {} - -/* - UnknownAttribute( const UnknownAttribute& r ) - : maNamespaceURL( r.maNamespaceURL ), maName( r.maName ), maValue( r.maValue ) {} - - const UnknownAttribute& operator=( const UnknownAttribute& r ) +void UnknownAttribute::FillAttribute( Attribute* pAttrib ) const +{ + if( pAttrib ) { - maNamespaceURL = r.maNamespaceURL; - maName = r.maName; - maValue = r.maValue; - return *this; + pAttrib->Name = OStringToOUString( maName, RTL_TEXTENCODING_UTF8 ); + pAttrib->NamespaceURL = maNamespaceURL; + pAttrib->Value = OStringToOUString( maValue, RTL_TEXTENCODING_UTF8 ); } -*/ - void FillAttribute( Attribute* pAttrib ) const - { - if( pAttrib ) - { - pAttrib->Name = OStringToOUString( maName, RTL_TEXTENCODING_UTF8 ); - pAttrib->NamespaceURL = maNamespaceURL; - pAttrib->Value = OStringToOUString( maValue, RTL_TEXTENCODING_UTF8 ); - } - } -}; +} FastAttributeList::FastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >& xTokenHandler ) : mxTokenHandler( xTokenHandler ) @@ -165,7 +150,21 @@ Sequence< Attribute > FastAttributeList::getUnknownAttributes( ) throw (Runtime { Sequence< Attribute > aSeq( maUnknownAttributes.size() ); Attribute* pAttr = aSeq.getArray(); - std::for_each( maUnknownAttributes.begin(), maUnknownAttributes.end(), bind(&UnknownAttribute::FillAttribute, _1, pAttr++ ) ); + for( UnknownAttributeList::iterator attrIter = maUnknownAttributes.begin(); attrIter != maUnknownAttributes.end(); attrIter++ ) + (*attrIter).FillAttribute( pAttr++ ); + return aSeq; +} +Sequence< FastAttribute > FastAttributeList::getFastAttributes( ) throw (RuntimeException) +{ + Sequence< FastAttribute > aSeq( maAttributes.size() ); + FastAttribute* pAttr = aSeq.getArray(); + FastAttributeMap::iterator fastAttrIter = maAttributes.begin(); + for(; fastAttrIter != maAttributes.end(); fastAttrIter++ ) + { + pAttr->Token = fastAttrIter->first; + pAttr->Value = OStringToOUString( fastAttrIter->second, RTL_TEXTENCODING_UTF8 ); + pAttr++; + } return aSeq; } diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx new file mode 100644 index 000000000000..4603ceed3343 --- /dev/null +++ b/sax/source/tools/fastserializer.cxx @@ -0,0 +1,388 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: contexthandler2.cxx,v $ + * + * $Revision: 1.1.2.2 $ + * + * last change: $Author: dr $ $Date: 2008/02/11 10:43:07 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +#include "fastserializer.hxx" +#include + +#include +#include +#include + +#include + +using ::rtl::OString; +using ::rtl::OUString; +using ::rtl::OUStringBuffer; +using ::rtl::OUStringToOString; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::RuntimeException; +using ::com::sun::star::uno::Sequence; +using ::com::sun::star::xml::FastAttribute; +using ::com::sun::star::xml::Attribute; +using ::com::sun::star::xml::sax::SAXException; +using ::com::sun::star::xml::sax::XFastAttributeList; +using ::com::sun::star::xml::sax::XFastTokenHandler; +using ::com::sun::star::xml::sax::XFastSerializer; +using ::com::sun::star::io::XOutputStream; +using ::com::sun::star::io::NotConnectedException; +using ::com::sun::star::io::IOException; +using ::com::sun::star::io::BufferSizeExceededException; + +static Sequence< sal_Int8 > aClosingBracket((sal_Int8 *)">", 1); +static Sequence< sal_Int8 > aSlashAndClosingBracket((sal_Int8 *)"/>", 2); +static Sequence< sal_Int8 > aColon((sal_Int8 *)":", 1); +static Sequence< sal_Int8 > aOpeningBracket((sal_Int8 *)"<", 1); +static Sequence< sal_Int8 > aOpeningBracketAndSlash((sal_Int8 *)" aQuote((sal_Int8 *)"\"", 1); +static Sequence< sal_Int8 > aEqualSignAndQuote((sal_Int8 *)"=\"", 2); +static Sequence< sal_Int8 > aSpace((sal_Int8 *)" ", 1); +static Sequence< sal_Int8 > aXmlHeader((sal_Int8*) "\n", 56); + +#define HAS_NAMESPACE(x) ((x & 0xffff0000) != 0) +#define NAMESPACE(x) (x >> 16) +#define TOKEN(x) (x & 0xffff) + +namespace sax_fastparser { + FastSaxSerializer::FastSaxSerializer( ) : mxOutputStream(), mxFastTokenHandler(), maMarkStack() {} + FastSaxSerializer::~FastSaxSerializer() {} + + void SAL_CALL FastSaxSerializer::startDocument( ) throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + writeBytes(aXmlHeader); + } + + OUString FastSaxSerializer::escapeXml( const OUString& s ) + { + ::rtl::OUStringBuffer sBuf( s.getLength() ); + const sal_Unicode* pStr = s; + sal_Int32 nLen = s.getLength(); + for( sal_Int32 i = 0; i < nLen; ++i) + { + sal_Unicode c = pStr[ i ]; + switch( c ) + { + case '<': sBuf.appendAscii( "<" ); break; + case '>': sBuf.appendAscii( ">" ); break; + case '&': sBuf.appendAscii( "&" ); break; + case '\'': sBuf.appendAscii( "'" ); break; + case '"': sBuf.appendAscii( """ ); break; + default: sBuf.append( c ); break; + } + } + return sBuf.makeStringAndClear(); + } + + void FastSaxSerializer::write( const OUString& s ) + { + OString sOutput( OUStringToOString( s, RTL_TEXTENCODING_UTF8 ) ); + writeBytes( Sequence< sal_Int8 >( + reinterpret_cast< const sal_Int8*>( sOutput.getStr() ), + sOutput.getLength() ) ); + } + + void SAL_CALL FastSaxSerializer::endDocument( ) throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + } + + void SAL_CALL FastSaxSerializer::writeId( ::sal_Int32 nElement ) + { + if( HAS_NAMESPACE( nElement ) ) { + writeBytes(mxFastTokenHandler->getUTF8Identifier(NAMESPACE(nElement))); + writeBytes(aColon); + writeBytes(mxFastTokenHandler->getUTF8Identifier(TOKEN(nElement))); + } else + writeBytes(mxFastTokenHandler->getUTF8Identifier(nElement)); + } + + void SAL_CALL FastSaxSerializer::startFastElement( ::sal_Int32 Element, const Reference< XFastAttributeList >& Attribs ) + throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + + writeBytes(aOpeningBracket); + + writeId(Element); + writeFastAttributeList(Attribs); + + writeBytes(aClosingBracket); + } + + void SAL_CALL FastSaxSerializer::startUnknownElement( const OUString& Namespace, const OUString& Name, const Reference< XFastAttributeList >& Attribs ) + throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + + writeBytes(aOpeningBracket); + + if (Namespace.getLength()) + { + write(Namespace); + writeBytes(aColon); + } + + write(Name); + + writeFastAttributeList(Attribs); + + writeBytes(aClosingBracket); + } + + void SAL_CALL FastSaxSerializer::endFastElement( ::sal_Int32 Element ) + throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + + writeBytes(aOpeningBracketAndSlash); + + writeId(Element); + + writeBytes(aClosingBracket); + } + + void SAL_CALL FastSaxSerializer::endUnknownElement( const OUString& Namespace, const OUString& Name ) + throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + + writeBytes(aOpeningBracketAndSlash); + + if (Namespace.getLength()) + { + write(Namespace); + writeBytes(aColon); + } + + write(Name); + + writeBytes(aClosingBracket); + } + + void SAL_CALL FastSaxSerializer::singleFastElement( ::sal_Int32 Element, const Reference< XFastAttributeList >& Attribs ) + throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + + writeBytes(aOpeningBracket); + + writeId(Element); + writeFastAttributeList(Attribs); + + writeBytes(aSlashAndClosingBracket); + } + + void SAL_CALL FastSaxSerializer::singleUnknownElement( const OUString& Namespace, const OUString& Name, const Reference< XFastAttributeList >& Attribs ) + throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + + writeBytes(aOpeningBracket); + + if (Namespace.getLength()) + { + write(Namespace); + writeBytes(aColon); + } + + write(Name); + + writeFastAttributeList(Attribs); + + writeBytes(aSlashAndClosingBracket); + } + + void SAL_CALL FastSaxSerializer::characters( const OUString& aChars ) + throw (SAXException, RuntimeException) + { + if (!mxOutputStream.is()) + return; + + write( aChars ); + } + + void SAL_CALL FastSaxSerializer::setOutputStream( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutputStream ) + throw (::com::sun::star::uno::RuntimeException) + { + mxOutputStream = xOutputStream; + } + + void SAL_CALL FastSaxSerializer::setFastTokenHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >& xFastTokenHandler ) + throw (::com::sun::star::uno::RuntimeException) + { + mxFastTokenHandler = xFastTokenHandler; + } + void FastSaxSerializer::writeFastAttributeList( const Reference< XFastAttributeList >& Attribs ) + { + Sequence< Attribute > aAttrSeq = Attribs->getUnknownAttributes(); + const Attribute *pAttr = aAttrSeq.getConstArray(); + sal_Int32 nAttrLength = aAttrSeq.getLength(); + for (sal_Int32 i = 0; i < nAttrLength; i++) + { + writeBytes(aSpace); + + write(pAttr[i].Name); + writeBytes(aEqualSignAndQuote); + write(escapeXml(pAttr[i].Value)); + writeBytes(aQuote); + } + + Sequence< FastAttribute > aFastAttrSeq = Attribs->getFastAttributes(); + const FastAttribute *pFastAttr = aFastAttrSeq.getConstArray(); + sal_Int32 nFastAttrLength = aFastAttrSeq.getLength(); + for (sal_Int32 j = 0; j < nFastAttrLength; j++) + { + writeBytes(aSpace); + + sal_Int32 nToken = pFastAttr[j].Token; + writeId(nToken); + + writeBytes(aEqualSignAndQuote); + + write(escapeXml(Attribs->getValue(pFastAttr[j].Token))); + + writeBytes(aQuote); + } + } + + // XServiceInfo + OUString FastSaxSerializer::getImplementationName() throw (RuntimeException) + { + return OUString::createFromAscii( SERIALIZER_IMPLEMENTATION_NAME ); + } + + // XServiceInfo + sal_Bool FastSaxSerializer::supportsService(const OUString& ServiceName) throw (RuntimeException) + { + Sequence< OUString > aSNL = getSupportedServiceNames(); + const OUString * pArray = aSNL.getConstArray(); + + for( sal_Int32 i = 0; i < aSNL.getLength(); i++ ) + if( pArray[i] == ServiceName ) + return sal_True; + + return sal_False; + } + + // XServiceInfo + Sequence< OUString > FastSaxSerializer::getSupportedServiceNames(void) throw (RuntimeException) + { + Sequence seq(1); + seq.getArray()[0] = OUString::createFromAscii( SERIALIZER_SERVICE_NAME ); + return seq; + } + + OUString FastSaxSerializer::getImplementationName_Static() + { + return OUString::createFromAscii( SERIALIZER_IMPLEMENTATION_NAME ); + } + + Sequence< OUString > FastSaxSerializer::getSupportedServiceNames_Static(void) + { + Sequence aRet(1); + aRet.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM(SERIALIZER_SERVICE_NAME) ); + return aRet; + } + + void FastSaxSerializer::mark() + { + maMarkStack.push( Int8Sequence() ); + } + + void FastSaxSerializer::mergeTopMarks( bool bPrepend ) + { + if ( maMarkStack.empty() ) + return; + + if ( maMarkStack.size() == 1 ) + { + mxOutputStream->writeBytes( maMarkStack.top() ); + maMarkStack.pop(); + } + else + { + const Int8Sequence aMerge( maMarkStack.top() ); + maMarkStack.pop(); + + sal_Int32 nMergeLen = aMerge.getLength(); + if ( nMergeLen > 0 ) + { + Int8Sequence &rTop = maMarkStack.top(); + sal_Int32 nTopLen = rTop.getLength(); + + rTop.realloc( nTopLen + nMergeLen ); + if ( bPrepend ) + { + // prepend the aMerge to the rTop + memmove( rTop.getArray() + nMergeLen, rTop.getConstArray(), nTopLen ); + memcpy( rTop.getArray(), aMerge.getConstArray(), nMergeLen ); + } + else + { + // append the aMerge to the rTop + memcpy( rTop.getArray() + nTopLen, aMerge.getConstArray(), nMergeLen ); + } + } + } + } + + void FastSaxSerializer::writeBytes( const Sequence< ::sal_Int8 >& aData ) throw ( NotConnectedException, BufferSizeExceededException, IOException, RuntimeException ) + { + if ( maMarkStack.empty() ) + mxOutputStream->writeBytes( aData ); + else + { + sal_Int32 nDataLen = aData.getLength(); + if ( nDataLen > 0 ) + { + Int8Sequence &rTop = maMarkStack.top(); + sal_Int32 nTopLen = rTop.getLength(); + + rTop.realloc( nTopLen + nDataLen ); + memcpy( rTop.getArray() + nTopLen, aData.getConstArray(), nDataLen ); + } + } + } + +} // namespace sax_fastparser + diff --git a/sax/source/tools/fastserializer.hxx b/sax/source/tools/fastserializer.hxx new file mode 100644 index 000000000000..132b495c0a8b --- /dev/null +++ b/sax/source/tools/fastserializer.hxx @@ -0,0 +1,147 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: serializer.hxx,v $ + * + * $Revision: 1.2.4.1 $ + * + * last change: $Author: dr $ $Date: 2008/02/15 12:56:11 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +#ifndef SAX_FASTSERIALIZER_HXX +#define SAX_FASTSERIALIZER_HXX + +#include +#include +#include +#include +#include + +#include + +#include "sax/dllapi.h" + +#define SERIALIZER_IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.FastSerializer" +#define SERIALIZER_SERVICE_NAME "com.sun.star.xml.sax.FastSerializer" + +namespace sax_fastparser { + +class SAX_DLLPUBLIC FastSaxSerializer : public ::cppu::WeakImplHelper2< ::com::sun::star::xml::sax::XFastSerializer, ::com::sun::star::lang::XServiceInfo > +{ +public: + explicit FastSaxSerializer( ); + virtual ~FastSaxSerializer(); + + ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > getOutputStream() {return mxOutputStream;} + + // The implementation details + static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void); + static ::rtl::OUString getImplementationName_Static(); + + // XFastSerializer + virtual void SAL_CALL startDocument( ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL endDocument( ) throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL startFastElement( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) + throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL startUnknownElement( const ::rtl::OUString& Namespace, const ::rtl::OUString& Name, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) + throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL endFastElement( ::sal_Int32 Element ) + throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL endUnknownElement( const ::rtl::OUString& Namespace, const ::rtl::OUString& Name ) + throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL singleFastElement( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) + throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL singleUnknownElement( const ::rtl::OUString& Namespace, const ::rtl::OUString& Name, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) + throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL characters( const ::rtl::OUString& aChars ) + throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setOutputStream( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutputStream ) + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setFastTokenHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler >& xFastTokenHandler ) + throw (::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw ( ::com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw ( ::com::sun::star::uno::RuntimeException ); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw ( ::com::sun::star::uno::RuntimeException ); + + // C++ helpers + virtual void SAL_CALL writeId( ::sal_Int32 Element ); + + static ::rtl::OUString escapeXml( const ::rtl::OUString& s ); + +public: + /** From now on, don't write directly to the stream, but to top of a stack. + + This is to be able to change the order of the data being written. + If you need to write eg. + p, r, rPr, [something], /rPr, t, [text], /r, /p, + but get it in order + p, r, t, [text], /t, rPr, [something], /rPr, /r, /p, + simply do + p, r, mark(), t, [text], /t, mark(), rPr, [something], /rPr, + mergeTopMarks( true ), mergeTopMarks(), /r, /p + and you are done. + */ + void mark(); + + /** Merge 2 topmost marks. + + There are 2 possibilities - prepend the top before the second top-most + mark, or append it; prepending brings the possibility to switch parts + of the output. + + Writes the result to the output stream if the mark stack becomes empty + by the operation. + + @see mark() + */ + void mergeTopMarks( bool bPrepend = false ); + +private: + ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > mxOutputStream; + ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxFastTokenHandler; + + typedef ::com::sun::star::uno::Sequence< ::sal_Int8 > Int8Sequence; + ::std::stack< Int8Sequence > maMarkStack; + + void writeFastAttributeList( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ); + void write( const ::rtl::OUString& s ); + +protected: + /** Forward the call to the output stream, or write to the stack. + + The latter in the case that we are inside a mark(). + */ + void writeBytes( const ::com::sun::star::uno::Sequence< ::sal_Int8 >& aData ) throw (::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); +}; + +} // namespace sax_fastparser + +#endif + diff --git a/sax/source/tools/fshelper.cxx b/sax/source/tools/fshelper.cxx new file mode 100644 index 000000000000..594a60ba1d76 --- /dev/null +++ b/sax/source/tools/fshelper.cxx @@ -0,0 +1,195 @@ +#include +#include "fastserializer.hxx" +#include +#include +#include + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + +namespace sax_fastparser { + +FastSerializerHelper::FastSerializerHelper(const Reference< io::XOutputStream >& xOutputStream ) : + mpSerializer(new FastSaxSerializer()) +{ + Reference< lang::XMultiServiceFactory > xFactory = comphelper::getProcessServiceFactory(); + mxTokenHandler = Reference ( xFactory->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.sax.FastTokenHandler") ) ), UNO_QUERY_THROW ); + + mpSerializer->setFastTokenHandler( mxTokenHandler ); + mpSerializer->setOutputStream( xOutputStream ); + mpSerializer->startDocument(); +} + +FastSerializerHelper::~FastSerializerHelper() +{ + mpSerializer->endDocument(); + + if (mpSerializer) { + delete mpSerializer; + mpSerializer = NULL; + } +} + +void FastSerializerHelper::startElement(const char* elementName, ...) +{ + FastAttributeList* pAttrList = new FastAttributeList( mxTokenHandler ); + va_list args; + va_start(args, elementName); + while (true) + { + const char* pName = va_arg(args, const char*); + if (!pName) + break; + const char* pValue = va_arg(args, const char*); + if (pValue) + pAttrList->addUnknown(pName, pValue); + } + va_end(args); + const com::sun::star::uno::Reference xAttrList(pAttrList); + mpSerializer->startUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList); +} + +void FastSerializerHelper::singleElement(const char* elementName, ...) +{ + FastAttributeList* pAttrList = new FastAttributeList( mxTokenHandler ); + va_list args; + va_start(args, elementName); + while (true) + { + const char* pName = va_arg(args, const char*); + if (!pName) + break; + const char* pValue = va_arg(args, const char*); + if (pValue) + pAttrList->addUnknown(pName, pValue); + } + va_end(args); + const com::sun::star::uno::Reference xAttrList(pAttrList); + mpSerializer->singleUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList); +} + +void FastSerializerHelper::endElement(const char* elementName) +{ + mpSerializer->endUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName)); +} + +void FastSerializerHelper::startElementV(sal_Int32 elementTokenId, va_list args) +{ + FastAttributeList* pAttrList = new FastAttributeList( mxTokenHandler ); + + while (true) + { + sal_Int32 nName = va_arg(args, sal_Int32); + if (nName == FSEND) + break; + const char* pValue = va_arg(args, const char*); + if (pValue) + pAttrList->add(nName, pValue); + } + + const com::sun::star::uno::Reference xAttrList(pAttrList); + mpSerializer->startFastElement(elementTokenId, xAttrList); +} + +void FastSerializerHelper::singleElementV(sal_Int32 elementTokenId, va_list args) +{ + FastAttributeList* pAttrList = new FastAttributeList( mxTokenHandler ); + + while (true) + { + sal_Int32 nName = va_arg(args, sal_Int32); + if (nName == FSEND) + break; + const char* pValue = va_arg(args, const char*); + if (pValue) + pAttrList->add(nName, pValue); + } + + const com::sun::star::uno::Reference xAttrList(pAttrList); + mpSerializer->singleFastElement(elementTokenId, xAttrList); +} + +void FastSerializerHelper::endElement(sal_Int32 elementTokenId) +{ + mpSerializer->endFastElement(elementTokenId); +} + +void FastSerializerHelper::singleElement(const char* elementName, XFastAttributeListRef xAttrList) +{ + mpSerializer->singleUnknownElement(::rtl::OUString(), ::rtl::OUString::createFromAscii(elementName), xAttrList); +} + +void FastSerializerHelper::singleElementV(sal_Int32 elementTokenId, XFastAttributeListRef xAttrList) +{ + mpSerializer->singleFastElement(elementTokenId, xAttrList); +} + +FastSerializerHelper* FastSerializerHelper::write(const char* value) +{ + return write(rtl::OUString::createFromAscii(value)); +} + +FastSerializerHelper* FastSerializerHelper::write(const rtl::OUString& value) +{ + mpSerializer->characters(value); + return this; +} + +FastSerializerHelper* FastSerializerHelper::write(sal_Int32 value) +{ + return write(::rtl::OUString::valueOf(value)); +} + +FastSerializerHelper* FastSerializerHelper::write(sal_Int64 value) +{ + return write(::rtl::OUString::valueOf(value)); +} + +FastSerializerHelper* FastSerializerHelper::write(float value) +{ + return write(::rtl::OUString::valueOf(value)); +} + +FastSerializerHelper* FastSerializerHelper::write(double value) +{ + return write(::rtl::OUString::valueOf(value)); +} + +FastSerializerHelper* FastSerializerHelper::writeEscaped(const char* value) +{ + return writeEscaped(::rtl::OUString::createFromAscii(value)); +} + +FastSerializerHelper* FastSerializerHelper::writeEscaped(const ::rtl::OUString& value) +{ + return write(FastSaxSerializer::escapeXml(value)); +} + +FastSerializerHelper* FastSerializerHelper::writeId(sal_Int32 tokenId) +{ + mpSerializer->writeId(tokenId); + return this; +} + +::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > FastSerializerHelper::getOutputStream() +{ + return mpSerializer->getOutputStream(); +} + +void FastSerializerHelper::mark() +{ + mpSerializer->mark(); +} + +void FastSerializerHelper::mergeTopMarks( bool bPrepend ) +{ + mpSerializer->mergeTopMarks( bPrepend ); +} + +FastAttributeList * FastSerializerHelper::createAttrList() +{ + return new FastAttributeList( mxTokenHandler ); +} + + +} diff --git a/sax/source/tools/makefile.mk b/sax/source/tools/makefile.mk index 2812218fd440..1f806aef74b4 100644 --- a/sax/source/tools/makefile.mk +++ b/sax/source/tools/makefile.mk @@ -32,7 +32,7 @@ PRJ=..$/.. PRJNAME=sax -TARGET=saxtools +TARGET=sax ENABLE_EXCEPTIONS=TRUE # --- Settings ----------------------------------------------------- @@ -43,7 +43,30 @@ ENABLE_EXCEPTIONS=TRUE # --- Files -------------------------------------------------------- SLOFILES = \ - $(SLO)$/converter.obj + $(SLO)$/converter.obj \ + $(SLO)$/fastattribs.obj \ + $(SLO)$/fastserializer.obj \ + $(SLO)$/fshelper.obj + +SHL1TARGET= $(TARGET)$(DLLPOSTFIX) +SHL1IMPLIB= i$(TARGET) + +SHL1STDLIBS= \ + $(VOSLIB) \ + $(CPPULIB) \ + $(CPPUHELPERLIB)\ + $(COMPHELPERLIB)\ + $(RTLLIB) \ + $(SALLIB) \ + $(ONELIB) \ + $(SALHELPERLIB) + +SHL1DEPN= +SHL1OBJS= $(SLOFILES) +SHL1USE_EXPORTS=name +SHL1DEF= $(MISC)$/$(SHL1TARGET).def +DEF1NAME= $(SHL1TARGET) +DEFLIB1NAME= $(TARGET) # --- Targets ------------------------------------------------------- diff --git a/tools/inc/tools/rtti.hxx b/tools/inc/tools/rtti.hxx index e19724ab8c48..e1d69e020157 100644 --- a/tools/inc/tools/rtti.hxx +++ b/tools/inc/tools/rtti.hxx @@ -45,6 +45,13 @@ typedef void* (*TypeId)(); virtual TypeId Type() const; \ virtual BOOL IsA( TypeId aSameOrSuperType ) const +#define TYPEINFO_VISIBILITY(visibility) \ + visibility static void* CreateType(); \ + visibility static TypeId StaticType(); \ + visibility static BOOL IsOf( TypeId aSameOrSuperType ); \ + visibility virtual TypeId Type() const; \ + visibility virtual BOOL IsA( TypeId aSameOrSuperType ) const + #define TYPEINIT_FACTORY(sType, Factory ) \ void* sType::CreateType() { return Factory; } \ TypeId sType::StaticType() { return &CreateType; } \