1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski #ifndef _XMLCONFIG_HXX_ 23*b1cdbd2cSJim Jagielski #define _XMLCONFIG_HXX_ 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski #include <map> 26*b1cdbd2cSJim Jagielski #include <list> 27*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp> 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////// 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski enum ElementConfigType { ECT_HEXDUMP, ECT_BYTE, ECT_UINT, ECT_UNISTRING, ETC_FLOAT, ETC_CONTAINER }; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski class ElementConfig 34*b1cdbd2cSJim Jagielski { 35*b1cdbd2cSJim Jagielski public: ElementConfig()36*b1cdbd2cSJim Jagielski ElementConfig() : mnType( ECT_HEXDUMP ) {} ElementConfig(const rtl::OUString & rName,ElementConfigType rType)37*b1cdbd2cSJim Jagielski ElementConfig( const rtl::OUString& rName, ElementConfigType rType ) : maName( rName ), mnType( rType ) {} ElementConfig(const rtl::OUString & rName)38*b1cdbd2cSJim Jagielski ElementConfig( const rtl::OUString& rName ) : maName( rName ) {} ElementConfig(ElementConfigType rType)39*b1cdbd2cSJim Jagielski ElementConfig( ElementConfigType rType ) : mnType( rType ) {} 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const; 42*b1cdbd2cSJim Jagielski getName() const43*b1cdbd2cSJim Jagielski const rtl::OUString& getName() const { return maName; } getType() const44*b1cdbd2cSJim Jagielski ElementConfigType getType() const { return mnType; } 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski static rtl::OUString dump_hex( SvStream& rStream, sal_Size& nLength ); 47*b1cdbd2cSJim Jagielski static rtl::OUString dump_byte( SvStream& rStream, sal_Size& nLength ); 48*b1cdbd2cSJim Jagielski static rtl::OUString dump_uint( SvStream& rStream, sal_Size& nLength ); 49*b1cdbd2cSJim Jagielski static rtl::OUString dump_unistring( SvStream& rStream, sal_Size& nLength ); 50*b1cdbd2cSJim Jagielski static rtl::OUString dump_float( SvStream& rStream, sal_Size& nLength ); 51*b1cdbd2cSJim Jagielski private: 52*b1cdbd2cSJim Jagielski rtl::OUString maName; 53*b1cdbd2cSJim Jagielski ElementConfigType mnType; 54*b1cdbd2cSJim Jagielski }; 55*b1cdbd2cSJim Jagielski typedef boost::shared_ptr< ElementConfig > ElementConfigPtr; 56*b1cdbd2cSJim Jagielski typedef std::list< ElementConfigPtr > ElementConfigList; 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////// 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski class ElementValueConfig : public ElementConfig 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski public: ElementValueConfig(const rtl::OUString & rName,const rtl::OUString & rValue)63*b1cdbd2cSJim Jagielski ElementValueConfig( const rtl::OUString& rName, const rtl::OUString& rValue ) : ElementConfig( rName ), maValue( rValue ) {} 64*b1cdbd2cSJim Jagielski getValue() const65*b1cdbd2cSJim Jagielski const rtl::OUString& getValue() const { return maValue; } 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski private: 68*b1cdbd2cSJim Jagielski rtl::OUString maValue; 69*b1cdbd2cSJim Jagielski }; 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////// 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski class ElementConfigContainer : public ElementConfig 74*b1cdbd2cSJim Jagielski { 75*b1cdbd2cSJim Jagielski public: ElementConfigContainer()76*b1cdbd2cSJim Jagielski ElementConfigContainer() : ElementConfig( ETC_CONTAINER ) {} ElementConfigContainer(const::rtl::OUString & rName,ElementConfigType rType)77*b1cdbd2cSJim Jagielski ElementConfigContainer( const ::rtl::OUString& rName, ElementConfigType rType ) : ElementConfig( rName, rType ) {} ElementConfigContainer(const::rtl::OUString & rName)78*b1cdbd2cSJim Jagielski ElementConfigContainer( const ::rtl::OUString& rName ) : ElementConfig( rName, ETC_CONTAINER ) {} ElementConfigContainer(ElementConfigType rType)79*b1cdbd2cSJim Jagielski ElementConfigContainer( ElementConfigType rType ) : ElementConfig( rType ) {} 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const; 82*b1cdbd2cSJim Jagielski addElementConfig(ElementConfigPtr p)83*b1cdbd2cSJim Jagielski void addElementConfig( ElementConfigPtr p ) { maElementConfigList.push_back( p ); } 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski protected: 86*b1cdbd2cSJim Jagielski ElementConfigList maElementConfigList; 87*b1cdbd2cSJim Jagielski }; 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////// 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski class CaseElementConfig : public ElementConfigContainer 92*b1cdbd2cSJim Jagielski { 93*b1cdbd2cSJim Jagielski public: CaseElementConfig(const rtl::OUString & rValue)94*b1cdbd2cSJim Jagielski CaseElementConfig( const rtl::OUString& rValue ) : maValue( rValue ) {} 95*b1cdbd2cSJim Jagielski getValue() const96*b1cdbd2cSJim Jagielski const rtl::OUString& getValue() const { return maValue; } 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski private: 99*b1cdbd2cSJim Jagielski rtl::OUString maValue; 100*b1cdbd2cSJim Jagielski }; 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////// 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski class SwitchElementConfig : public ElementConfigContainer 105*b1cdbd2cSJim Jagielski { 106*b1cdbd2cSJim Jagielski public: SwitchElementConfig(ElementConfigType rType)107*b1cdbd2cSJim Jagielski SwitchElementConfig( ElementConfigType rType ) : ElementConfigContainer( rType ) {} 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski virtual rtl::OUString format( SvStream& rStream, sal_Size& nLength ) const; 110*b1cdbd2cSJim Jagielski }; 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////// 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski class AtomConfig : public ElementConfigContainer 115*b1cdbd2cSJim Jagielski { 116*b1cdbd2cSJim Jagielski public: AtomConfig(const::rtl::OUString & rName,bool bIsContainer)117*b1cdbd2cSJim Jagielski AtomConfig( const ::rtl::OUString& rName, bool bIsContainer ) : ElementConfigContainer( rName ), mbIsContainer( bIsContainer ) {} 118*b1cdbd2cSJim Jagielski isContainer() const119*b1cdbd2cSJim Jagielski bool isContainer() const { return mbIsContainer; } 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski protected: 122*b1cdbd2cSJim Jagielski bool mbIsContainer; 123*b1cdbd2cSJim Jagielski }; 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski typedef std::map< UINT16, ElementConfigPtr > AtomConfigMap; 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski extern AtomConfigMap gAtomConfigMap; 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski #endif 130