xref: /AOO41X/main/xmloff/source/text/XMLSectionFootnoteConfigExport.cxx (revision 63bba73cc51e0afb45f8a8d578158724bb5afee8)
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 
exportXML(SvXMLExport & rExport,sal_Bool bEndnote,const vector<XMLPropertyState> * pProperties,sal_uInt32 nIdx,const UniReference<XMLPropertySetMapper> & rMapper)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