blob: 76191e79d659d4be398e6412666a96d805cef77c [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef INCLUDED_OOXML_FACTORY_HXX
#define INCLUDED_OOXML_FACTORY_HXX
#include <hash_map>
#include <boost/shared_ptr.hpp>
#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
#include <resourcemodel/WW8ResourceModel.hxx>
#endif
#ifndef INCLUDED_OOXML_FAST_TOKENS_HXX
#include <ooxml/OOXMLFastTokens.hxx>
#endif
#ifndef INCLUDED_OOXML_FAST_CONTEXT_HANDLER_HXX
#include "OOXMLFastContextHandler.hxx"
#endif
namespace writerfilter {
namespace ooxml {
using namespace std;
enum ResourceType_t {
RT_NoResource,
RT_Table,
RT_Stream,
RT_List,
RT_Integer,
RT_Properties,
RT_Hex,
RT_String,
RT_Shape,
RT_Boolean,
RT_HexValue,
RT_Value,
RT_XNote,
RT_TextTableCell,
RT_TextTableRow,
RT_TextTable,
RT_PropertyTable,
RT_Any
};
struct AttributeInfo
{
ResourceType_t m_nResource;
Id m_nRef;
AttributeInfo(ResourceType_t nResource, Id nRef);
AttributeInfo();
};
typedef hash_map<Token_t, AttributeInfo> AttributeToResourceMap;
typedef boost::shared_ptr<AttributeToResourceMap> AttributeToResourceMapPointer;
typedef hash_map<Id, AttributeToResourceMapPointer> AttributesMap;
typedef hash_map<rtl::OUString, sal_Int32, ::rtl::OUStringHash> ListValueMap;
typedef boost::shared_ptr<ListValueMap> ListValueMapPointer;
typedef hash_map<Id, ListValueMapPointer> ListValuesMap;
struct CreateElement
{
ResourceType_t m_nResource;
Id m_nId;
CreateElement(ResourceType_t nResource, Id nId);
CreateElement();
};
typedef hash_map<Token_t, CreateElement> CreateElementMap;
typedef boost::shared_ptr<CreateElementMap> CreateElementMapPointer;
typedef hash_map<Id, CreateElementMapPointer> CreateElementsMap;
typedef hash_map<Id, string> IdToStringMap;
typedef boost::shared_ptr<IdToStringMap> IdToStringMapPointer;
typedef hash_map<Id, Token_t> TokenToIdMap;
typedef boost::shared_ptr<TokenToIdMap> TokenToIdMapPointer;
typedef hash_map<Id, TokenToIdMapPointer> TokenToIdsMap;
class OOXMLFactory_ns {
public:
typedef boost::shared_ptr<OOXMLFactory_ns> Pointer_t;
virtual void startAction(OOXMLFastContextHandler * pHandler);
virtual void charactersAction(OOXMLFastContextHandler * pHandler, const ::rtl::OUString & rString);
virtual void endAction(OOXMLFastContextHandler * pHandler);
virtual void attributeAction(OOXMLFastContextHandler * pHandler, Token_t nToken, OOXMLValue::Pointer_t pValue);
virtual string getDefineName(Id nId) const;
#ifdef DEBUG_FACTORY
virtual string getName() const;
#endif
AttributeToResourceMapPointer getAttributeToResourceMap(Id nId);
ListValueMapPointer getListValueMap(Id nId);
CreateElementMapPointer getCreateElementMap(Id nId);
TokenToIdMapPointer getTokenToIdMap(Id nId);
protected:
virtual ~OOXMLFactory_ns();
AttributesMap m_AttributesMap;
ListValuesMap m_ListValuesMap;
CreateElementsMap m_CreateElementsMap;
TokenToIdsMap m_TokenToIdsMap;
virtual AttributeToResourceMapPointer createAttributeToResourceMap(Id nId) = 0;
virtual ListValueMapPointer createListValueMap(Id nId) = 0;
virtual CreateElementMapPointer createCreateElementMap(Id nId) = 0;
virtual TokenToIdMapPointer createTokenToIdMap(Id nId) = 0;
};
class OOXMLFactory
{
public:
typedef boost::shared_ptr<OOXMLFactory> Pointer_t;
static Pointer_t getInstance();
uno::Reference< xml::sax::XFastContextHandler> createFastChildContext
(OOXMLFastContextHandler * pHandler, Token_t Element);
uno::Reference< xml::sax::XFastContextHandler> createFastChildContextFromStart
(OOXMLFastContextHandler * pHandler, Token_t Element);
void attributes(OOXMLFastContextHandler * pHandler,
const uno::Reference< xml::sax::XFastAttributeList > & Attribs);
void characters(OOXMLFastContextHandler * pHandler,
const ::rtl::OUString & rString);
void startAction(OOXMLFastContextHandler * pHandler, Token_t nToken);
void endAction(OOXMLFastContextHandler * pHandler, Token_t nToken);
virtual ~OOXMLFactory();
private:
static Pointer_t m_Instance;
OOXMLFactory();
OOXMLFactory_ns::Pointer_t getFactoryForNamespace(Id id);
uno::Reference< xml::sax::XFastContextHandler>
createFastChildContextFromFactory(OOXMLFastContextHandler * pHandler,
OOXMLFactory_ns::Pointer_t pFactory,
Token_t Element);
};
}
}
#endif // INCLUDED_OOXML_FACTORY_HXX