/************************************************************** * * 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 #include #include #include #include #include #include #include namespace writerfilter { namespace dmapper { using namespace ::com::sun::star; //using namespace ::std; /*-- 24.04.2007 09:06:35--------------------------------------------------- -----------------------------------------------------------------------*/ BorderHandler::BorderHandler( bool bOOXML ) : LoggedProperties(dmapper_logger, "BorderHandler"), m_nCurrentBorderPosition( BORDER_TOP ), m_nLineWidth(0), m_nLineType(0), m_nLineColor(0), m_nLineDistance(0), m_bOOXML( bOOXML ) { const int nBorderCount(BORDER_COUNT); std::fill_n(m_aFilledLines, nBorderCount, false); std::fill_n(m_aBorderLines, nBorderCount, table::BorderLine()); } /*-- 24.04.2007 09:06:35--------------------------------------------------- -----------------------------------------------------------------------*/ BorderHandler::~BorderHandler() { } /*-- 24.04.2007 09:06:35--------------------------------------------------- -----------------------------------------------------------------------*/ void BorderHandler::lcl_attribute(Id rName, Value & rVal) { sal_Int32 nIntValue = rVal.getInt(); /* WRITERFILTERSTATUS: table: BorderHandler_attributedata */ switch( rName ) { /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_rtf::LN_rgbrc: { writerfilter::Reference::Pointer_t pProperties = rVal.getProperties(); if( pProperties.get()) { pProperties->resolve(*this); ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor, m_aBorderLines[m_nCurrentBorderPosition], m_bOOXML ); OSL_ENSURE(m_nCurrentBorderPosition < BORDER_COUNT, "too many border values"); ++m_nCurrentBorderPosition; } } break; /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_rtf::LN_DPTLINEWIDTH: // 0x2871 // width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2. m_nLineWidth = ConversionHelper::convertTwipToMM100( nIntValue * 5 / 2 ); break; /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_rtf::LN_BRCTYPE: // 0x2872 m_nLineType = nIntValue; break; /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_ooxml::LN_CT_Border_color: case NS_rtf::LN_ICO: // 0x2873 m_nLineColor = nIntValue; break; /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */ case NS_rtf::LN_DPTSPACE: // border distance in points m_nLineDistance = ConversionHelper::convertTwipToMM100( nIntValue * 20 ); break; case NS_rtf::LN_FSHADOW: // 0x2875 //if 1 then line has shadow - unsupported case NS_rtf::LN_FFRAME: // 0x2876 case NS_rtf::LN_UNUSED2_15: // 0x2877 // ignored break; case NS_ooxml::LN_CT_Border_themeTint: break; case NS_ooxml::LN_CT_Border_themeColor: break; default: OSL_ENSURE( false, "unknown attribute"); } } /*-- 24.04.2007 09:06:35--------------------------------------------------- -----------------------------------------------------------------------*/ void BorderHandler::lcl_sprm(Sprm & rSprm) { /* WRITERFILTERSTATUS: table: BorderHandler_sprm */ switch( rSprm.getId()) { /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_ooxml::LN_CT_TblBorders_top: /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_ooxml::LN_CT_TblBorders_left: /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_ooxml::LN_CT_TblBorders_bottom: /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_ooxml::LN_CT_TblBorders_right: /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_ooxml::LN_CT_TblBorders_insideH: /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */ case NS_ooxml::LN_CT_TblBorders_insideV: { writerfilter::Reference::Pointer_t pProperties = rSprm.getProps(); if( pProperties.get()) pProperties->resolve(*this); ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor, m_aBorderLines[rSprm.getId() - NS_ooxml::LN_CT_TblBorders_top], m_bOOXML ); m_aFilledLines[ rSprm.getId( ) - NS_ooxml::LN_CT_TblBorders_top] = true; } break; default:; } } /*-- 24.04.2007 09:09:01--------------------------------------------------- -----------------------------------------------------------------------*/ PropertyMapPtr BorderHandler::getProperties() { static const PropertyIds aPropNames[BORDER_COUNT] = { PROP_TOP_BORDER, PROP_LEFT_BORDER, PROP_BOTTOM_BORDER, PROP_RIGHT_BORDER, META_PROP_HORIZONTAL_BORDER, META_PROP_VERTICAL_BORDER }; PropertyMapPtr pPropertyMap(new PropertyMap); // don't fill in default properties if( m_bOOXML || m_nCurrentBorderPosition ) { for( sal_Int32 nProp = 0; nProp < BORDER_COUNT; ++nProp) { if ( m_aFilledLines[nProp] ) { pPropertyMap->Insert( aPropNames[nProp], false, uno::makeAny( m_aBorderLines[nProp] ) ); } } } return pPropertyMap; } /*-- 14.11.2007 12:42:52--------------------------------------------------- used only in OOXML import -----------------------------------------------------------------------*/ table::BorderLine BorderHandler::getBorderLine() { table::BorderLine aBorderLine; ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor, aBorderLine, m_bOOXML ); return aBorderLine; } } //namespace dmapper } //namespace writerfilter