Files
core/ASCOfficeDocFile/DocxDocConverter/Tplc.h

104 lines
1.9 KiB
C++

#pragma once
#include "Constants.h"
#include "LID.h"
namespace ASCDocFileFormat
{
struct Tplc
{
virtual operator unsigned int() const = 0;
virtual ~Tplc() {}
};
class TplcBuildIn: public Tplc
{
private:
static const bool fBuildIn = true;
Constants::NumberingFormat ilgpdM1;
LID lid;
public:
TplcBuildIn():
ilgpdM1(Constants::numberingFormatNone), lid()
{
}
explicit TplcBuildIn( Constants::NumberingFormat _ilgpdM1, const LID& _lid ):
ilgpdM1(_ilgpdM1), lid(_lid)
{
}
explicit TplcBuildIn( unsigned int _tplcBuildIn ):
ilgpdM1(Constants::numberingFormatNone), lid()
{
this->ilgpdM1 = (Constants::NumberingFormat)FormatUtils::GetIntFromBits( _tplcBuildIn, 1, 15 );
this->lid = LID( (DocFileFormat::LanguageCode)FormatUtils::GetIntFromBits( _tplcBuildIn, 16, 16 ) );
}
virtual ~TplcBuildIn()
{
}
virtual operator unsigned int() const
{
unsigned int tplcValue = 1;
unsigned int ilgpdM1Value = ( ( (unsigned int)this->ilgpdM1 ) << 1 );
unsigned int lidValue = ( ( (unsigned int)this->lid ) << 16 );
tplcValue |= ( ilgpdM1Value | lidValue );
return tplcValue;
}
};
class TplcUser: public Tplc
{
private:
static const bool fBuildIn = false;
unsigned int wRandom;
public:
TplcUser():
wRandom(0)
{
}
explicit TplcUser( unsigned int _wRandom ):
wRandom(0)
{
this->wRandom = _wRandom;
}
virtual ~TplcUser()
{
}
virtual operator unsigned int() const
{
return this->wRandom;
}
};
struct TplcFactory
{
static Tplc* CreateTplc( unsigned int _tplc )
{
bool fBuildIn = FormatUtils::GetBitFromInt( _tplc, 0 );
Tplc* tplc = NULL;
if ( fBuildIn )
{
tplc = new TplcBuildIn( _tplc );
}
else
{
tplc = new TplcUser( _tplc );
}
return tplc;
}
};
}