1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_xmloff.hxx" 26 #include "XMLSectionFootnoteConfigExport.hxx" 27 #include <xmloff/xmlexp.hxx> 28 #include <xmloff/xmlprmap.hxx> 29 #include <com/sun/star/style/NumberingType.hpp> 30 #include <xmloff/maptype.hxx> 31 32 #ifndef _XMLOFF_TXTPRMAP_HXX 33 #include <xmloff/txtprmap.hxx> 34 #endif 35 #include <xmloff/nmspmap.hxx> 36 #include "xmloff/xmlnmspe.hxx" 37 #include <xmloff/xmluconv.hxx> 38 #include <xmloff/xmltoken.hxx> 39 #include <xmloff/xmlnume.hxx> 40 #include <tools/debug.hxx> 41 42 #ifndef _RTL_USTRING 43 #include <rtl/ustring.hxx> 44 #endif 45 #include <rtl/ustrbuf.hxx> 46 47 #include <vector> 48 49 50 using namespace ::xmloff::token; 51 52 using ::std::vector; 53 using ::rtl::OUString; 54 using ::rtl::OUStringBuffer; 55 using ::com::sun::star::style::NumberingType::ARABIC; 56 57 58 void XMLSectionFootnoteConfigExport::exportXML( 59 SvXMLExport& rExport, 60 sal_Bool bEndnote, 61 const vector<XMLPropertyState> *pProperties, 62 sal_uInt32 63 #ifdef DBG_UTIL 64 nIdx 65 #endif 66 , 67 const UniReference<XMLPropertySetMapper> & rMapper) 68 { 69 // store and initialize the values 70 sal_Bool bNumOwn = sal_False; 71 sal_Bool bNumRestart = sal_False; 72 sal_Int16 nNumRestartAt = 0; 73 sal_Int16 nNumberingType = ARABIC; 74 OUString sNumPrefix; 75 OUString sNumSuffix; 76 sal_Bool bEnd = sal_False; 77 78 // find entries in property states vector 79 sal_uInt32 nCount = pProperties->size(); 80 for(sal_uInt32 i = 0; i < nCount; i++) 81 { 82 const XMLPropertyState& rState = (*pProperties)[i]; 83 84 sal_Int16 nContextId = rMapper->GetEntryContextId(rState.mnIndex); 85 if (!bEndnote) 86 { 87 switch (nContextId) 88 { 89 case CTF_SECTION_FOOTNOTE_NUM_OWN: 90 rState.maValue >>= bNumOwn; 91 break; 92 case CTF_SECTION_FOOTNOTE_NUM_RESTART: 93 rState.maValue >>= bNumRestart; 94 break; 95 case CTF_SECTION_FOOTNOTE_NUM_RESTART_AT: 96 rState.maValue >>= nNumRestartAt; 97 break; 98 case CTF_SECTION_FOOTNOTE_NUM_TYPE: 99 rState.maValue >>= nNumberingType; 100 break; 101 case CTF_SECTION_FOOTNOTE_NUM_PREFIX: 102 rState.maValue >>= sNumPrefix; 103 break; 104 case CTF_SECTION_FOOTNOTE_NUM_SUFFIX: 105 rState.maValue >>= sNumSuffix; 106 break; 107 case CTF_SECTION_FOOTNOTE_END: 108 DBG_ASSERT( i == nIdx, 109 "received wrong property state index" ); 110 rState.maValue >>= bEnd; 111 break; 112 } 113 } 114 else 115 { 116 switch (nContextId) 117 { 118 case CTF_SECTION_ENDNOTE_NUM_OWN: 119 rState.maValue >>= bNumOwn; 120 break; 121 case CTF_SECTION_ENDNOTE_NUM_RESTART: 122 rState.maValue >>= bNumRestart; 123 break; 124 case CTF_SECTION_ENDNOTE_NUM_RESTART_AT: 125 rState.maValue >>= nNumRestartAt; 126 break; 127 case CTF_SECTION_ENDNOTE_NUM_TYPE: 128 rState.maValue >>= nNumberingType; 129 break; 130 case CTF_SECTION_ENDNOTE_NUM_PREFIX: 131 rState.maValue >>= sNumPrefix; 132 break; 133 case CTF_SECTION_ENDNOTE_NUM_SUFFIX: 134 rState.maValue >>= sNumSuffix; 135 break; 136 case CTF_SECTION_ENDNOTE_END: 137 DBG_ASSERT( i == nIdx, 138 "received wrong property state index" ); 139 rState.maValue >>= bEnd; 140 break; 141 } 142 } 143 } 144 145 // we only make an element if we have an own footnote/endnote numbering 146 if (bEnd) 147 { 148 rExport.AddAttribute(XML_NAMESPACE_TEXT, XML_NOTE_CLASS, 149 GetXMLToken( bEndnote ? XML_ENDNOTE 150 : XML_FOOTNOTE ) ); 151 // start numbering 152 OUStringBuffer sBuf; 153 if (bNumRestart) 154 { 155 // restart number is stored as 0.., but interpreted as 1.. 156 SvXMLUnitConverter::convertNumber(sBuf, 157 (sal_Int32)(nNumRestartAt+1)); 158 rExport.AddAttribute(XML_NAMESPACE_TEXT, XML_START_VALUE, 159 sBuf.makeStringAndClear()); 160 } 161 162 if (bNumOwn) 163 { 164 // prefix and suffix 165 if (sNumPrefix.getLength() > 0) 166 { 167 rExport.AddAttribute(XML_NAMESPACE_STYLE, XML_NUM_PREFIX, 168 sNumPrefix); 169 } 170 if (sNumSuffix.getLength() > 0) 171 { 172 rExport.AddAttribute(XML_NAMESPACE_STYLE, XML_NUM_SUFFIX, 173 sNumSuffix); 174 } 175 176 // number type: num format 177 rExport.GetMM100UnitConverter().convertNumFormat( sBuf, 178 nNumberingType ); 179 rExport.AddAttribute(XML_NAMESPACE_STYLE, XML_NUM_FORMAT, 180 sBuf.makeStringAndClear()); 181 182 // and letter sync, if applicable 183 rExport.GetMM100UnitConverter().convertNumLetterSync( 184 sBuf, nNumberingType ); 185 if (sBuf.getLength()) 186 { 187 rExport.AddAttribute(XML_NAMESPACE_STYLE, 188 XML_NUM_LETTER_SYNC, 189 sBuf.makeStringAndClear()); 190 } 191 } 192 193 // and finally, the element 194 SvXMLElementExport rElem(rExport, XML_NAMESPACE_TEXT, 195 XML_NOTES_CONFIGURATION, 196 sal_True, sal_True); 197 } 198 } 199