blob: 5eb9cfe85e49444a5df9e2597d38d3fec0d05c1d [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.
*
*************************************************************/
#include <stdio.h>
#include <rtl/ustring.hxx>
#include <resourcemodel/ResourceModelHelper.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <SettingsTable.hxx>
#include <resourcemodel/ResourceModelHelper.hxx>
#include <doctok/resourceids.hxx>
#include <ooxml/resourceids.hxx>
#include <ConversionHelper.hxx>
#include "dmapperLoggers.hxx"
namespace writerfilter {
using resourcemodel::resolveSprmProps;
namespace dmapper
{
struct SettingsTable_Impl
{
DomainMapper& m_rDMapper;
const uno::Reference< lang::XMultiServiceFactory > m_xTextFactory;
::rtl::OUString m_sCharacterSpacing;
::rtl::OUString m_sDecimalSymbol;
::rtl::OUString m_sListSeparatorForFields; //2.15.1.56 listSeparator (List Separator for Field Code Evaluation)
int m_nDefaultTabStop;
int m_nHyphenationZone;
bool m_bNoPunctuationKerning;
bool m_doNotIncludeSubdocsInStats; // Do Not Include Content in Text Boxes, Footnotes, and Endnotes in Document Statistics)
bool m_bRecordChanges;
int m_nEdit;
bool m_bFormatting;
bool m_bEnforcement;
int m_nCryptProviderType;
int m_nCryptAlgorithmClass;
int m_nCryptAlgorithmType;
::rtl::OUString m_sCryptAlgorithmSid;
int m_nCryptSpinCount;
::rtl::OUString m_sCryptProvider;
::rtl::OUString m_sAlgIdExt;
::rtl::OUString m_sAlgIdExtSource;
::rtl::OUString m_sCryptProviderTypeExt;
::rtl::OUString m_sCryptProviderTypeExtSource;
::rtl::OUString m_sHash;
::rtl::OUString m_sSalt;
SettingsTable_Impl( DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory ) :
m_rDMapper( rDMapper )
, m_xTextFactory( xTextFactory )
, m_nDefaultTabStop( 720 ) //default is 1/2 in
, m_nHyphenationZone(0)
, m_bNoPunctuationKerning(false)
, m_doNotIncludeSubdocsInStats(false)
, m_bRecordChanges(false)
, m_nEdit(NS_ooxml::LN_Value_wordprocessingml_ST_DocProtect_none)
, m_bFormatting(false)
, m_bEnforcement(false)
, m_nCryptProviderType(NS_ooxml::LN_Value_wordprocessingml_ST_CryptProv_rsaAES)
, m_nCryptAlgorithmClass(NS_ooxml::LN_Value_wordprocessingml_ST_AlgClass_hash)
, m_nCryptAlgorithmType(NS_ooxml::LN_Value_wordprocessingml_ST_AlgType_typeAny)
, m_nCryptSpinCount(0)
{}
};
SettingsTable::SettingsTable(DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory)
: LoggedProperties(dmapper_logger, "SettingsTable")
, LoggedTable(dmapper_logger, "SettingsTable")
, m_pImpl( new SettingsTable_Impl(rDMapper, xTextFactory) )
{
// printf("SettingsTable::SettingsTable()\n");
}
SettingsTable::~SettingsTable()
{
delete m_pImpl;
}
void SettingsTable::lcl_attribute(Id nName, Value & val)
{
(void) nName;
int nIntValue = val.getInt();
(void)nIntValue;
::rtl::OUString sValue = val.getString();
(void)sValue;
//printf ( "SettingsTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
/* WRITERFILTERSTATUS: table: SettingsTable_attributedata */
#if 0 //no values known, yet
switch(Name)
{
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml:::
break;
default:
{
}
}
#endif
}
void SettingsTable::lcl_sprm(Sprm& rSprm)
{
sal_uInt32 nSprmId = rSprm.getId();
Value::Pointer_t pValue = rSprm.getValue();
sal_Int32 nIntValue = pValue->getInt();
(void)nIntValue;
rtl::OUString sStringValue = pValue->getString();
//printf ( "SettingsTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
/* WRITERFILTERSTATUS: table: SettingsTable_sprm */
switch(nSprmId)
{
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_zoom: // 92469;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_proofState: // 92489;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_attachedTemplate: // 92491;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_hdrShapeDefaults: // 92544;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_footnotePr: // 92545;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_endnotePr: // 92546;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_compat: // 92547;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_themeFontLang: // 92552;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_shapeDefaults: // 92560;
//PropertySetValues - need to be resolved
{
writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
if( pProperties.get())
pProperties->resolve(*this);
}
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_stylePaneFormatFilter: // 92493;
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_defaultTabStop: // 92505;
m_pImpl->m_nDefaultTabStop = nIntValue;
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_noPunctuationKerning: // 92526;
m_pImpl->m_bNoPunctuationKerning = nIntValue ? true : false;
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_characterSpacingControl: // 92527;
m_pImpl->m_sCharacterSpacing = sStringValue; // doNotCompress, compressPunctuation, compressPunctuationAndJapaneseKana
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_doNotIncludeSubdocsInStats: // 92554; // Do Not Include Content in Text Boxes, Footnotes, and Endnotes in Document Statistics)
m_pImpl->m_doNotIncludeSubdocsInStats = nIntValue? true : false;
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_decimalSymbol: // 92562;
m_pImpl->m_sDecimalSymbol = sStringValue;
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_listSeparator: // 92563;
m_pImpl->m_sListSeparatorForFields = sStringValue;
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_rsids: // 92549; revision save Ids - probably not necessary
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_hyphenationZone: // 92508;
m_pImpl->m_nHyphenationZone = nIntValue;
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Compat_useFELayout: // 92422;
// useFELayout (Do Not Bypass East Asian/Complex Script Layout Code - support of old versions of Word - ignored)
break;
case NS_ooxml::LN_CT_Settings_trackRevisions:
{
m_pImpl->m_bRecordChanges = bool(rSprm.getValue( )->getInt( ) );
}
break;
case NS_ooxml::LN_CT_Settings_documentProtection:
{
resolveSprmProps(*this, rSprm);
}
break;
default:
{
#ifdef DEBUG_DMAPPER_SETTINGS_TABLE
dmapper_logger->element("unhandled");
#endif
}
}
}
void SettingsTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
{
// printf ( "SettingsTable::entry\n");
ref->resolve(*this);
}
//returns default TabStop in 1/100th mm
/*-- 22.09.2009 10:29:32---------------------------------------------------
-----------------------------------------------------------------------*/
int SettingsTable::GetDefaultTabStop() const
{
return ConversionHelper::convertTwipToMM100( m_pImpl->m_nDefaultTabStop );
}
void SettingsTable::ApplyProperties( uno::Reference< text::XTextDocument > xDoc )
{
uno::Reference< beans::XPropertySet> xDocProps( xDoc, uno::UNO_QUERY );
// Record changes value
xDocProps->setPropertyValue( ::rtl::OUString::createFromAscii( "RecordChanges" ), uno::makeAny( m_pImpl->m_bRecordChanges ) );
}
}//namespace dmapper
} //namespace writerfilter