diff options
21 files changed, 633 insertions, 248 deletions
diff --git a/reportbuilder/util/hidother.src b/reportbuilder/util/hidother.src deleted file mode 100644 index a06b9d89a4ec..000000000000 --- a/reportbuilder/util/hidother.src +++ /dev/null @@ -1,146 +0,0 @@ -/************************************************************************* -* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * -************************************************************************/ - -#include "../inc/helpids.hrc" -#include "../inc/rptui_slotid.hrc" - -#ifndef _SBASLTID_HRC -#include <svx/svxids.hrc> -#endif - -hidspecial UID_RPT_RPT_APP_VIEW { HelpId = UID_RPT_RPT_APP_VIEW ; }; -hidspecial UID_RPT_SCROLLWINDOW { HelpId = UID_RPT_SCROLLWINDOW ; }; -hidspecial UID_RPT_REPORTWINDOW { HelpId = UID_RPT_REPORTWINDOW ; }; -hidspecial HID_RPT_HORZ_RULER { HelpId = HID_RPT_HORZ_RULER ; }; -hidspecial UID_RPT_SECTIONSWINDOW { HelpId = UID_RPT_SECTIONSWINDOW ; }; -hidspecial UID_RPT_VIEWSWINDOW { HelpId = UID_RPT_VIEWSWINDOW ; }; -hidspecial HID_RPT_ENDMARKER { HelpId = HID_RPT_ENDMARKER ; }; -hidspecial HID_RPT_SPLITTER { HelpId = HID_RPT_SPLITTER ; }; -hidspecial HID_REPORTSECTION { HelpId = HID_REPORTSECTION ; }; -hidspecial HID_RPT_HORZ_SCROLLBAR { HelpId = HID_RPT_HORZ_SCROLLBAR ; }; -hidspecial HID_RPT_VERT_SCROLLBAR { HelpId = HID_RPT_VERT_SCROLLBAR ; }; -hidspecial HID_RPT_STARTMARKER { HelpId = HID_RPT_STARTMARKER ; }; - -hidspecial SID_RPT_SHOWREPORTEXPLORER { HelpId = SID_RPT_SHOWREPORTEXPLORER ; }; -hidspecial SID_PAGEHEADERFOOTER { HelpId = SID_PAGEHEADERFOOTER ; }; -hidspecial SID_REPORTHEADERFOOTER { HelpId = SID_REPORTHEADERFOOTER ; }; -hidspecial SID_SORTINGANDGROUPING { HelpId = SID_SORTINGANDGROUPING ; }; -hidspecial SID_INSERT_FLD_PGNUMBER { HelpId = SID_INSERT_FLD_PGNUMBER ; }; -hidspecial SID_CONDITIONALFORMATTING { HelpId = SID_CONDITIONALFORMATTING ; }; -hidspecial SID_PAGEDIALOG { HelpId = SID_PAGEDIALOG ; }; -hidspecial SID_SETCONTROLDEFAULTS { HelpId = SID_SETCONTROLDEFAULTS ; }; -hidspecial SID_INSERTBREAK { HelpId = SID_INSERTBREAK ; }; -hidspecial HID_RPT_FIELDEXPRESSION { HelpId = HID_RPT_FIELDEXPRESSION ; }; -hidspecial HID_RPT_SORTORDER { HelpId = HID_RPT_SORTORDER ; }; -hidspecial HID_RPT_GROUPSBRW { HelpId = HID_RPT_GROUPSBRW ; }; -hidspecial HID_RPT_GROUPSSORTING_DLG { HelpId = HID_RPT_GROUPSSORTING_DLG ; }; -hidspecial HID_RPT_PAGENUMBERS_DLG { HelpId = HID_RPT_PAGENUMBERS_DLG ; }; -hidspecial HID_RPT_DATETIME_DLG { HelpId = HID_RPT_DATETIME_DLG ; }; -hidspecial HID_RPT_CONDFORMAT_DLG { HelpId = HID_RPT_CONDFORMAT_DLG ; }; -hidspecial HID_RPT_CRTL_FORMAT_PREVIEW { HelpId = HID_RPT_CRTL_FORMAT_PREVIEW ; }; -hidspecial HID_RPT_COND_DLG { HelpId = HID_RPT_COND_DLG ; }; -hidspecial HID_RPT_POPUP_COLOR_CTRL { HelpId = HID_RPT_POPUP_COLOR_CTRL ; }; -hidspecial HID_RPT_POPUP_COLOR { HelpId = HID_RPT_POPUP_COLOR ; }; -hidspecial SID_ESCAPE { HelpId = SID_ESCAPE ; }; -hidspecial HID_RPT_PROPDLG_TAB_GENERAL { HelpId = HID_RPT_PROPDLG_TAB_GENERAL ; }; -hidspecial HID_RPT_PROPDLG_TAB_DATA { HelpId = HID_RPT_PROPDLG_TAB_DATA ; }; - -hidspecial HID_RPT_PROP_FORCENEWPAGE { HelpId = HID_RPT_PROP_FORCENEWPAGE; }; -hidspecial HID_RPT_PROP_NEWROWORCOL { HelpId = HID_RPT_PROP_NEWROWORCOL; }; -hidspecial HID_RPT_PROP_KEEPTOGETHER { HelpId = HID_RPT_PROP_KEEPTOGETHER; }; -hidspecial HID_RPT_PROP_CANGROW { HelpId = HID_RPT_PROP_CANGROW; }; -hidspecial HID_RPT_PROP_CANSHRINK { HelpId = HID_RPT_PROP_CANSHRINK; }; -hidspecial HID_RPT_PROP_REPEATSECTION { HelpId = HID_RPT_PROP_REPEATSECTION; }; -hidspecial HID_RPT_PROP_PRINTREPEATEDVALUES { HelpId = HID_RPT_PROP_PRINTREPEATEDVALUES; }; -hidspecial HID_RPT_PROP_CONDITIONALPRINTEXPRESSION { HelpId = HID_RPT_PROP_CONDITIONALPRINTEXPRESSION; }; -hidspecial HID_RPT_PROP_STARTNEWCOLUMN { HelpId = HID_RPT_PROP_STARTNEWCOLUMN; }; -hidspecial HID_RPT_PROP_STARTNEWPAGE { HelpId = HID_RPT_PROP_STARTNEWPAGE; }; -hidspecial HID_RPT_PROP_RESETPAGENUMBER { HelpId = HID_RPT_PROP_RESETPAGENUMBER; }; -hidspecial HID_RPT_PROP_MINHEIGHTNEWPAGE { HelpId = HID_RPT_PROP_MINHEIGHTNEWPAGE; }; -hidspecial HID_RPT_PROP_PRINTWHENGROUPCHANGE { HelpId = HID_RPT_PROP_PRINTWHENGROUPCHANGE; }; -hidspecial HID_RPT_PROP_VISIBLE { HelpId = HID_RPT_PROP_VISIBLE; }; -hidspecial HID_RPT_PROP_GROUPKEEPTOGETHER { HelpId = HID_RPT_PROP_GROUPKEEPTOGETHER; }; -hidspecial HID_RPT_PROP_PAGEHEADEROPTION { HelpId = HID_RPT_PROP_PAGEHEADEROPTION; }; -hidspecial HID_RPT_PROP_PAGEFOOTEROPTION { HelpId = HID_RPT_PROP_PAGEFOOTEROPTION; }; -hidspecial UID_RPT_PROP_DLG_LINE_STYLE { HelpId = UID_RPT_PROP_DLG_LINE_STYLE; }; -hidspecial HID_RPT_PROP_RPT_POSITIONX { HelpId = HID_RPT_PROP_RPT_POSITIONX; }; -hidspecial HID_RPT_PROP_RPT_POSITIONY { HelpId = HID_RPT_PROP_RPT_POSITIONY; }; -hidspecial HID_RPT_PROP_RPT_WIDTH { HelpId = HID_RPT_PROP_RPT_WIDTH; }; -hidspecial HID_RPT_PROP_RPT_HEIGHT { HelpId = HID_RPT_PROP_RPT_HEIGHT; }; -hidspecial HID_RPT_START_TITLE { HelpId = HID_RPT_START_TITLE; }; -hidspecial HID_RPT_START_IMAGE { HelpId = HID_RPT_START_IMAGE; }; -hidspecial SID_EXECUTE_REPORT { HelpId = SID_EXECUTE_REPORT; }; - -hidspecial SID_RPT_TEXTDOCUMENT { HelpId = SID_RPT_TEXTDOCUMENT; }; -hidspecial SID_RPT_SPREADSHEET { HelpId = SID_RPT_SPREADSHEET; }; -hidspecial HID_RPT_PROP_DEEPTRAVERSING { HelpId = HID_RPT_PROP_DEEPTRAVERSING; }; -hidspecial HID_RPT_PROP_PREEVALUATED { HelpId = HID_RPT_PROP_PREEVALUATED; }; -hidspecial HID_RPT_NAVIGATOR_DLG { HelpId = HID_RPT_NAVIGATOR_DLG; }; -hidspecial HID_REPORT_NAVIGATOR_TREE { HelpId = HID_REPORT_NAVIGATOR_TREE; }; -hidspecial SID_RPT_NEW_FUNCTION { HelpId = SID_RPT_NEW_FUNCTION; }; -hidspecial HID_RPT_PROP_FORMULA { HelpId = HID_RPT_PROP_FORMULA; }; -hidspecial HID_RPT_PROP_INITIALFORMULA { HelpId = HID_RPT_PROP_INITIALFORMULA; };x -hidspecial HID_RPT_PROP_DATAFIELD { HelpId = HID_RPT_PROP_DATAFIELD; }; -hidspecial HID_RPT_PROP_RPT_FONT { HelpId = HID_RPT_PROP_RPT_FONT; }; -hidspecial UID_RPT_RPT_PROP_DLG_FONT_TYPE { HelpId = UID_RPT_RPT_PROP_DLG_FONT_TYPE; }; -hidspecial HID_RPT_PROP_BACKCOLOR { HelpId = HID_RPT_PROP_BACKCOLOR; }; -hidspecial HID_RPT_PROP_PRESERVEIRI { HelpId = HID_RPT_PROP_PRESERVEIRI; }; - -hidspecial SID_OBJECT_SMALLESTWIDTH { HelpId = SID_OBJECT_SMALLESTWIDTH; }; -hidspecial SID_OBJECT_SMALLESTHEIGHT { HelpId = SID_OBJECT_SMALLESTHEIGHT; }; -hidspecial SID_OBJECT_GREATESTWIDTH { HelpId = SID_OBJECT_GREATESTWIDTH; }; -hidspecial SID_OBJECT_GREATESTHEIGHT { HelpId = SID_OBJECT_GREATESTHEIGHT; }; - -hidspecial HID_RPT_PROP_BACKTRANSPARENT { HelpId = HID_RPT_PROP_BACKTRANSPARENT; }; -hidspecial HID_RPT_PROP_CONTROLBACKGROUNDTRANSPARENT { HelpId = HID_RPT_PROP_CONTROLBACKGROUNDTRANSPARENT; }; - -hidspecial SID_ARRANGEMENU { HelpId = SID_ARRANGEMENU; }; -hidspecial SID_SELECTALL_IN_SECTION { HelpId = SID_SELECTALL_IN_SECTION; }; -hidspecial SID_SECTION_ALIGN { HelpId = SID_SECTION_ALIGN; }; -hidspecial SID_SECTION_ALIGN_LEFT { HelpId = SID_SECTION_ALIGN_LEFT; }; -hidspecial SID_SECTION_ALIGN_CENTER { HelpId = SID_SECTION_ALIGN_CENTER; }; -hidspecial SID_SECTION_ALIGN_RIGHT { HelpId = SID_SECTION_ALIGN_RIGHT; }; -hidspecial SID_SECTION_ALIGN_UP { HelpId = SID_SECTION_ALIGN_UP; }; -hidspecial SID_SECTION_ALIGN_MIDDLE { HelpId = SID_SECTION_ALIGN_MIDDLE; }; -hidspecial SID_SECTION_ALIGN_DOWN { HelpId = SID_SECTION_ALIGN_DOWN; }; -hidspecial SID_NEXT_MARK { HelpId = SID_NEXT_MARK; }; -hidspecial SID_PREV_MARK { HelpId = SID_PREV_MARK; }; - -hidspecial UID_RPT_PROP_CHARTTYPE_DLG { HelpId = UID_RPT_PROP_CHARTTYPE_DLG; }; -hidspecial HID_RPT_PROP_CHARTTYPE { HelpId = HID_RPT_PROP_CHARTTYPE; }; -hidspecial HID_RPT_FIELD_SEL_WIN { HelpId = HID_RPT_FIELD_SEL_WIN; }; -hidspecial HID_RPT_FIELD_SEL { HelpId = HID_RPT_FIELD_SEL; }; -hidspecial HID_RPT_PROP_FORMULALIST { HelpId = HID_RPT_PROP_FORMULALIST; }; -hidspecial HID_RPT_PROP_SCOPE { HelpId = HID_RPT_PROP_SCOPE; }; -hidspecial HID_RPT_PROP_TYPE { HelpId = HID_RPT_PROP_TYPE; }; -hidspecial UID_RPT_PROP_DLG_LINKFIELDS { HelpId = UID_RPT_PROP_DLG_LINKFIELDS; }; -hidspecial HID_RPT_PROP_MASTERFIELDS { HelpId = HID_RPT_PROP_MASTERFIELDS; }; -hidspecial HID_RPT_PROP_DETAILFIELDS { HelpId = HID_RPT_PROP_DETAILFIELDS; }; -hidspecial HID_RPT_PROP_PREVIEW_COUNT { HelpId = HID_RPT_PROP_PREVIEW_COUNT; }; -hidspecial HID_RPT_PROP_AREA { HelpId = HID_RPT_PROP_AREA; }; -hidspecial UID_RPT_RPT_PROP_DLG_AREA { HelpId = UID_RPT_RPT_PROP_DLG_AREA; }; -hidspecial HID_RPT_PROP_MIMETYPE { HelpId = HID_RPT_PROP_MIMETYPE; };
\ No newline at end of file diff --git a/sdext/source/minimizer/graphiccollector.cxx b/sdext/source/minimizer/graphiccollector.cxx index 74ed91cbd099..b88f49714396 100644 --- a/sdext/source/minimizer/graphiccollector.cxx +++ b/sdext/source/minimizer/graphiccollector.cxx @@ -70,7 +70,7 @@ const DeviceInfo& GraphicCollector::GetDeviceInfo( const Reference< XComponentCo return aDeviceInfo; } -void ImpAddEntity( std::vector< GraphicCollector::GraphicEntity >& rGraphicEntities, Reference< XGraphic >& rxGraphic, const GraphicSettings& rGraphicSettings, const GraphicCollector::GraphicUser& rUser ) +void ImpAddEntity( std::vector< GraphicCollector::GraphicEntity >& rGraphicEntities, const GraphicSettings& rGraphicSettings, const GraphicCollector::GraphicUser& rUser ) { const rtl::OUString aGraphicURL( rUser.maGraphicURL ); const rtl::OUString sPackageURL( OUString::createFromAscii( "vnd.sun.star.GraphicObject:" ) ); @@ -93,7 +93,7 @@ void ImpAddEntity( std::vector< GraphicCollector::GraphicEntity >& rGraphicEntit } if ( aIter == rGraphicEntities.end() ) { - GraphicCollector::GraphicEntity aEntity( rxGraphic, rUser ); + GraphicCollector::GraphicEntity aEntity( rUser ); rGraphicEntities.push_back( aEntity ); } } @@ -133,7 +133,7 @@ void ImpAddGraphicEntity( const Reference< XComponentContext >& rxMSF, Reference } aUser.maGraphicCropLogic = aGraphicCropLogic; aUser.maLogicalSize = aLogicalSize; - ImpAddEntity( rGraphicEntities, xGraphic, rGraphicSettings, aUser ); + ImpAddEntity( rGraphicEntities, rGraphicSettings, aUser ); } } @@ -198,7 +198,7 @@ void ImpAddFillBitmapEntity( const Reference< XComponentContext >& rxMSF, const aUser.mbFillBitmap = sal_True; aUser.maLogicalSize = aLogicalSize; aUser.mxPagePropertySet = rxPagePropertySet; - ImpAddEntity( rGraphicEntities, xGraphic, rGraphicSettings, aUser ); + ImpAddEntity( rGraphicEntities, rGraphicSettings, aUser ); } } } diff --git a/sdext/source/minimizer/graphiccollector.hxx b/sdext/source/minimizer/graphiccollector.hxx index cf2c35e3ae92..f7cd6dd06674 100644 --- a/sdext/source/minimizer/graphiccollector.hxx +++ b/sdext/source/minimizer/graphiccollector.hxx @@ -76,14 +76,13 @@ class GraphicCollector struct GraphicEntity { - com::sun::star::uno::Reference< com::sun::star::graphic::XGraphic > mxGraphic; // the corresponding XGraphic of the Shape com::sun::star::awt::Size maLogicalSize; // the biggest logical size the graphic will be displayed sal_Bool mbRemoveCropArea; // com::sun::star::text::GraphicCrop maGraphicCropLogic; std::vector< GraphicUser > maUser; - GraphicEntity( const com::sun::star::uno::Reference< com::sun::star::graphic::XGraphic >& xGraphic, const GraphicUser& rUser ) - : mxGraphic( xGraphic ), maLogicalSize( rUser.maLogicalSize ), mbRemoveCropArea( sal_False ), maGraphicCropLogic( 0, 0, 0, 0 ) { maUser.push_back( rUser ); }; + GraphicEntity( const GraphicUser& rUser ) + : maLogicalSize( rUser.maLogicalSize ), mbRemoveCropArea( sal_False ), maGraphicCropLogic( 0, 0, 0, 0 ) { maUser.push_back( rUser ); }; }; static const com::sun::star::awt::DeviceInfo& GetDeviceInfo( const com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& rxFact ); diff --git a/sdext/source/minimizer/impoptimizer.cxx b/sdext/source/minimizer/impoptimizer.cxx index 298c12e6b958..59c5db83711e 100644 --- a/sdext/source/minimizer/impoptimizer.cxx +++ b/sdext/source/minimizer/impoptimizer.cxx @@ -409,66 +409,84 @@ void CompressGraphics( ImpOptimizer& rOptimizer, const Reference< XComponentCont rOptimizer.SetStatusValue( TK_Progress, Any( static_cast< sal_Int32 >( nProgress ) ) ); rOptimizer.DispatchStatus(); - GraphicSettings aGraphicSettings( rGraphicSettings ); - aGraphicSettings.mbRemoveCropArea = aGraphicIter->mbRemoveCropArea; - - Reference< XPropertySet > xNewGraphicPropertySet( aGraphicIter->mxGraphic, UNO_QUERY_THROW ); - awt::Size aSize100thMM( GraphicCollector::GetOriginalSize( rxMSF, aGraphicIter->mxGraphic ) ); - Reference< XGraphic > xNewGraphic( ImpCompressGraphic( rxMSF, aGraphicIter->mxGraphic, aGraphicIter->maLogicalSize, aGraphicIter->maGraphicCropLogic, aGraphicSettings ) ); - if ( xNewGraphic.is() ) + if ( aGraphicIter->maUser.size() ) { - // applying graphic to each user - std::vector< GraphicCollector::GraphicUser >::iterator aGraphicUserIter( aGraphicIter->maUser.begin() ); - while( aGraphicUserIter != aGraphicIter->maUser.end() ) + GraphicSettings aGraphicSettings( rGraphicSettings ); + aGraphicSettings.mbRemoveCropArea = aGraphicIter->mbRemoveCropArea; + + Reference< XGraphic > xGraphic; + if ( aGraphicIter->maUser[ 0 ].mbFillBitmap && aGraphicIter->maUser[ 0 ].mxPropertySet.is() ) + { + Reference< XBitmap > xFillBitmap; + if ( aGraphicIter->maUser[ 0 ].mxPropertySet->getPropertyValue( TKGet( TK_FillBitmap ) ) >>= xFillBitmap ) + xGraphic = Reference< XGraphic >( xFillBitmap, UNO_QUERY_THROW ); + } + else if ( aGraphicIter->maUser[ 0 ].mxShape.is() ) + { + Reference< XPropertySet > xShapePropertySet( aGraphicIter->maUser[ 0 ].mxShape, UNO_QUERY_THROW ); + xShapePropertySet->getPropertyValue( TKGet( TK_Graphic ) ) >>= xGraphic; + } + if ( xGraphic.is() ) { - if ( aGraphicUserIter->mxShape.is() ) + Reference< XPropertySet > xNewGraphicPropertySet( xGraphic, UNO_QUERY_THROW ); + awt::Size aSize100thMM( GraphicCollector::GetOriginalSize( rxMSF, xGraphic ) ); + Reference< XGraphic > xNewGraphic( ImpCompressGraphic( rxMSF, xGraphic, aGraphicIter->maLogicalSize, aGraphicIter->maGraphicCropLogic, aGraphicSettings ) ); + if ( xNewGraphic.is() ) { - rtl::OUString sEmptyGraphicURL; - Reference< XPropertySet > xShapePropertySet( aGraphicUserIter->mxShape, UNO_QUERY_THROW ); - xShapePropertySet->setPropertyValue( TKGet( TK_GraphicURL ), Any( sEmptyGraphicURL ) ); - xShapePropertySet->setPropertyValue( TKGet( TK_Graphic ), Any( xNewGraphic ) ); - - if ( aGraphicUserIter->maGraphicCropLogic.Left || aGraphicUserIter->maGraphicCropLogic.Top - || aGraphicUserIter->maGraphicCropLogic.Right || aGraphicUserIter->maGraphicCropLogic.Bottom ) - { // removing crop area was not possible or should't been applied - text::GraphicCrop aGraphicCropLogic( 0, 0, 0, 0 ); - if ( !aGraphicSettings.mbRemoveCropArea ) + // applying graphic to each user + std::vector< GraphicCollector::GraphicUser >::iterator aGraphicUserIter( aGraphicIter->maUser.begin() ); + while( aGraphicUserIter != aGraphicIter->maUser.end() ) + { + if ( aGraphicUserIter->mxShape.is() ) { - awt::Size aNewSize( GraphicCollector::GetOriginalSize( rxMSF, xNewGraphic ) ); - aGraphicCropLogic.Left = (sal_Int32)((double)aGraphicUserIter->maGraphicCropLogic.Left * ((double)aNewSize.Width / (double)aSize100thMM.Width)); - aGraphicCropLogic.Top = (sal_Int32)((double)aGraphicUserIter->maGraphicCropLogic.Top * ((double)aNewSize.Height / (double)aSize100thMM.Height)); - aGraphicCropLogic.Right = (sal_Int32)((double)aGraphicUserIter->maGraphicCropLogic.Right * ((double)aNewSize.Width / (double)aSize100thMM.Width)); - aGraphicCropLogic.Bottom = (sal_Int32)((double)aGraphicUserIter->maGraphicCropLogic.Bottom * ((double)aNewSize.Height / (double)aSize100thMM.Height)); + rtl::OUString sEmptyGraphicURL; + Reference< XPropertySet > xShapePropertySet( aGraphicUserIter->mxShape, UNO_QUERY_THROW ); + xShapePropertySet->setPropertyValue( TKGet( TK_GraphicURL ), Any( sEmptyGraphicURL ) ); + xShapePropertySet->setPropertyValue( TKGet( TK_Graphic ), Any( xNewGraphic ) ); + + if ( aGraphicUserIter->maGraphicCropLogic.Left || aGraphicUserIter->maGraphicCropLogic.Top + || aGraphicUserIter->maGraphicCropLogic.Right || aGraphicUserIter->maGraphicCropLogic.Bottom ) + { // removing crop area was not possible or should't been applied + text::GraphicCrop aGraphicCropLogic( 0, 0, 0, 0 ); + if ( !aGraphicSettings.mbRemoveCropArea ) + { + awt::Size aNewSize( GraphicCollector::GetOriginalSize( rxMSF, xNewGraphic ) ); + aGraphicCropLogic.Left = (sal_Int32)((double)aGraphicUserIter->maGraphicCropLogic.Left * ((double)aNewSize.Width / (double)aSize100thMM.Width)); + aGraphicCropLogic.Top = (sal_Int32)((double)aGraphicUserIter->maGraphicCropLogic.Top * ((double)aNewSize.Height / (double)aSize100thMM.Height)); + aGraphicCropLogic.Right = (sal_Int32)((double)aGraphicUserIter->maGraphicCropLogic.Right * ((double)aNewSize.Width / (double)aSize100thMM.Width)); + aGraphicCropLogic.Bottom = (sal_Int32)((double)aGraphicUserIter->maGraphicCropLogic.Bottom * ((double)aNewSize.Height / (double)aSize100thMM.Height)); + } + xShapePropertySet->setPropertyValue( TKGet( TK_GraphicCrop ), Any( aGraphicCropLogic ) ); + } } - xShapePropertySet->setPropertyValue( TKGet( TK_GraphicCrop ), Any( aGraphicCropLogic ) ); - } - } - else if ( aGraphicUserIter->mxPropertySet.is() ) - { - Reference< XBitmap > xFillBitmap( xNewGraphic, UNO_QUERY ); - if ( xFillBitmap.is() ) - { - awt::Size aSize; - sal_Bool bLogicalSize; - - Reference< XPropertySet >& rxPropertySet( aGraphicUserIter->mxPropertySet ); - rxPropertySet->setPropertyValue( TKGet( TK_FillBitmap ), Any( xFillBitmap ) ); - if ( ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapLogicalSize ) ) >>= bLogicalSize ) - && ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapSizeX ) ) >>= aSize.Width ) - && ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapSizeY ) ) >>= aSize.Height ) ) + else if ( aGraphicUserIter->mxPropertySet.is() ) { - if ( !aSize.Width || !aSize.Height ) + Reference< XBitmap > xFillBitmap( xNewGraphic, UNO_QUERY ); + if ( xFillBitmap.is() ) { - rxPropertySet->setPropertyValue( TKGet( TK_FillBitmapLogicalSize ), Any( sal_True ) ); - rxPropertySet->setPropertyValue( TKGet( TK_FillBitmapSizeX ), Any( aGraphicUserIter->maLogicalSize.Width ) ); - rxPropertySet->setPropertyValue( TKGet( TK_FillBitmapSizeY ), Any( aGraphicUserIter->maLogicalSize.Height ) ); + awt::Size aSize; + sal_Bool bLogicalSize; + + Reference< XPropertySet >& rxPropertySet( aGraphicUserIter->mxPropertySet ); + rxPropertySet->setPropertyValue( TKGet( TK_FillBitmap ), Any( xFillBitmap ) ); + if ( ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapLogicalSize ) ) >>= bLogicalSize ) + && ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapSizeX ) ) >>= aSize.Width ) + && ( rxPropertySet->getPropertyValue( TKGet( TK_FillBitmapSizeY ) ) >>= aSize.Height ) ) + { + if ( !aSize.Width || !aSize.Height ) + { + rxPropertySet->setPropertyValue( TKGet( TK_FillBitmapLogicalSize ), Any( sal_True ) ); + rxPropertySet->setPropertyValue( TKGet( TK_FillBitmapSizeX ), Any( aGraphicUserIter->maLogicalSize.Width ) ); + rxPropertySet->setPropertyValue( TKGet( TK_FillBitmapSizeY ), Any( aGraphicUserIter->maLogicalSize.Height ) ); + } + } + if ( aGraphicUserIter->mxPagePropertySet.is() ) + aGraphicUserIter->mxPagePropertySet->setPropertyValue( TKGet( TK_Background ), Any( rxPropertySet ) ); } } - if ( aGraphicUserIter->mxPagePropertySet.is() ) - aGraphicUserIter->mxPagePropertySet->setPropertyValue( TKGet( TK_Background ), Any( rxPropertySet ) ); + aGraphicUserIter++; } } - aGraphicUserIter++; } } aGraphicIter++; diff --git a/sdext/source/minimizer/makefile.mk b/sdext/source/minimizer/makefile.mk index 969a0cb1f248..41581199fb54 100644 --- a/sdext/source/minimizer/makefile.mk +++ b/sdext/source/minimizer/makefile.mk @@ -76,7 +76,7 @@ SHL1DEPN= SHL1IMPLIB= i$(SHL1TARGET) SHL1LIBS= $(SLB)$/$(TARGET).lib SHL1DEF= $(MISC)$/$(SHL1TARGET).def -SHL1VERSIONMAP=$(SOLARENV)/src/component.map +SHL1VERSIONMAP=$(SOLARENV)/src/reg-component.map SHL1RPATH= OXT DEF1NAME= $(SHL1TARGET) diff --git a/sdext/source/pdfimport/config/description.xml b/sdext/source/pdfimport/config/description.xml index b22b81587fc7..1fdd3b28aea1 100755..100644 --- a/sdext/source/pdfimport/config/description.xml +++ b/sdext/source/pdfimport/config/description.xml @@ -16,7 +16,7 @@ </simple-license> </registration> - <version value="1.0.3" /> + <version value="1.0.4" /> <platform value="UPDATED_SUPPORTED_PLATFORM" /> diff --git a/sdext/source/pdfimport/inc/treevisitorfactory.hxx b/sdext/source/pdfimport/inc/treevisitorfactory.hxx index c573b63b6012..ba42eb759b04 100644 --- a/sdext/source/pdfimport/inc/treevisitorfactory.hxx +++ b/sdext/source/pdfimport/inc/treevisitorfactory.hxx @@ -53,7 +53,7 @@ namespace pdfi virtual boost::shared_ptr<ElementTreeVisitor> createStyleCollectingVisitor( StyleContainer&, PDFIProcessor&) const = 0; /// Create visitor that emits tree to an output target - virtual boost::shared_ptr<ElementTreeVisitor> createEmittingVisitor(EmitContext&) const = 0; + virtual boost::shared_ptr<ElementTreeVisitor> createEmittingVisitor(EmitContext&, PDFIProcessor&) const = 0; }; typedef boost::shared_ptr<TreeVisitorFactory> TreeVisitorFactorySharedPtr; diff --git a/sdext/source/pdfimport/makefile.mk b/sdext/source/pdfimport/makefile.mk index 8a7f7de20e18..84440862cbb5 100755..100644 --- a/sdext/source/pdfimport/makefile.mk +++ b/sdext/source/pdfimport/makefile.mk @@ -90,7 +90,7 @@ SHL1STDLIBS=\ SHL1DEPN= SHL1IMPLIB= i$(SHL1TARGET) SHL1DEF= $(MISC)$/$(SHL1TARGET).def -SHL1VERSIONMAP=$(SOLARENV)/src/component.map +SHL1VERSIONMAP=$(SOLARENV)/src/reg-component.map SHL1RPATH=OXT DEF1NAME=$(SHL1TARGET) diff --git a/sdext/source/pdfimport/tree/drawtreevisiting.cxx b/sdext/source/pdfimport/tree/drawtreevisiting.cxx index 2fd17d059e23..5f1bb429ce8a 100644 --- a/sdext/source/pdfimport/tree/drawtreevisiting.cxx +++ b/sdext/source/pdfimport/tree/drawtreevisiting.cxx @@ -36,13 +36,15 @@ #include "drawtreevisiting.hxx" #include "genericelements.hxx" -#include <basegfx/polygon/b2dpolypolygontools.hxx> -#include <basegfx/range/b2drange.hxx> +#include "basegfx/polygon/b2dpolypolygontools.hxx" +#include "basegfx/range/b2drange.hxx" -#include <com/sun/star/i18n/XBreakIterator.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include "com/sun/star/i18n/XBreakIterator.hpp" +#include "com/sun/star/lang/XMultiServiceFactory.hpp" #include "comphelper/processfactory.hxx" -#include <com/sun/star/i18n/ScriptType.hpp> +#include "com/sun/star/i18n/ScriptType.hpp" +#include "com/sun/star/i18n/DirectionProperty.hpp" + #include <string.h> using namespace ::com::sun::star; @@ -79,6 +81,18 @@ const ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XBreakIterator > return mxBreakIter; } +const ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCharacterClassification >& DrawXmlEmitter::GetCharacterClassification() +{ + if ( !mxCharClass.is() ) + { + Reference< XComponentContext > xContext( m_rEmitContext.m_xContext, uno::UNO_SET_THROW ); + Reference< XMultiComponentFactory > xMSF( xContext->getServiceManager(), uno::UNO_SET_THROW ); + Reference < XInterface > xInterface = xMSF->createInstanceWithContext(::rtl::OUString::createFromAscii("com.sun.star.i18n.CharacterClassification"), xContext); + mxCharClass = uno::Reference< i18n::XCharacterClassification >( xInterface, uno::UNO_QUERY ); + } + return mxCharClass; +} + void DrawXmlEmitter::visit( HyperlinkElement& elem, const std::list< Element* >::const_iterator& ) { if( elem.Children.empty() ) @@ -119,30 +133,25 @@ void DrawXmlEmitter::visit( TextElement& elem, const std::list< Element* >::cons rtl::OUString str(elem.Text.getStr()); - // Check for CTL - bool isComplex = false; - for(int i=0; i< elem.Text.getLength(); i++) - { - sal_Int16 nType = GetBreakIterator()->getScriptType( str, i + 1); - if (nType == ::com::sun::star::i18n::ScriptType::COMPLEX) - isComplex = true; - } - - #if 0 - // FIXME: need to have a service to do this mirroring - if (isComplex) // If so, reverse string + // Check for RTL + bool isRTL = false; + Reference< i18n::XCharacterClassification > xCC( GetCharacterClassification() ); + if( xCC.is() ) { - rtl::OUString flippedStr(RTL_CONSTASCII_USTRINGPARAM( "" )); - for(int i = str.getLength() - 1; i >= 0; i--) + for(int i=1; i< elem.Text.getLength(); i++) { - sal_Unicode cChar = str[ i ]; - cChar = static_cast<sal_Unicode>(GetMirroredChar( cChar )); - rtl::OUString uC(cChar); - flippedStr += uC; + sal_Int16 nType = xCC->getCharacterDirection( str, i ); + if ( nType == ::com::sun::star::i18n::DirectionProperty_RIGHT_TO_LEFT || + nType == ::com::sun::star::i18n::DirectionProperty_RIGHT_TO_LEFT_ARABIC || + nType == ::com::sun::star::i18n::DirectionProperty_RIGHT_TO_LEFT_EMBEDDING || + nType == ::com::sun::star::i18n::DirectionProperty_RIGHT_TO_LEFT_OVERRIDE + ) + isRTL = true; } - str = flippedStr; } - #endif + + if (isRTL) // If so, reverse string + str = m_rProcessor.mirrorString( str ); m_rEmitContext.rEmitter.beginTag( "text:span", aProps ); diff --git a/sdext/source/pdfimport/tree/drawtreevisiting.hxx b/sdext/source/pdfimport/tree/drawtreevisiting.hxx index fd347fa4f302..b499db1ca811 100644 --- a/sdext/source/pdfimport/tree/drawtreevisiting.hxx +++ b/sdext/source/pdfimport/tree/drawtreevisiting.hxx @@ -29,9 +29,11 @@ #define INCLUDED_PDFI_DRAWTREEVISITING_HXX #include "treevisiting.hxx" -#include <com/sun/star/i18n/XBreakIterator.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/uno/XComponentContext.hpp> + +#include "com/sun/star/i18n/XBreakIterator.hpp" +#include "com/sun/star/i18n/XCharacterClassification.hpp" +#include "com/sun/star/lang/XMultiServiceFactory.hpp" +#include "com/sun/star/uno/XComponentContext.hpp" namespace pdfi { @@ -89,6 +91,9 @@ namespace pdfi ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory; ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xCtx; ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XBreakIterator > mxBreakIter; + ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCharacterClassification > mxCharClass; + + PDFIProcessor& m_rProcessor; EmitContext& m_rEmitContext ; /// writes Impress doc when false @@ -100,8 +105,10 @@ namespace pdfi public: const ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XBreakIterator >& GetBreakIterator(); + const ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCharacterClassification >& GetCharacterClassification(); enum DocType{ DRAW_DOC, IMPRESS_DOC }; - explicit DrawXmlEmitter(EmitContext& rEmitContext, DocType eDocType) : + explicit DrawXmlEmitter(EmitContext& rEmitContext, DocType eDocType, PDFIProcessor& rProc ) : + m_rProcessor( rProc ), m_rEmitContext(rEmitContext), m_bWriteDrawDocument(eDocType==DRAW_DOC) {} diff --git a/sdext/source/pdfimport/tree/pdfiprocessor.cxx b/sdext/source/pdfimport/tree/pdfiprocessor.cxx index d823cac524cf..54171d8de5e7 100644 --- a/sdext/source/pdfimport/tree/pdfiprocessor.cxx +++ b/sdext/source/pdfimport/tree/pdfiprocessor.cxx @@ -87,7 +87,8 @@ namespace pdfi m_fWordSpace(0.0), m_bIsWhiteSpaceInLine( false ), m_xStatusIndicator( xStat ), - m_bHaveTextOnDocLevel(false) + m_bHaveTextOnDocLevel(false), + m_bMirrorMapperTried(false) { FontAttributes aDefFont; aDefFont.familyName = USTR("Helvetica"); @@ -847,7 +848,7 @@ void PDFIProcessor::emit( XmlEmitter& rEmitter, EmitContext aContext( rEmitter, aStyles, m_aImages, *this, m_xStatusIndicator, m_xContext ); ElementTreeVisitorSharedPtr aEmittingVisitor( - rVisitorFactory.createEmittingVisitor(aContext)); + rVisitorFactory.createEmittingVisitor(aContext, *this)); PropertyMap aProps; // document prolog @@ -1046,4 +1047,414 @@ void PDFIProcessor::sortElements( Element* pEle, bool bDeep ) return outRect; } +// helper method: get a mirrored string +rtl::OUString PDFIProcessor::mirrorString( const rtl::OUString& i_rString ) +{ + if( ! m_xMirrorMapper.is() && ! m_bMirrorMapperTried ) + { + m_bMirrorMapperTried = true; + uno::Reference< lang::XMultiComponentFactory > xMSF( m_xContext->getServiceManager(), uno::UNO_SET_THROW ); + uno::Reference < uno::XInterface > xInterface = xMSF->createInstanceWithContext(::rtl::OUString::createFromAscii("com.sun.star.awt.StringMirror"), m_xContext); + m_xMirrorMapper = uno::Reference< util::XStringMapping >( xInterface, uno::UNO_QUERY ); + #if OSL_DEBUG_LEVEL > 1 + if( m_xMirrorMapper.is() ) + fprintf( stderr, "using mirror mapper service\n" ); + #endif + } + if( m_xMirrorMapper.is() ) + { + uno::Sequence< rtl::OUString > aSeq( 1 ); + aSeq.getArray()[0] = i_rString; + m_xMirrorMapper->mapStrings( aSeq ); + return aSeq[0]; + } + + prepareMirrorMap(); + sal_Int32 nLen = i_rString.getLength(); + rtl::OUStringBuffer aRet( nLen ); + for(int i = nLen - 1; i >= 0; i--) + { + sal_Unicode cChar = i_rString[ i ]; + aRet.append( m_aMirrorMap[cChar] ); + } + return aRet.makeStringAndClear(); +} + +void PDFIProcessor::prepareMirrorMap() +{ + if( m_aMirrorMap.empty() ) + { + #if OSL_DEBUG_LEVEL > 1 + fprintf( stderr, "falling back to static mirror list\n" ); + #endif + + m_aMirrorMap.reserve( 0x10000 ); + for( int i = 0; i < 0x10000; i++ ) + m_aMirrorMap.push_back( sal_Unicode(i) ); + + m_aMirrorMap[ 0x0028 ] = 0x0029; // LEFT PARENTHESIS + m_aMirrorMap[ 0x0029 ] = 0x0028; // RIGHT PARENTHESIS + m_aMirrorMap[ 0x003C ] = 0x003E; // LESS-THAN SIGN + m_aMirrorMap[ 0x003E ] = 0x003C; // GREATER-THAN SIGN + m_aMirrorMap[ 0x005B ] = 0x005D; // LEFT SQUARE BRACKET + m_aMirrorMap[ 0x005D ] = 0x005B; // RIGHT SQUARE BRACKET + m_aMirrorMap[ 0x007B ] = 0x007D; // LEFT CURLY BRACKET + m_aMirrorMap[ 0x007D ] = 0x007B; // RIGHT CURLY BRACKET + m_aMirrorMap[ 0x00AB ] = 0x00BB; // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + m_aMirrorMap[ 0x00BB ] = 0x00AB; // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + m_aMirrorMap[ 0x0F3A ] = 0x0F3B; // TIBETAN MARK GUG RTAGS GYON + m_aMirrorMap[ 0x0F3B ] = 0x0F3A; // TIBETAN MARK GUG RTAGS GYAS + m_aMirrorMap[ 0x0F3C ] = 0x0F3D; // TIBETAN MARK ANG KHANG GYON + m_aMirrorMap[ 0x0F3D ] = 0x0F3C; // TIBETAN MARK ANG KHANG GYAS + m_aMirrorMap[ 0x169B ] = 0x169C; // OGHAM FEATHER MARK + m_aMirrorMap[ 0x169C ] = 0x169B; // OGHAM REVERSED FEATHER MARK + m_aMirrorMap[ 0x2039 ] = 0x203A; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK + m_aMirrorMap[ 0x203A ] = 0x2039; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + m_aMirrorMap[ 0x2045 ] = 0x2046; // LEFT SQUARE BRACKET WITH QUILL + m_aMirrorMap[ 0x2046 ] = 0x2045; // RIGHT SQUARE BRACKET WITH QUILL + m_aMirrorMap[ 0x207D ] = 0x207E; // SUPERSCRIPT LEFT PARENTHESIS + m_aMirrorMap[ 0x207E ] = 0x207D; // SUPERSCRIPT RIGHT PARENTHESIS + m_aMirrorMap[ 0x208D ] = 0x208E; // SUBSCRIPT LEFT PARENTHESIS + m_aMirrorMap[ 0x208E ] = 0x208D; // SUBSCRIPT RIGHT PARENTHESIS + m_aMirrorMap[ 0x2208 ] = 0x220B; // ELEMENT OF + m_aMirrorMap[ 0x2209 ] = 0x220C; // NOT AN ELEMENT OF + m_aMirrorMap[ 0x220A ] = 0x220D; // SMALL ELEMENT OF + m_aMirrorMap[ 0x220B ] = 0x2208; // CONTAINS AS MEMBER + m_aMirrorMap[ 0x220C ] = 0x2209; // DOES NOT CONTAIN AS MEMBER + m_aMirrorMap[ 0x220D ] = 0x220A; // SMALL CONTAINS AS MEMBER + m_aMirrorMap[ 0x2215 ] = 0x29F5; // DIVISION SLASH + m_aMirrorMap[ 0x223C ] = 0x223D; // TILDE OPERATOR + m_aMirrorMap[ 0x223D ] = 0x223C; // REVERSED TILDE + m_aMirrorMap[ 0x2243 ] = 0x22CD; // ASYMPTOTICALLY EQUAL TO + m_aMirrorMap[ 0x2252 ] = 0x2253; // APPROXIMATELY EQUAL TO OR THE IMAGE OF + m_aMirrorMap[ 0x2253 ] = 0x2252; // IMAGE OF OR APPROXIMATELY EQUAL TO + m_aMirrorMap[ 0x2254 ] = 0x2255; // COLON EQUALS + m_aMirrorMap[ 0x2255 ] = 0x2254; // EQUALS COLON + m_aMirrorMap[ 0x2264 ] = 0x2265; // LESS-THAN OR EQUAL TO + m_aMirrorMap[ 0x2265 ] = 0x2264; // GREATER-THAN OR EQUAL TO + m_aMirrorMap[ 0x2266 ] = 0x2267; // LESS-THAN OVER EQUAL TO + m_aMirrorMap[ 0x2267 ] = 0x2266; // GREATER-THAN OVER EQUAL TO + m_aMirrorMap[ 0x2268 ] = 0x2269; // [BEST FIT] LESS-THAN BUT NOT EQUAL TO + m_aMirrorMap[ 0x2269 ] = 0x2268; // [BEST FIT] GREATER-THAN BUT NOT EQUAL TO + m_aMirrorMap[ 0x226A ] = 0x226B; // MUCH LESS-THAN + m_aMirrorMap[ 0x226B ] = 0x226A; // MUCH GREATER-THAN + m_aMirrorMap[ 0x226E ] = 0x226F; // [BEST FIT] NOT LESS-THAN + m_aMirrorMap[ 0x226F ] = 0x226E; // [BEST FIT] NOT GREATER-THAN + m_aMirrorMap[ 0x2270 ] = 0x2271; // [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO + m_aMirrorMap[ 0x2271 ] = 0x2270; // [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO + m_aMirrorMap[ 0x2272 ] = 0x2273; // [BEST FIT] LESS-THAN OR EQUIVALENT TO + m_aMirrorMap[ 0x2273 ] = 0x2272; // [BEST FIT] GREATER-THAN OR EQUIVALENT TO + m_aMirrorMap[ 0x2274 ] = 0x2275; // [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO + m_aMirrorMap[ 0x2275 ] = 0x2274; // [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO + m_aMirrorMap[ 0x2276 ] = 0x2277; // LESS-THAN OR GREATER-THAN + m_aMirrorMap[ 0x2277 ] = 0x2276; // GREATER-THAN OR LESS-THAN + m_aMirrorMap[ 0x2278 ] = 0x2279; // [BEST FIT] NEITHER LESS-THAN NOR GREATER-THAN + m_aMirrorMap[ 0x2279 ] = 0x2278; // [BEST FIT] NEITHER GREATER-THAN NOR LESS-THAN + m_aMirrorMap[ 0x227A ] = 0x227B; // PRECEDES + m_aMirrorMap[ 0x227B ] = 0x227A; // SUCCEEDS + m_aMirrorMap[ 0x227C ] = 0x227D; // PRECEDES OR EQUAL TO + m_aMirrorMap[ 0x227D ] = 0x227C; // SUCCEEDS OR EQUAL TO + m_aMirrorMap[ 0x227E ] = 0x227F; // [BEST FIT] PRECEDES OR EQUIVALENT TO + m_aMirrorMap[ 0x227F ] = 0x227E; // [BEST FIT] SUCCEEDS OR EQUIVALENT TO + m_aMirrorMap[ 0x2280 ] = 0x2281; // [BEST FIT] DOES NOT PRECEDE + m_aMirrorMap[ 0x2281 ] = 0x2280; // [BEST FIT] DOES NOT SUCCEED + m_aMirrorMap[ 0x2282 ] = 0x2283; // SUBSET OF + m_aMirrorMap[ 0x2283 ] = 0x2282; // SUPERSET OF + m_aMirrorMap[ 0x2284 ] = 0x2285; // [BEST FIT] NOT A SUBSET OF + m_aMirrorMap[ 0x2285 ] = 0x2284; // [BEST FIT] NOT A SUPERSET OF + m_aMirrorMap[ 0x2286 ] = 0x2287; // SUBSET OF OR EQUAL TO + m_aMirrorMap[ 0x2287 ] = 0x2286; // SUPERSET OF OR EQUAL TO + m_aMirrorMap[ 0x2288 ] = 0x2289; // [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO + m_aMirrorMap[ 0x2289 ] = 0x2288; // [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO + m_aMirrorMap[ 0x228A ] = 0x228B; // [BEST FIT] SUBSET OF WITH NOT EQUAL TO + m_aMirrorMap[ 0x228B ] = 0x228A; // [BEST FIT] SUPERSET OF WITH NOT EQUAL TO + m_aMirrorMap[ 0x228F ] = 0x2290; // SQUARE IMAGE OF + m_aMirrorMap[ 0x2290 ] = 0x228F; // SQUARE ORIGINAL OF + m_aMirrorMap[ 0x2291 ] = 0x2292; // SQUARE IMAGE OF OR EQUAL TO + m_aMirrorMap[ 0x2292 ] = 0x2291; // SQUARE ORIGINAL OF OR EQUAL TO + m_aMirrorMap[ 0x2298 ] = 0x29B8; // CIRCLED DIVISION SLASH + m_aMirrorMap[ 0x22A2 ] = 0x22A3; // RIGHT TACK + m_aMirrorMap[ 0x22A3 ] = 0x22A2; // LEFT TACK + m_aMirrorMap[ 0x22A6 ] = 0x2ADE; // ASSERTION + m_aMirrorMap[ 0x22A8 ] = 0x2AE4; // TRUE + m_aMirrorMap[ 0x22A9 ] = 0x2AE3; // FORCES + m_aMirrorMap[ 0x22AB ] = 0x2AE5; // DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE + m_aMirrorMap[ 0x22B0 ] = 0x22B1; // PRECEDES UNDER RELATION + m_aMirrorMap[ 0x22B1 ] = 0x22B0; // SUCCEEDS UNDER RELATION + m_aMirrorMap[ 0x22B2 ] = 0x22B3; // NORMAL SUBGROUP OF + m_aMirrorMap[ 0x22B3 ] = 0x22B2; // CONTAINS AS NORMAL SUBGROUP + m_aMirrorMap[ 0x22B4 ] = 0x22B5; // NORMAL SUBGROUP OF OR EQUAL TO + m_aMirrorMap[ 0x22B5 ] = 0x22B4; // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO + m_aMirrorMap[ 0x22B6 ] = 0x22B7; // ORIGINAL OF + m_aMirrorMap[ 0x22B7 ] = 0x22B6; // IMAGE OF + m_aMirrorMap[ 0x22C9 ] = 0x22CA; // LEFT NORMAL FACTOR SEMIDIRECT PRODUCT + m_aMirrorMap[ 0x22CA ] = 0x22C9; // RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT + m_aMirrorMap[ 0x22CB ] = 0x22CC; // LEFT SEMIDIRECT PRODUCT + m_aMirrorMap[ 0x22CC ] = 0x22CB; // RIGHT SEMIDIRECT PRODUCT + m_aMirrorMap[ 0x22CD ] = 0x2243; // REVERSED TILDE EQUALS + m_aMirrorMap[ 0x22D0 ] = 0x22D1; // DOUBLE SUBSET + m_aMirrorMap[ 0x22D1 ] = 0x22D0; // DOUBLE SUPERSET + m_aMirrorMap[ 0x22D6 ] = 0x22D7; // LESS-THAN WITH DOT + m_aMirrorMap[ 0x22D7 ] = 0x22D6; // GREATER-THAN WITH DOT + m_aMirrorMap[ 0x22D8 ] = 0x22D9; // VERY MUCH LESS-THAN + m_aMirrorMap[ 0x22D9 ] = 0x22D8; // VERY MUCH GREATER-THAN + m_aMirrorMap[ 0x22DA ] = 0x22DB; // LESS-THAN EQUAL TO OR GREATER-THAN + m_aMirrorMap[ 0x22DB ] = 0x22DA; // GREATER-THAN EQUAL TO OR LESS-THAN + m_aMirrorMap[ 0x22DC ] = 0x22DD; // EQUAL TO OR LESS-THAN + m_aMirrorMap[ 0x22DD ] = 0x22DC; // EQUAL TO OR GREATER-THAN + m_aMirrorMap[ 0x22DE ] = 0x22DF; // EQUAL TO OR PRECEDES + m_aMirrorMap[ 0x22DF ] = 0x22DE; // EQUAL TO OR SUCCEEDS + m_aMirrorMap[ 0x22E0 ] = 0x22E1; // [BEST FIT] DOES NOT PRECEDE OR EQUAL + m_aMirrorMap[ 0x22E1 ] = 0x22E0; // [BEST FIT] DOES NOT SUCCEED OR EQUAL + m_aMirrorMap[ 0x22E2 ] = 0x22E3; // [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO + m_aMirrorMap[ 0x22E3 ] = 0x22E2; // [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO + m_aMirrorMap[ 0x22E4 ] = 0x22E5; // [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO + m_aMirrorMap[ 0x22E5 ] = 0x22E4; // [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO + m_aMirrorMap[ 0x22E6 ] = 0x22E7; // [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO + m_aMirrorMap[ 0x22E7 ] = 0x22E6; // [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO + m_aMirrorMap[ 0x22E8 ] = 0x22E9; // [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO + m_aMirrorMap[ 0x22E9 ] = 0x22E8; // [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO + m_aMirrorMap[ 0x22EA ] = 0x22EB; // [BEST FIT] NOT NORMAL SUBGROUP OF + m_aMirrorMap[ 0x22EB ] = 0x22EA; // [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP + m_aMirrorMap[ 0x22EC ] = 0x22ED; // [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO + m_aMirrorMap[ 0x22ED ] = 0x22EC; // [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL + m_aMirrorMap[ 0x22F0 ] = 0x22F1; // UP RIGHT DIAGONAL ELLIPSIS + m_aMirrorMap[ 0x22F1 ] = 0x22F0; // DOWN RIGHT DIAGONAL ELLIPSIS + m_aMirrorMap[ 0x22F2 ] = 0x22FA; // ELEMENT OF WITH LONG HORIZONTAL STROKE + m_aMirrorMap[ 0x22F3 ] = 0x22FB; // ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE + m_aMirrorMap[ 0x22F4 ] = 0x22FC; // SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE + m_aMirrorMap[ 0x22F6 ] = 0x22FD; // ELEMENT OF WITH OVERBAR + m_aMirrorMap[ 0x22F7 ] = 0x22FE; // SMALL ELEMENT OF WITH OVERBAR + m_aMirrorMap[ 0x22FA ] = 0x22F2; // CONTAINS WITH LONG HORIZONTAL STROKE + m_aMirrorMap[ 0x22FB ] = 0x22F3; // CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE + m_aMirrorMap[ 0x22FC ] = 0x22F4; // SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE + m_aMirrorMap[ 0x22FD ] = 0x22F6; // CONTAINS WITH OVERBAR + m_aMirrorMap[ 0x22FE ] = 0x22F7; // SMALL CONTAINS WITH OVERBAR + m_aMirrorMap[ 0x2308 ] = 0x2309; // LEFT CEILING + m_aMirrorMap[ 0x2309 ] = 0x2308; // RIGHT CEILING + m_aMirrorMap[ 0x230A ] = 0x230B; // LEFT FLOOR + m_aMirrorMap[ 0x230B ] = 0x230A; // RIGHT FLOOR + m_aMirrorMap[ 0x2329 ] = 0x232A; // LEFT-POINTING ANGLE BRACKET + m_aMirrorMap[ 0x232A ] = 0x2329; // RIGHT-POINTING ANGLE BRACKET + m_aMirrorMap[ 0x2768 ] = 0x2769; // MEDIUM LEFT PARENTHESIS ORNAMENT + m_aMirrorMap[ 0x2769 ] = 0x2768; // MEDIUM RIGHT PARENTHESIS ORNAMENT + m_aMirrorMap[ 0x276A ] = 0x276B; // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT + m_aMirrorMap[ 0x276B ] = 0x276A; // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT + m_aMirrorMap[ 0x276C ] = 0x276D; // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT + m_aMirrorMap[ 0x276D ] = 0x276C; // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT + m_aMirrorMap[ 0x276E ] = 0x276F; // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT + m_aMirrorMap[ 0x276F ] = 0x276E; // HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT + m_aMirrorMap[ 0x2770 ] = 0x2771; // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT + m_aMirrorMap[ 0x2771 ] = 0x2770; // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT + m_aMirrorMap[ 0x2772 ] = 0x2773; // LIGHT LEFT TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x2773 ] = 0x2772; // LIGHT RIGHT TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x2774 ] = 0x2775; // MEDIUM LEFT CURLY BRACKET ORNAMENT + m_aMirrorMap[ 0x2775 ] = 0x2774; // MEDIUM RIGHT CURLY BRACKET ORNAMENT + m_aMirrorMap[ 0x27C3 ] = 0x27C4; // OPEN SUBSET + m_aMirrorMap[ 0x27C4 ] = 0x27C3; // OPEN SUPERSET + m_aMirrorMap[ 0x27C5 ] = 0x27C6; // LEFT S-SHAPED BAG DELIMITER + m_aMirrorMap[ 0x27C6 ] = 0x27C5; // RIGHT S-SHAPED BAG DELIMITER + m_aMirrorMap[ 0x27C8 ] = 0x27C9; // REVERSE SOLIDUS PRECEDING SUBSET + m_aMirrorMap[ 0x27C9 ] = 0x27C8; // SUPERSET PRECEDING SOLIDUS + m_aMirrorMap[ 0x27D5 ] = 0x27D6; // LEFT OUTER JOIN + m_aMirrorMap[ 0x27D6 ] = 0x27D5; // RIGHT OUTER JOIN + m_aMirrorMap[ 0x27DD ] = 0x27DE; // LONG RIGHT TACK + m_aMirrorMap[ 0x27DE ] = 0x27DD; // LONG LEFT TACK + m_aMirrorMap[ 0x27E2 ] = 0x27E3; // WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK + m_aMirrorMap[ 0x27E3 ] = 0x27E2; // WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK + m_aMirrorMap[ 0x27E4 ] = 0x27E5; // WHITE SQUARE WITH LEFTWARDS TICK + m_aMirrorMap[ 0x27E5 ] = 0x27E4; // WHITE SQUARE WITH RIGHTWARDS TICK + m_aMirrorMap[ 0x27E6 ] = 0x27E7; // MATHEMATICAL LEFT WHITE SQUARE BRACKET + m_aMirrorMap[ 0x27E7 ] = 0x27E6; // MATHEMATICAL RIGHT WHITE SQUARE BRACKET + m_aMirrorMap[ 0x27E8 ] = 0x27E9; // MATHEMATICAL LEFT ANGLE BRACKET + m_aMirrorMap[ 0x27E9 ] = 0x27E8; // MATHEMATICAL RIGHT ANGLE BRACKET + m_aMirrorMap[ 0x27EA ] = 0x27EB; // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET + m_aMirrorMap[ 0x27EB ] = 0x27EA; // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET + m_aMirrorMap[ 0x27EC ] = 0x27ED; // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x27ED ] = 0x27EC; // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x27EE ] = 0x27EF; // MATHEMATICAL LEFT FLATTENED PARENTHESIS + m_aMirrorMap[ 0x27EF ] = 0x27EE; // MATHEMATICAL RIGHT FLATTENED PARENTHESIS + m_aMirrorMap[ 0x2983 ] = 0x2984; // LEFT WHITE CURLY BRACKET + m_aMirrorMap[ 0x2984 ] = 0x2983; // RIGHT WHITE CURLY BRACKET + m_aMirrorMap[ 0x2985 ] = 0x2986; // LEFT WHITE PARENTHESIS + m_aMirrorMap[ 0x2986 ] = 0x2985; // RIGHT WHITE PARENTHESIS + m_aMirrorMap[ 0x2987 ] = 0x2988; // Z NOTATION LEFT IMAGE BRACKET + m_aMirrorMap[ 0x2988 ] = 0x2987; // Z NOTATION RIGHT IMAGE BRACKET + m_aMirrorMap[ 0x2989 ] = 0x298A; // Z NOTATION LEFT BINDING BRACKET + m_aMirrorMap[ 0x298A ] = 0x2989; // Z NOTATION RIGHT BINDING BRACKET + m_aMirrorMap[ 0x298B ] = 0x298C; // LEFT SQUARE BRACKET WITH UNDERBAR + m_aMirrorMap[ 0x298C ] = 0x298B; // RIGHT SQUARE BRACKET WITH UNDERBAR + m_aMirrorMap[ 0x298D ] = 0x2990; // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER + m_aMirrorMap[ 0x298E ] = 0x298F; // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER + m_aMirrorMap[ 0x298F ] = 0x298E; // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER + m_aMirrorMap[ 0x2990 ] = 0x298D; // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER + m_aMirrorMap[ 0x2991 ] = 0x2992; // LEFT ANGLE BRACKET WITH DOT + m_aMirrorMap[ 0x2992 ] = 0x2991; // RIGHT ANGLE BRACKET WITH DOT + m_aMirrorMap[ 0x2993 ] = 0x2994; // LEFT ARC LESS-THAN BRACKET + m_aMirrorMap[ 0x2994 ] = 0x2993; // RIGHT ARC GREATER-THAN BRACKET + m_aMirrorMap[ 0x2995 ] = 0x2996; // DOUBLE LEFT ARC GREATER-THAN BRACKET + m_aMirrorMap[ 0x2996 ] = 0x2995; // DOUBLE RIGHT ARC LESS-THAN BRACKET + m_aMirrorMap[ 0x2997 ] = 0x2998; // LEFT BLACK TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x2998 ] = 0x2997; // RIGHT BLACK TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x29B8 ] = 0x2298; // CIRCLED REVERSE SOLIDUS + m_aMirrorMap[ 0x29C0 ] = 0x29C1; // CIRCLED LESS-THAN + m_aMirrorMap[ 0x29C1 ] = 0x29C0; // CIRCLED GREATER-THAN + m_aMirrorMap[ 0x29C4 ] = 0x29C5; // SQUARED RISING DIAGONAL SLASH + m_aMirrorMap[ 0x29C5 ] = 0x29C4; // SQUARED FALLING DIAGONAL SLASH + m_aMirrorMap[ 0x29CF ] = 0x29D0; // LEFT TRIANGLE BESIDE VERTICAL BAR + m_aMirrorMap[ 0x29D0 ] = 0x29CF; // VERTICAL BAR BESIDE RIGHT TRIANGLE + m_aMirrorMap[ 0x29D1 ] = 0x29D2; // BOWTIE WITH LEFT HALF BLACK + m_aMirrorMap[ 0x29D2 ] = 0x29D1; // BOWTIE WITH RIGHT HALF BLACK + m_aMirrorMap[ 0x29D4 ] = 0x29D5; // TIMES WITH LEFT HALF BLACK + m_aMirrorMap[ 0x29D5 ] = 0x29D4; // TIMES WITH RIGHT HALF BLACK + m_aMirrorMap[ 0x29D8 ] = 0x29D9; // LEFT WIGGLY FENCE + m_aMirrorMap[ 0x29D9 ] = 0x29D8; // RIGHT WIGGLY FENCE + m_aMirrorMap[ 0x29DA ] = 0x29DB; // LEFT DOUBLE WIGGLY FENCE + m_aMirrorMap[ 0x29DB ] = 0x29DA; // RIGHT DOUBLE WIGGLY FENCE + m_aMirrorMap[ 0x29F5 ] = 0x2215; // REVERSE SOLIDUS OPERATOR + m_aMirrorMap[ 0x29F8 ] = 0x29F9; // BIG SOLIDUS + m_aMirrorMap[ 0x29F9 ] = 0x29F8; // BIG REVERSE SOLIDUS + m_aMirrorMap[ 0x29FC ] = 0x29FD; // LEFT-POINTING CURVED ANGLE BRACKET + m_aMirrorMap[ 0x29FD ] = 0x29FC; // RIGHT-POINTING CURVED ANGLE BRACKET + m_aMirrorMap[ 0x2A2B ] = 0x2A2C; // MINUS SIGN WITH FALLING DOTS + m_aMirrorMap[ 0x2A2C ] = 0x2A2B; // MINUS SIGN WITH RISING DOTS + m_aMirrorMap[ 0x2A2D ] = 0x2A2E; // PLUS SIGN IN LEFT HALF CIRCLE + m_aMirrorMap[ 0x2A2E ] = 0x2A2D; // PLUS SIGN IN RIGHT HALF CIRCLE + m_aMirrorMap[ 0x2A34 ] = 0x2A35; // MULTIPLICATION SIGN IN LEFT HALF CIRCLE + m_aMirrorMap[ 0x2A35 ] = 0x2A34; // MULTIPLICATION SIGN IN RIGHT HALF CIRCLE + m_aMirrorMap[ 0x2A3C ] = 0x2A3D; // INTERIOR PRODUCT + m_aMirrorMap[ 0x2A3D ] = 0x2A3C; // RIGHTHAND INTERIOR PRODUCT + m_aMirrorMap[ 0x2A64 ] = 0x2A65; // Z NOTATION DOMAIN ANTIRESTRICTION + m_aMirrorMap[ 0x2A65 ] = 0x2A64; // Z NOTATION RANGE ANTIRESTRICTION + m_aMirrorMap[ 0x2A79 ] = 0x2A7A; // LESS-THAN WITH CIRCLE INSIDE + m_aMirrorMap[ 0x2A7A ] = 0x2A79; // GREATER-THAN WITH CIRCLE INSIDE + m_aMirrorMap[ 0x2A7D ] = 0x2A7E; // LESS-THAN OR SLANTED EQUAL TO + m_aMirrorMap[ 0x2A7E ] = 0x2A7D; // GREATER-THAN OR SLANTED EQUAL TO + m_aMirrorMap[ 0x2A7F ] = 0x2A80; // LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE + m_aMirrorMap[ 0x2A80 ] = 0x2A7F; // GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE + m_aMirrorMap[ 0x2A81 ] = 0x2A82; // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE + m_aMirrorMap[ 0x2A82 ] = 0x2A81; // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE + m_aMirrorMap[ 0x2A83 ] = 0x2A84; // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT + m_aMirrorMap[ 0x2A84 ] = 0x2A83; // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT + m_aMirrorMap[ 0x2A8B ] = 0x2A8C; // LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN + m_aMirrorMap[ 0x2A8C ] = 0x2A8B; // GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN + m_aMirrorMap[ 0x2A91 ] = 0x2A92; // LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL + m_aMirrorMap[ 0x2A92 ] = 0x2A91; // GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL + m_aMirrorMap[ 0x2A93 ] = 0x2A94; // LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL + m_aMirrorMap[ 0x2A94 ] = 0x2A93; // GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL + m_aMirrorMap[ 0x2A95 ] = 0x2A96; // SLANTED EQUAL TO OR LESS-THAN + m_aMirrorMap[ 0x2A96 ] = 0x2A95; // SLANTED EQUAL TO OR GREATER-THAN + m_aMirrorMap[ 0x2A97 ] = 0x2A98; // SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE + m_aMirrorMap[ 0x2A98 ] = 0x2A97; // SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE + m_aMirrorMap[ 0x2A99 ] = 0x2A9A; // DOUBLE-LINE EQUAL TO OR LESS-THAN + m_aMirrorMap[ 0x2A9A ] = 0x2A99; // DOUBLE-LINE EQUAL TO OR GREATER-THAN + m_aMirrorMap[ 0x2A9B ] = 0x2A9C; // DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN + m_aMirrorMap[ 0x2A9C ] = 0x2A9B; // DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN + m_aMirrorMap[ 0x2AA1 ] = 0x2AA2; // DOUBLE NESTED LESS-THAN + m_aMirrorMap[ 0x2AA2 ] = 0x2AA1; // DOUBLE NESTED GREATER-THAN + m_aMirrorMap[ 0x2AA6 ] = 0x2AA7; // LESS-THAN CLOSED BY CURVE + m_aMirrorMap[ 0x2AA7 ] = 0x2AA6; // GREATER-THAN CLOSED BY CURVE + m_aMirrorMap[ 0x2AA8 ] = 0x2AA9; // LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL + m_aMirrorMap[ 0x2AA9 ] = 0x2AA8; // GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL + m_aMirrorMap[ 0x2AAA ] = 0x2AAB; // SMALLER THAN + m_aMirrorMap[ 0x2AAB ] = 0x2AAA; // LARGER THAN + m_aMirrorMap[ 0x2AAC ] = 0x2AAD; // SMALLER THAN OR EQUAL TO + m_aMirrorMap[ 0x2AAD ] = 0x2AAC; // LARGER THAN OR EQUAL TO + m_aMirrorMap[ 0x2AAF ] = 0x2AB0; // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN + m_aMirrorMap[ 0x2AB0 ] = 0x2AAF; // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN + m_aMirrorMap[ 0x2AB3 ] = 0x2AB4; // PRECEDES ABOVE EQUALS SIGN + m_aMirrorMap[ 0x2AB4 ] = 0x2AB3; // SUCCEEDS ABOVE EQUALS SIGN + m_aMirrorMap[ 0x2ABB ] = 0x2ABC; // DOUBLE PRECEDES + m_aMirrorMap[ 0x2ABC ] = 0x2ABB; // DOUBLE SUCCEEDS + m_aMirrorMap[ 0x2ABD ] = 0x2ABE; // SUBSET WITH DOT + m_aMirrorMap[ 0x2ABE ] = 0x2ABD; // SUPERSET WITH DOT + m_aMirrorMap[ 0x2ABF ] = 0x2AC0; // SUBSET WITH PLUS SIGN BELOW + m_aMirrorMap[ 0x2AC0 ] = 0x2ABF; // SUPERSET WITH PLUS SIGN BELOW + m_aMirrorMap[ 0x2AC1 ] = 0x2AC2; // SUBSET WITH MULTIPLICATION SIGN BELOW + m_aMirrorMap[ 0x2AC2 ] = 0x2AC1; // SUPERSET WITH MULTIPLICATION SIGN BELOW + m_aMirrorMap[ 0x2AC3 ] = 0x2AC4; // SUBSET OF OR EQUAL TO WITH DOT ABOVE + m_aMirrorMap[ 0x2AC4 ] = 0x2AC3; // SUPERSET OF OR EQUAL TO WITH DOT ABOVE + m_aMirrorMap[ 0x2AC5 ] = 0x2AC6; // SUBSET OF ABOVE EQUALS SIGN + m_aMirrorMap[ 0x2AC6 ] = 0x2AC5; // SUPERSET OF ABOVE EQUALS SIGN + m_aMirrorMap[ 0x2ACD ] = 0x2ACE; // SQUARE LEFT OPEN BOX OPERATOR + m_aMirrorMap[ 0x2ACE ] = 0x2ACD; // SQUARE RIGHT OPEN BOX OPERATOR + m_aMirrorMap[ 0x2ACF ] = 0x2AD0; // CLOSED SUBSET + m_aMirrorMap[ 0x2AD0 ] = 0x2ACF; // CLOSED SUPERSET + m_aMirrorMap[ 0x2AD1 ] = 0x2AD2; // CLOSED SUBSET OR EQUAL TO + m_aMirrorMap[ 0x2AD2 ] = 0x2AD1; // CLOSED SUPERSET OR EQUAL TO + m_aMirrorMap[ 0x2AD3 ] = 0x2AD4; // SUBSET ABOVE SUPERSET + m_aMirrorMap[ 0x2AD4 ] = 0x2AD3; // SUPERSET ABOVE SUBSET + m_aMirrorMap[ 0x2AD5 ] = 0x2AD6; // SUBSET ABOVE SUBSET + m_aMirrorMap[ 0x2AD6 ] = 0x2AD5; // SUPERSET ABOVE SUPERSET + m_aMirrorMap[ 0x2ADE ] = 0x22A6; // SHORT LEFT TACK + m_aMirrorMap[ 0x2AE3 ] = 0x22A9; // DOUBLE VERTICAL BAR LEFT TURNSTILE + m_aMirrorMap[ 0x2AE4 ] = 0x22A8; // VERTICAL BAR DOUBLE LEFT TURNSTILE + m_aMirrorMap[ 0x2AE5 ] = 0x22AB; // DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE + m_aMirrorMap[ 0x2AEC ] = 0x2AED; // DOUBLE STROKE NOT SIGN + m_aMirrorMap[ 0x2AED ] = 0x2AEC; // REVERSED DOUBLE STROKE NOT SIGN + m_aMirrorMap[ 0x2AF7 ] = 0x2AF8; // TRIPLE NESTED LESS-THAN + m_aMirrorMap[ 0x2AF8 ] = 0x2AF7; // TRIPLE NESTED GREATER-THAN + m_aMirrorMap[ 0x2AF9 ] = 0x2AFA; // DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO + m_aMirrorMap[ 0x2AFA ] = 0x2AF9; // DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO + m_aMirrorMap[ 0x2E02 ] = 0x2E03; // LEFT SUBSTITUTION BRACKET + m_aMirrorMap[ 0x2E03 ] = 0x2E02; // RIGHT SUBSTITUTION BRACKET + m_aMirrorMap[ 0x2E04 ] = 0x2E05; // LEFT DOTTED SUBSTITUTION BRACKET + m_aMirrorMap[ 0x2E05 ] = 0x2E04; // RIGHT DOTTED SUBSTITUTION BRACKET + m_aMirrorMap[ 0x2E09 ] = 0x2E0A; // LEFT TRANSPOSITION BRACKET + m_aMirrorMap[ 0x2E0A ] = 0x2E09; // RIGHT TRANSPOSITION BRACKET + m_aMirrorMap[ 0x2E0C ] = 0x2E0D; // LEFT RAISED OMISSION BRACKET + m_aMirrorMap[ 0x2E0D ] = 0x2E0C; // RIGHT RAISED OMISSION BRACKET + m_aMirrorMap[ 0x2E1C ] = 0x2E1D; // LEFT LOW PARAPHRASE BRACKET + m_aMirrorMap[ 0x2E1D ] = 0x2E1C; // RIGHT LOW PARAPHRASE BRACKET + m_aMirrorMap[ 0x2E20 ] = 0x2E21; // LEFT VERTICAL BAR WITH QUILL + m_aMirrorMap[ 0x2E21 ] = 0x2E20; // RIGHT VERTICAL BAR WITH QUILL + m_aMirrorMap[ 0x2E22 ] = 0x2E23; // TOP LEFT HALF BRACKET + m_aMirrorMap[ 0x2E23 ] = 0x2E22; // TOP RIGHT HALF BRACKET + m_aMirrorMap[ 0x2E24 ] = 0x2E25; // BOTTOM LEFT HALF BRACKET + m_aMirrorMap[ 0x2E25 ] = 0x2E24; // BOTTOM RIGHT HALF BRACKET + m_aMirrorMap[ 0x2E26 ] = 0x2E27; // LEFT SIDEWAYS U BRACKET + m_aMirrorMap[ 0x2E27 ] = 0x2E26; // RIGHT SIDEWAYS U BRACKET + m_aMirrorMap[ 0x2E28 ] = 0x2E29; // LEFT DOUBLE PARENTHESIS + m_aMirrorMap[ 0x2E29 ] = 0x2E28; // RIGHT DOUBLE PARENTHESIS + m_aMirrorMap[ 0x3008 ] = 0x3009; // LEFT ANGLE BRACKET + m_aMirrorMap[ 0x3009 ] = 0x3008; // RIGHT ANGLE BRACKET + m_aMirrorMap[ 0x300A ] = 0x300B; // LEFT DOUBLE ANGLE BRACKET + m_aMirrorMap[ 0x300B ] = 0x300A; // RIGHT DOUBLE ANGLE BRACKET + m_aMirrorMap[ 0x300C ] = 0x300D; // [BEST FIT] LEFT CORNER BRACKET + m_aMirrorMap[ 0x300D ] = 0x300C; // [BEST FIT] RIGHT CORNER BRACKET + m_aMirrorMap[ 0x300E ] = 0x300F; // [BEST FIT] LEFT WHITE CORNER BRACKET + m_aMirrorMap[ 0x300F ] = 0x300E; // [BEST FIT] RIGHT WHITE CORNER BRACKET + m_aMirrorMap[ 0x3010 ] = 0x3011; // LEFT BLACK LENTICULAR BRACKET + m_aMirrorMap[ 0x3011 ] = 0x3010; // RIGHT BLACK LENTICULAR BRACKET + m_aMirrorMap[ 0x3014 ] = 0x3015; // LEFT TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x3015 ] = 0x3014; // RIGHT TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x3016 ] = 0x3017; // LEFT WHITE LENTICULAR BRACKET + m_aMirrorMap[ 0x3017 ] = 0x3016; // RIGHT WHITE LENTICULAR BRACKET + m_aMirrorMap[ 0x3018 ] = 0x3019; // LEFT WHITE TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x3019 ] = 0x3018; // RIGHT WHITE TORTOISE SHELL BRACKET + m_aMirrorMap[ 0x301A ] = 0x301B; // LEFT WHITE SQUARE BRACKET + m_aMirrorMap[ 0x301B ] = 0x301A; // RIGHT WHITE SQUARE BRACKET + m_aMirrorMap[ 0xFE59 ] = 0xFE5A; // SMALL LEFT PARENTHESIS + m_aMirrorMap[ 0xFE5A ] = 0xFE59; // SMALL RIGHT PARENTHESIS + m_aMirrorMap[ 0xFE5B ] = 0xFE5C; // SMALL LEFT CURLY BRACKET + m_aMirrorMap[ 0xFE5C ] = 0xFE5B; // SMALL RIGHT CURLY BRACKET + m_aMirrorMap[ 0xFE5D ] = 0xFE5E; // SMALL LEFT TORTOISE SHELL BRACKET + m_aMirrorMap[ 0xFE5E ] = 0xFE5D; // SMALL RIGHT TORTOISE SHELL BRACKET + m_aMirrorMap[ 0xFE64 ] = 0xFE65; // SMALL LESS-THAN SIGN + m_aMirrorMap[ 0xFE65 ] = 0xFE64; // SMALL GREATER-THAN SIGN + m_aMirrorMap[ 0xFF08 ] = 0xFF09; // FULLWIDTH LEFT PARENTHESIS + m_aMirrorMap[ 0xFF09 ] = 0xFF08; // FULLWIDTH RIGHT PARENTHESIS + m_aMirrorMap[ 0xFF1C ] = 0xFF1E; // FULLWIDTH LESS-THAN SIGN + m_aMirrorMap[ 0xFF1E ] = 0xFF1C; // FULLWIDTH GREATER-THAN SIGN + m_aMirrorMap[ 0xFF3B ] = 0xFF3D; // FULLWIDTH LEFT SQUARE BRACKET + m_aMirrorMap[ 0xFF3D ] = 0xFF3B; // FULLWIDTH RIGHT SQUARE BRACKET + m_aMirrorMap[ 0xFF5B ] = 0xFF5D; // FULLWIDTH LEFT CURLY BRACKET + m_aMirrorMap[ 0xFF5D ] = 0xFF5B; // FULLWIDTH RIGHT CURLY BRACKET + m_aMirrorMap[ 0xFF5F ] = 0xFF60; // FULLWIDTH LEFT WHITE PARENTHESIS + m_aMirrorMap[ 0xFF60 ] = 0xFF5F; // FULLWIDTH RIGHT WHITE PARENTHESIS + m_aMirrorMap[ 0xFF62 ] = 0xFF63; // [BEST FIT] HALFWIDTH LEFT CORNER BRACKET + m_aMirrorMap[ 0xFF63 ] = 0xFF62; // [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET + } +} + } diff --git a/sdext/source/pdfimport/tree/pdfiprocessor.hxx b/sdext/source/pdfimport/tree/pdfiprocessor.hxx index e646d6999df7..45a6d3c915f8 100644 --- a/sdext/source/pdfimport/tree/pdfiprocessor.hxx +++ b/sdext/source/pdfimport/tree/pdfiprocessor.hxx @@ -28,6 +28,7 @@ #ifndef INCLUDED_PDFI_PROCESSOR_HXX #define INCLUDED_PDFI_PROCESSOR_HXX +#include <com/sun/star/util/XStringMapping.hpp> #include <com/sun/star/xml/sax/XDocumentHandler.hpp> #include <com/sun/star/task/XStatusIndicator.hpp> #include <com/sun/star/rendering/XVolatileBitmap.hpp> @@ -108,7 +109,10 @@ namespace pdfi void sortElements( Element* pElement, bool bDeep = false ); void sortDocument( bool bDeep = false ); + rtl::OUString mirrorString( const rtl::OUString& i_rInString ); + private: + void prepareMirrorMap(); void processGlyphLine(); void processGlyph( double fPreAvarageSpaceValue, CharGlyph& rGlyph, @@ -242,6 +246,11 @@ namespace pdfi m_xStatusIndicator; bool m_bHaveTextOnDocLevel; + std::vector< sal_Unicode > m_aMirrorMap; + com::sun::star::uno::Reference< + com::sun::star::util::XStringMapping > + m_xMirrorMapper; + bool m_bMirrorMapperTried; }; class CharGlyph { diff --git a/sdext/source/pdfimport/tree/treevisitorfactory.cxx b/sdext/source/pdfimport/tree/treevisitorfactory.cxx index e8a44bbe661d..5c6667ea43f9 100644 --- a/sdext/source/pdfimport/tree/treevisitorfactory.cxx +++ b/sdext/source/pdfimport/tree/treevisitorfactory.cxx @@ -50,7 +50,7 @@ namespace pdfi return boost::shared_ptr<ElementTreeVisitor>(new WriterXmlFinalizer(rStyles,rProc)); } - virtual boost::shared_ptr<ElementTreeVisitor> createEmittingVisitor(EmitContext& rEmitContext) const + virtual boost::shared_ptr<ElementTreeVisitor> createEmittingVisitor(EmitContext& rEmitContext, PDFIProcessor&) const { return boost::shared_ptr<ElementTreeVisitor>(new WriterXmlEmitter(rEmitContext)); } @@ -72,10 +72,12 @@ namespace pdfi return boost::shared_ptr<ElementTreeVisitor>(new DrawXmlFinalizer(rStyles,rProc)); } - virtual boost::shared_ptr<ElementTreeVisitor> createEmittingVisitor(EmitContext& rEmitContext) const + virtual boost::shared_ptr<ElementTreeVisitor> createEmittingVisitor(EmitContext& rEmitContext, PDFIProcessor& rProc) const { return boost::shared_ptr<ElementTreeVisitor>(new DrawXmlEmitter(rEmitContext, - DrawXmlEmitter::IMPRESS_DOC)); + DrawXmlEmitter::IMPRESS_DOC, + rProc + )); } }; @@ -95,10 +97,12 @@ namespace pdfi return boost::shared_ptr<ElementTreeVisitor>(new DrawXmlFinalizer(rStyles,rProc)); } - virtual boost::shared_ptr<ElementTreeVisitor> createEmittingVisitor(EmitContext& rEmitContext) const + virtual boost::shared_ptr<ElementTreeVisitor> createEmittingVisitor(EmitContext& rEmitContext, PDFIProcessor& rProc) const { return boost::shared_ptr<ElementTreeVisitor>(new DrawXmlEmitter(rEmitContext, - DrawXmlEmitter::DRAW_DOC)); + DrawXmlEmitter::DRAW_DOC, + rProc + )); } }; diff --git a/sdext/source/presenter/makefile.mk b/sdext/source/presenter/makefile.mk index a26cf54b3694..997d43054d3b 100644 --- a/sdext/source/presenter/makefile.mk +++ b/sdext/source/presenter/makefile.mk @@ -108,7 +108,7 @@ SHL1DEPN= SHL1IMPLIB= i$(SHL1TARGET) SHL1LIBS= $(SLB)$/$(TARGET).lib SHL1DEF= $(MISC)$/$(SHL1TARGET).def -SHL1VERSIONMAP=$(SOLARENV)/src/component.map +SHL1VERSIONMAP=$(SOLARENV)/src/reg-component.map SHL1RPATH= OXT DEF1NAME= $(SHL1TARGET) diff --git a/swext/mediawiki/build.xml b/swext/mediawiki/build.xml index 8dea0dce0bd2..79cd9cb9eb1c 100644 --- a/swext/mediawiki/build.xml +++ b/swext/mediawiki/build.xml @@ -53,7 +53,7 @@ <!-- build options --> <property name="sourcelevel" value="1.4"/> <property name="verbose" value="false"/> - <property name="debug" value="true"/> + <property name="debug" value="${antdebug}"/> <!-- build classpath --> <path id="classpath"> @@ -75,7 +75,7 @@ </target> <target name="compile" depends="init"> - <javac debug="${debug}" destdir="${classes}" classpathref="classpath" + <javac debug="${debug}" debuglevel="lines,vars,source" destdir="${classes}" classpathref="classpath" source="${sourcelevel}" verbose="${verbose}"> <src path="src"/> </javac> diff --git a/swext/mediawiki/makefile.mk b/swext/mediawiki/makefile.mk index 9d051397a319..52d9900ab1e6 100644 --- a/swext/mediawiki/makefile.mk +++ b/swext/mediawiki/makefile.mk @@ -41,7 +41,13 @@ COMMONS_LOGGING_JAR=$(SOLARVER)$/$(INPATH)$/bin$(UPDMINOREXT)$/commons-logging-1 COMP=fix_system_commons .ENDIF -ANT_FLAGS+=-Dcommons-codec-jar=$(COMMONS_CODEC_JAR) -Dcommons-lang-jar=$(COMMONS_LANG_JAR) -Dcommons-httpclient-jar=$(COMMONS_HTTPCLIENT_JAR) -Dcommons-logging-jar=$(COMMONS_LOGGING_JAR) +.IF defined(debug) || defined(DEBUG) +ANTDEBUG=true +.ELSE +ANTDEBUG=off +.ENDIF + +ANT_FLAGS+=-Dcommons-codec-jar=$(COMMONS_CODEC_JAR) -Dcommons-lang-jar=$(COMMONS_LANG_JAR) -Dcommons-httpclient-jar=$(COMMONS_HTTPCLIENT_JAR) -Dcommons-logging-jar=$(COMMONS_LOGGING_JAR) -Dantdebug=$(ANTDEBUG) # creates two files wiki-publisher.oxt and mediawiki_develop.zip, the second one might be used in further build process ALLTAR: $(COMP) ANTBUILD diff --git a/swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java b/swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java index a0ed06ab4399..f91819c6bc2a 100644 --- a/swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java +++ b/swext/mediawiki/src/com/sun/star/wiki/EditPageParser.java @@ -35,6 +35,7 @@ public class EditPageParser extends HTMLEditorKit.ParserCallback protected String m_sEditTime = ""; protected String m_sEditToken = ""; + protected String m_sLoginToken = ""; protected String m_sMainURL = ""; private int m_nWikiArticleHash = 0; @@ -100,6 +101,10 @@ public class EditPageParser extends HTMLEditorKit.ParserCallback { this.m_sEditToken = ( String ) a.getAttribute( HTML.Attribute.VALUE ); } + else if ( sName.equalsIgnoreCase( "wpLoginToken" ) ) + { + this.m_sLoginToken = ( String ) a.getAttribute( HTML.Attribute.VALUE ); + } } } diff --git a/swext/mediawiki/src/com/sun/star/wiki/Helper.java b/swext/mediawiki/src/com/sun/star/wiki/Helper.java index 7862cdd42912..7ecd9ecb0e7c 100644 --- a/swext/mediawiki/src/com/sun/star/wiki/Helper.java +++ b/swext/mediawiki/src/com/sun/star/wiki/Helper.java @@ -784,6 +784,29 @@ public class Helper return bResult; } + static protected String GetLoginToken( String sLoginPage ) + { + String sResult = ""; + if ( sLoginPage != null && sLoginPage.length() > 0 ) + { + try + { + StringReader aReader = new StringReader( sLoginPage ); + HTMLEditorKit.Parser aParser = Helper.GetHTMLParser(); + EditPageParser aCallbacks = new EditPageParser(); + + aParser.parse( aReader, aCallbacks, true ); + sResult = aCallbacks.m_sLoginToken; + } + catch( Exception e ) + { + e.printStackTrace(); + } + } + + return sResult; + } + static protected HostConfiguration Login( URI aMainURL, String sWikiUser, String sWikiPass, XComponentContext xContext ) throws com.sun.star.uno.Exception, java.io.IOException, WikiCancelException { @@ -799,10 +822,16 @@ public class Helper ExecuteMethod( aGetCookie, aNewHostConfig, aURI, xContext, true ); int nResultCode = aGetCookie.getStatusCode(); + String sLoginPage = null; + if ( nResultCode == 200 ) + sLoginPage = aGetCookie.getResponseBodyAsString(); + aGetCookie.releaseConnection(); - if ( nResultCode == 200 ) + if ( sLoginPage != null ) { + String sLoginToken = GetLoginToken( sLoginPage ); + PostMethod aPost = new PostMethod(); URI aPostURI = new URI( aMainURL.getPath() + "index.php?title=Special:Userlogin&action=submitlogin" ); aPost.setPath( aPostURI.getEscapedPathQuery() ); @@ -810,6 +839,9 @@ public class Helper aPost.addParameter( "wpName", sWikiUser ); aPost.addParameter( "wpRemember", "1" ); aPost.addParameter( "wpPassword", sWikiPass ); + if ( sLoginToken.length() > 0 ) + aPost.addParameter( "wpLoginToken", sLoginToken ); + String[][] pArgs = GetSpecialArgs( xContext, aMainURL.getHost() ); if ( pArgs != null ) for ( int nArgInd = 0; nArgInd < pArgs.length; nArgInd++ ) diff --git a/swext/mediawiki/src/com/sun/star/wiki/WikiArticle.java b/swext/mediawiki/src/com/sun/star/wiki/WikiArticle.java index 13bb55abcedf..89025ed84513 100644 --- a/swext/mediawiki/src/com/sun/star/wiki/WikiArticle.java +++ b/swext/mediawiki/src/com/sun/star/wiki/WikiArticle.java @@ -145,6 +145,8 @@ public class WikiArticle if ( nResultCode == 200 ) sWebPage = aRequest.getResponseBodyAsString(); + aRequest.releaseConnection(); + if ( sWebPage != null ) { StringReader r = new StringReader(sWebPage); diff --git a/xpdf/makefile.mk b/xpdf/makefile.mk index c3dea0f006d5..452ab84fd0e4 100644 --- a/xpdf/makefile.mk +++ b/xpdf/makefile.mk @@ -48,7 +48,7 @@ dummy: TARFILE_NAME=xpdf-3.02 TARFILE_MD5=599dc4cc65a07ee868cf92a667a913d2 -PATCH_FILES=$(TARFILE_NAME).patch +PATCH_FILES=$(TARFILE_NAME).patch xpdf-3.02-sec.patch CONFIGURE_DIR= BUILD_DIR=$(CONFIGURE_DIR) diff --git a/xpdf/xpdf-3.02-sec.patch b/xpdf/xpdf-3.02-sec.patch new file mode 100644 index 000000000000..a33b85e8ab17 --- /dev/null +++ b/xpdf/xpdf-3.02-sec.patch @@ -0,0 +1,29 @@ +--- misc/xpdf-3.02/fofi/FoFiType1.cc 2007-02-27 23:05:51.000000000 +0100 ++++ misc/build/xpdf-3.02/fofi/FoFiType1.cc 2010-10-20 18:10:09.000000000 +0200 +@@ -224,7 +224,7 @@ + code = code * 8 + (*p2 - '0'); + } + } +- if (code < 256) { ++ if (code < 256 && code >= 0) { + for (p = p2; *p == ' ' || *p == '\t'; ++p) ; + if (*p == '/') { + ++p; +--- misc/xpdf-3.02/xpdf/Gfx.cc 2007-02-27 23:05:52.000000000 +0100 ++++ misc/build/xpdf-3.02/xpdf/Gfx.cc 2010-10-20 18:14:32.000000000 +0200 +@@ -444,6 +444,7 @@ + xref = xrefA; + subPage = gFalse; + printCommands = globalParams->getPrintCommands(); ++ parser = NULL; + + // start the resource stack + res = new GfxResources(xref, resDict, NULL); +@@ -486,6 +487,7 @@ + xref = xrefA; + subPage = gTrue; + printCommands = globalParams->getPrintCommands(); ++ parser = NULL; + + // start the resource stack + res = new GfxResources(xref, resDict, NULL); |