1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _XMLOFF_EVENTIMPORTHELPER_HXX 29 #define _XMLOFF_EVENTIMPORTHELPER_HXX 30 31 #include <com/sun/star/uno/Reference.hxx> 32 #include <xmloff/xmlevent.hxx> 33 34 #include <map> 35 #include <list> 36 37 38 namespace com { namespace sun { namespace star { 39 namespace xml { namespace sax { class XAttributeList; } } 40 } } } 41 namespace rtl { class OUString; } 42 class XMLEventContextFactory; 43 class XMLEventsImportContext; 44 struct XMLEventNameTranslation; 45 46 typedef ::std::map< ::rtl::OUString, XMLEventContextFactory* > FactoryMap; 47 typedef ::std::map< XMLEventName, ::rtl::OUString > NameMap; 48 typedef ::std::list< NameMap* > NameMapList; 49 50 51 /** 52 * Helps the XMLEventsImportContext. 53 * 54 * This class stores 55 * a) the translation from XML event names to API event names, and 56 * b) a mapping from script language names to XMLEventContextFactory objects 57 * (that handle particular languages). 58 * 59 * Event name translation tables may be added, i.e. they will be joined 60 * together. If different translations are needed (i.e., if the same XML name 61 * needs to be translated to different API names in different contexts), then 62 * translation tables may be saved on a translation table stack. 63 */ 64 class XMLEventImportHelper 65 { 66 /// map of XMLEventContextFactory objects 67 FactoryMap aFactoryMap; 68 69 /// map from XML to API names 70 NameMap* pEventNameMap; 71 72 /// stack of previous aEventNameMap 73 NameMapList aEventNameMapList; 74 75 public: 76 XMLEventImportHelper(); 77 78 ~XMLEventImportHelper(); 79 80 /// register a handler for a particular language type 81 void RegisterFactory( const ::rtl::OUString& rLanguage, 82 XMLEventContextFactory* aFactory ); 83 84 /// add event name translation to the internal table 85 void AddTranslationTable( const XMLEventNameTranslation* pTransTable ); 86 87 /// save the old translation table on a stack and install an empty table 88 void PushTranslationTable(); 89 90 /// recover the top-most previously saved translation table 91 void PopTranslationTable(); 92 93 /// create an appropriate import context for a particular event 94 SvXMLImportContext* CreateContext( 95 SvXMLImport& rImport, 96 sal_uInt16 nPrefix, 97 const ::rtl::OUString& rLocalName, 98 const ::com::sun::star::uno::Reference< 99 ::com::sun::star::xml::sax::XAttributeList> & xAttrList, 100 XMLEventsImportContext* rEvents, 101 const ::rtl::OUString& rXmlEventName, 102 const ::rtl::OUString& rLanguage); 103 104 }; 105 106 #endif 107