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 #include "internal/types.hxx" 25 26 //+------------------------------------------------------------------------- 27 // 28 // Contents: OpenOffice filter declarations 29 // 30 // Platform: Windows 2000, Windows XP 31 // 32 //-------------------------------------------------------------------------- 33 34 #pragma once 35 36 //+------------------------------------------------------------------------- 37 // 38 // forward declaration 39 // 40 //-------------------------------------------------------------------------- 41 class CContentReader; 42 class CMetaInfoReader; 43 class CFullPropSpec; 44 45 //+------------------------------------------------------------------------- 46 // 47 // Global definitions 48 // 49 //-------------------------------------------------------------------------- 50 51 long g_lInstances = 0; // Global count of COooFilter and COooFilterCF instances 52 GUID const guidStorage = PSGUID_STORAGE; // GUID for storage property set 53 54 //C------------------------------------------------------------------------- 55 // 56 // Class: COooFilter 57 // 58 // Purpose: Implements interfaces of OpenOffice filter 59 // 60 //-------------------------------------------------------------------------- 61 62 // OooFilter Class ID 63 // {7BC0E710-5703-45be-A29D-5D46D8B39262} 64 GUID const CLSID_COooFilter = 65 { 66 0x7bc0e710, 67 0x5703, 68 0x45be, 69 { 0xa2, 0x9d, 0x5d, 0x46, 0xd8, 0xb3, 0x92, 0x62 } 70 }; 71 72 // OpenOffice Persistent Handler Class ID 73 // {7BC0E713-5703-45be-A29D-5D46D8B39262} 74 const CLSID CLSID_PERSISTENT_HANDLER = 75 {0x7bc0e713, 0x5703, 0x45be, {0xa2, 0x9d, 0x5d, 0x46, 0xd8, 0xb3, 0x92, 0x62}}; 76 77 // OpenOffice Persistent Handler Addin Registered Class ID 78 // {89BCB740-6119-101A-BCB7-00DD010655AF} 79 const CLSID CLSID_PERSISTENT_HANDLER_ADDIN = 80 {0x89bcb740, 0x6119, 0x101a, {0xbc, 0xb7, 0x00, 0xdd, 0x01, 0x06, 0x55, 0xaf}}; 81 82 // OpenOffice Filter Handler Class ID 83 // {7BC0E710-5703-45be-A29D-5D46D8B39262} 84 const CLSID CLSID_FILTER_HANDLER = 85 {0x7bc0e710, 0x5703, 0x45be, {0xa2, 0x9d, 0x5d, 0x46, 0xd8, 0xb3, 0x92, 0x62}}; 86 87 enum FilterState 88 { 89 FilteringContent, // Filtering the content property 90 FilteringProperty // Filtering the pseudo property 91 }; 92 class COooFilter : public IFilter, public IPersistFile, public IPersistStream 93 { 94 public: 95 // From IUnknown 96 virtual SCODE STDMETHODCALLTYPE QueryInterface( 97 REFIID riid, 98 void ** ppvObject); 99 virtual ULONG STDMETHODCALLTYPE AddRef(); 100 virtual ULONG STDMETHODCALLTYPE Release(); 101 102 // From IFilter 103 virtual SCODE STDMETHODCALLTYPE Init( 104 ULONG grfFlags, 105 ULONG cAttributes, 106 FULLPROPSPEC const * aAttributes, 107 ULONG * pFlags); 108 virtual SCODE STDMETHODCALLTYPE GetChunk( 109 STAT_CHUNK * pStat); 110 virtual SCODE STDMETHODCALLTYPE GetText( 111 ULONG * pcwcBuffer, 112 WCHAR * awcBuffer); 113 114 virtual SCODE STDMETHODCALLTYPE GetValue( 115 PROPVARIANT ** ppPropValue); 116 117 virtual SCODE STDMETHODCALLTYPE BindRegion( 118 FILTERREGION origPos, 119 REFIID riid, 120 void ** ppunk); 121 122 // From IPersistFile 123 virtual SCODE STDMETHODCALLTYPE GetClassID( 124 CLSID * pClassID); 125 virtual SCODE STDMETHODCALLTYPE IsDirty(); 126 virtual SCODE STDMETHODCALLTYPE Load( 127 LPCWSTR pszFileName, 128 DWORD dwMode); 129 virtual SCODE STDMETHODCALLTYPE Save( 130 LPCWSTR pszFileName, 131 BOOL fRemember); 132 133 virtual SCODE STDMETHODCALLTYPE SaveCompleted( 134 LPCWSTR pszFileName); 135 136 virtual SCODE STDMETHODCALLTYPE GetCurFile( 137 LPWSTR * ppszFileName); 138 139 // From IPersistStream 140 virtual SCODE STDMETHODCALLTYPE Load( 141 IStream *pStm); 142 143 virtual SCODE STDMETHODCALLTYPE Save( 144 IStream *pStm, 145 BOOL fClearDirty); 146 147 virtual SCODE STDMETHODCALLTYPE GetSizeMax( 148 ULARGE_INTEGER *pcbSize); 149 150 151 private: 152 friend class COooFilterCF; 153 154 COooFilter(); 155 virtual ~COooFilter(); 156 157 long m_lRefs; // Reference count 158 CContentReader * m_pContentReader; // A content reader that retrieves document content. 159 CMetaInfoReader * m_pMetaInfoReader; // A metainfo reader that retrieves document metainfo. 160 FilterState m_eState; // State of filtering 161 ::std::wstring m_pwszFileName; // Name of input file to filter 162 ULONG m_ulUnicodeBufferLen; // UNICODE Characters read from file to chunk buffer 163 ULONG m_ulUnicodeCharsRead; // UNICODE Characters read from chunk buffer 164 ULONG m_ulPropertyNum; // Number of properties that has been processed 165 ULONG m_ulCurrentPropertyNum; // Current Property that is processing; 166 ULONG m_ulChunkID; // Current chunk id 167 BOOL m_fContents; // TRUE if contents requested 168 BOOL m_fEof; // TRUE if end of file reached 169 ::std::wstring m_pwsBuffer; // Buffer to save UNICODE content from ChunkBuffer. 170 ULONG m_ChunkPosition; // Chunk pointer to specify the current Chunk; 171 ULONG m_cAttributes; // Count of attributes 172 CFullPropSpec * m_pAttributes; // Attributes to filter 173 IStream * m_pStream; 174 175 }; 176 177 //C------------------------------------------------------------------------- 178 // 179 // Class: COooFilterCF 180 // 181 // Purpose: Implements class factory for OpenOffice filter 182 // 183 //-------------------------------------------------------------------------- 184 185 class COooFilterCF : public IClassFactory 186 { 187 public: 188 // From IUnknown 189 virtual SCODE STDMETHODCALLTYPE QueryInterface( 190 REFIID riid, 191 void ** ppvObject); 192 193 virtual ULONG STDMETHODCALLTYPE AddRef(); 194 virtual ULONG STDMETHODCALLTYPE Release(); 195 196 // From IClassFactory 197 virtual SCODE STDMETHODCALLTYPE CreateInstance( 198 IUnknown * pUnkOuter, 199 REFIID riid, void ** ppvObject); 200 201 virtual SCODE STDMETHODCALLTYPE LockServer( 202 BOOL fLock); 203 204 private: 205 friend SCODE STDMETHODCALLTYPE DllGetClassObject( 206 REFCLSID cid, 207 REFIID iid, 208 void ** ppvObj); 209 210 COooFilterCF(); 211 virtual ~COooFilterCF(); 212 213 long m_lRefs; // Reference count 214 }; 215 216 /* vim: set noet sw=4 ts=4: */ 217