xref: /AOO41X/main/xmloff/source/core/XMLBase64Export.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 <rtl/ustrbuf.hxx>
27 #include <com/sun/star/io/XInputStream.hpp>
28 #include <xmloff/xmluconv.hxx>
29 #include <xmloff/xmlexp.hxx>
30 #include "xmloff/xmlnmspe.hxx"
31 #include "XMLBase64Export.hxx"
32 
33 using namespace ::com::sun::star::uno;
34 using namespace ::com::sun::star::io;
35 using ::rtl::OUString;
36 using ::rtl::OUStringBuffer;
37 
38 #define INPUT_BUFFER_SIZE 54
39 #define OUTPUT_BUFFER_SIZE 72
40 
XMLBase64Export(SvXMLExport & rExp)41 XMLBase64Export::XMLBase64Export( SvXMLExport& rExp ) :
42     rExport( rExp ){
43 }
44 
exportXML(const Reference<XInputStream> & rIn)45 sal_Bool XMLBase64Export::exportXML( const Reference < XInputStream> & rIn )
46 {
47     sal_Bool bRet = sal_True;
48     try
49     {
50         Sequence < sal_Int8 > aInBuff( INPUT_BUFFER_SIZE );
51         OUStringBuffer aOutBuff( OUTPUT_BUFFER_SIZE );
52         sal_Int32 nRead;
53         do
54         {
55             nRead = rIn->readBytes( aInBuff, INPUT_BUFFER_SIZE );
56             if( nRead > 0 )
57             {
58                 GetExport().GetMM100UnitConverter().encodeBase64( aOutBuff,
59                                                                   aInBuff );
60                 GetExport().Characters( aOutBuff.makeStringAndClear() );
61                 if( nRead == INPUT_BUFFER_SIZE )
62                     GetExport().IgnorableWhitespace();
63             }
64         }
65         while( nRead == INPUT_BUFFER_SIZE );
66     }
67     catch( ... )
68     {
69         bRet = sal_False;
70     }
71 
72     return bRet;
73 }
74 
exportElement(const Reference<XInputStream> & rIn,sal_uInt16 nNamespace,enum::xmloff::token::XMLTokenEnum eName)75 sal_Bool XMLBase64Export::exportElement(
76             const Reference < XInputStream > & rIn,
77             sal_uInt16 nNamespace,
78             enum ::xmloff::token::XMLTokenEnum eName )
79 {
80     SvXMLElementExport aElem( GetExport(), nNamespace, eName, sal_True,
81                               sal_True );
82     return exportXML( rIn );
83 }
84 
exportOfficeBinaryDataElement(const Reference<XInputStream> & rIn)85 sal_Bool XMLBase64Export::exportOfficeBinaryDataElement(
86             const Reference < XInputStream > & rIn )
87 {
88     return exportElement( rIn, XML_NAMESPACE_OFFICE,
89                           ::xmloff::token::XML_BINARY_DATA );
90 }
91 
92