1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_editeng.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil -*- */ 32*cdf0e10cSrcweir #include <osl/endian.h> 33*cdf0e10cSrcweir #include <tools/cachestr.hxx> 34*cdf0e10cSrcweir #include <vcl/graph.hxx> 35*cdf0e10cSrcweir #include <vcl/svapp.hxx> 36*cdf0e10cSrcweir #include <svtools/rtfkeywd.hxx> 37*cdf0e10cSrcweir #include <svtools/rtftoken.h> 38*cdf0e10cSrcweir #include <svtools/filter.hxx> 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir #include <editeng/svxrtf.hxx> 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir using namespace ::rtl; 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir #ifndef DBG_UTIL 45*cdf0e10cSrcweir #undef DEBUG_JP 46*cdf0e10cSrcweir #endif 47*cdf0e10cSrcweir 48*cdf0e10cSrcweir #ifdef DEBUG_JP 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir #include <tools/fsys.hxx> 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir class GrfWindow : public WorkWindow 53*cdf0e10cSrcweir { 54*cdf0e10cSrcweir Graphic aGrf; 55*cdf0e10cSrcweir public: 56*cdf0e10cSrcweir GrfWindow( const Graphic& rGrf ); 57*cdf0e10cSrcweir virtual void Paint( const Rectangle& rRect ); 58*cdf0e10cSrcweir }; 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir GrfWindow::GrfWindow( const Graphic& rGrf ) 61*cdf0e10cSrcweir : WorkWindow( NULL ), 62*cdf0e10cSrcweir aGrf( rGrf ) 63*cdf0e10cSrcweir { 64*cdf0e10cSrcweir SetPosSizePixel( Point( 100, 0 ), Size( 300, 300 )); 65*cdf0e10cSrcweir Show(); 66*cdf0e10cSrcweir Invalidate(); 67*cdf0e10cSrcweir Update(); 68*cdf0e10cSrcweir } 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir void GrfWindow::Paint( const Rectangle& ) 71*cdf0e10cSrcweir { 72*cdf0e10cSrcweir aGrf.Draw( this, Point(0,0), GetSizePixel() ); 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir #endif 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir static sal_uInt8 __FAR_DATA aPal1[ 2 * 4 ] = { 77*cdf0e10cSrcweir 0x00, 0x00, 0x00, 0x00, // Schwarz 78*cdf0e10cSrcweir 0xFF, 0xFF, 0xFF, 0x00 // Weiss 79*cdf0e10cSrcweir }; 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir static sal_uInt8 __FAR_DATA aPal4[ 16 * 4 ] = { 82*cdf0e10cSrcweir 0x00, 0x00, 0x00, 0x00, 83*cdf0e10cSrcweir 0x80, 0x00, 0x00, 0x00, 84*cdf0e10cSrcweir 0x00, 0x80, 0x00, 0x00, 85*cdf0e10cSrcweir 0x80, 0x80, 0x00, 0x00, 86*cdf0e10cSrcweir 0x00, 0x00, 0x80, 0x00, 87*cdf0e10cSrcweir 0x80, 0x00, 0x80, 0x00, 88*cdf0e10cSrcweir 0x00, 0x80, 0x80, 0x00, 89*cdf0e10cSrcweir 0x80, 0x80, 0x80, 0x00, 90*cdf0e10cSrcweir 0xC0, 0xC0, 0xC0, 0x00, 91*cdf0e10cSrcweir 0xFF, 0x00, 0x00, 0x00, 92*cdf0e10cSrcweir 0x00, 0xFF, 0x00, 0x00, 93*cdf0e10cSrcweir 0xFF, 0xFF, 0x00, 0x00, 94*cdf0e10cSrcweir 0x00, 0x00, 0xFF, 0x00, 95*cdf0e10cSrcweir 0xFF, 0x00, 0xFF, 0x00, 96*cdf0e10cSrcweir 0x00, 0xFF, 0xFF, 0x00, 97*cdf0e10cSrcweir 0xFF, 0xFF, 0xFF, 0x00 98*cdf0e10cSrcweir }; 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir static sal_uInt8 __FAR_DATA aPal8[ 256 * 4 ] = 101*cdf0e10cSrcweir { 102*cdf0e10cSrcweir 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 103*cdf0e10cSrcweir 0x80, 0x92, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x80, 0x00, 0xAA, 0x00, 104*cdf0e10cSrcweir 0x00, 0x92, 0xAA, 0x00, 0xC1, 0xC1, 0xC1, 0x00, 0xC9, 0xC9, 0xC9, 0x00, 105*cdf0e10cSrcweir 0xAA, 0xDB, 0xFF, 0x00, 0x00, 0x49, 0xAA, 0x00, 0x00, 0x49, 0xFF, 0x00, 106*cdf0e10cSrcweir 0x00, 0x6D, 0x00, 0x00, 0x00, 0x6D, 0x55, 0x00, 0x00, 0x6D, 0xAA, 0x00, 107*cdf0e10cSrcweir 0x00, 0x6D, 0xFF, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x92, 0x55, 0x00, 108*cdf0e10cSrcweir 0x00, 0x24, 0xAA, 0x00, 0x00, 0x92, 0xFF, 0x00, 0x00, 0xB6, 0x00, 0x00, 109*cdf0e10cSrcweir 0x00, 0xB6, 0x55, 0x00, 0x00, 0xB6, 0xAA, 0x00, 0x00, 0xB6, 0xFF, 0x00, 110*cdf0e10cSrcweir 0x00, 0xDB, 0x00, 0x00, 0x00, 0xDB, 0x55, 0x00, 0x00, 0xDB, 0xAA, 0x00, 111*cdf0e10cSrcweir 0x00, 0xDB, 0xFF, 0x00, 0xFF, 0xDB, 0xAA, 0x00, 0x00, 0xFF, 0x55, 0x00, 112*cdf0e10cSrcweir 0x00, 0xFF, 0xAA, 0x00, 0xFF, 0xFF, 0xAA, 0x00, 0x2B, 0x00, 0x00, 0x00, 113*cdf0e10cSrcweir 0x2B, 0x00, 0x55, 0x00, 0x2B, 0x00, 0xAA, 0x00, 0x2B, 0x00, 0xFF, 0x00, 114*cdf0e10cSrcweir 0x2B, 0x24, 0x00, 0x00, 0x2B, 0x24, 0x55, 0x00, 0x2B, 0x24, 0xAA, 0x00, 115*cdf0e10cSrcweir 0x2B, 0x24, 0xFF, 0x00, 0x2B, 0x49, 0x00, 0x00, 0x2B, 0x49, 0x55, 0x00, 116*cdf0e10cSrcweir 0x2B, 0x49, 0xAA, 0x00, 0x2B, 0x49, 0xFF, 0x00, 0x2B, 0x6D, 0x00, 0x00, 117*cdf0e10cSrcweir 0x2B, 0x6D, 0x55, 0x00, 0x2B, 0x6D, 0xAA, 0x00, 0x2B, 0x6D, 0xFF, 0x00, 118*cdf0e10cSrcweir 0x2B, 0x92, 0x00, 0x00, 0x2B, 0x92, 0x55, 0x00, 0x2B, 0x92, 0xAA, 0x00, 119*cdf0e10cSrcweir 0x2B, 0x92, 0xFF, 0x00, 0x2B, 0xB6, 0x00, 0x00, 0x2B, 0xB6, 0x55, 0x00, 120*cdf0e10cSrcweir 0x2B, 0xB6, 0xAA, 0x00, 0x2B, 0xB6, 0xFF, 0x00, 0x2B, 0xDB, 0x00, 0x00, 121*cdf0e10cSrcweir 0x2B, 0xDB, 0x55, 0x00, 0x2B, 0xDB, 0xAA, 0x00, 0x2B, 0xDB, 0xFF, 0x00, 122*cdf0e10cSrcweir 0x2B, 0xFF, 0x00, 0x00, 0x2B, 0xFF, 0x55, 0x00, 0x2B, 0xFF, 0xAA, 0x00, 123*cdf0e10cSrcweir 0x2B, 0xFF, 0xFF, 0x00, 0x55, 0x00, 0x00, 0x00, 0x55, 0x00, 0x55, 0x00, 124*cdf0e10cSrcweir 0x55, 0x00, 0xAA, 0x00, 0x55, 0x00, 0xFF, 0x00, 0x55, 0x24, 0x00, 0x00, 125*cdf0e10cSrcweir 0x55, 0x24, 0x55, 0x00, 0x55, 0x24, 0xAA, 0x00, 0x55, 0x24, 0xFF, 0x00, 126*cdf0e10cSrcweir 0x55, 0x49, 0x00, 0x00, 0x55, 0x49, 0x55, 0x00, 0x55, 0x49, 0xAA, 0x00, 127*cdf0e10cSrcweir 0x55, 0x49, 0xFF, 0x00, 0x55, 0x6D, 0x00, 0x00, 0x55, 0x6D, 0x55, 0x00, 128*cdf0e10cSrcweir 0x55, 0x6D, 0xAA, 0x00, 0x55, 0x6D, 0xFF, 0x00, 0x55, 0x92, 0x00, 0x00, 129*cdf0e10cSrcweir 0x55, 0x92, 0x55, 0x00, 0x55, 0x92, 0xAA, 0x00, 0x55, 0x92, 0xFF, 0x00, 130*cdf0e10cSrcweir 0x55, 0xB6, 0x00, 0x00, 0x55, 0xB6, 0x55, 0x00, 0x55, 0xB6, 0xAA, 0x00, 131*cdf0e10cSrcweir 0x55, 0xB6, 0xFF, 0x00, 0x55, 0xDB, 0x00, 0x00, 0x55, 0xDB, 0x55, 0x00, 132*cdf0e10cSrcweir 0x55, 0xDB, 0xAA, 0x00, 0x55, 0xDB, 0xFF, 0x00, 0x55, 0xFF, 0x00, 0x00, 133*cdf0e10cSrcweir 0x55, 0xFF, 0x55, 0x00, 0x55, 0xFF, 0xAA, 0x00, 0x55, 0xFF, 0xFF, 0x00, 134*cdf0e10cSrcweir 0x00, 0x00, 0x55, 0x00, 0x80, 0x00, 0x55, 0x00, 0x00, 0x24, 0x55, 0x00, 135*cdf0e10cSrcweir 0x80, 0x00, 0xFF, 0x00, 0x80, 0x24, 0x00, 0x00, 0x80, 0x24, 0x55, 0x00, 136*cdf0e10cSrcweir 0x80, 0x24, 0xAA, 0x00, 0x80, 0x24, 0xFF, 0x00, 0x80, 0x49, 0x00, 0x00, 137*cdf0e10cSrcweir 0x80, 0x49, 0x55, 0x00, 0x80, 0x49, 0xAA, 0x00, 0x80, 0x49, 0xFF, 0x00, 138*cdf0e10cSrcweir 0x80, 0x6D, 0x00, 0x00, 0x80, 0x6D, 0x55, 0x00, 0x80, 0x6D, 0xAA, 0x00, 139*cdf0e10cSrcweir 0x80, 0x6D, 0xFF, 0x00, 0x08, 0x08, 0x08, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 140*cdf0e10cSrcweir 0x17, 0x17, 0x17, 0x00, 0x1F, 0x1F, 0x1F, 0x00, 0x27, 0x27, 0x27, 0x00, 141*cdf0e10cSrcweir 0x2E, 0x2E, 0x2E, 0x00, 0x36, 0x36, 0x36, 0x00, 0x3E, 0x3E, 0x3E, 0x00, 142*cdf0e10cSrcweir 0x46, 0x46, 0x46, 0x00, 0x4D, 0x4D, 0x4D, 0x00, 0x55, 0x55, 0x55, 0x00, 143*cdf0e10cSrcweir 0x5D, 0x5D, 0x5D, 0x00, 0x64, 0x64, 0x64, 0x00, 0x6C, 0x6C, 0x6C, 0x00, 144*cdf0e10cSrcweir 0x74, 0x74, 0x74, 0x00, 0x7C, 0x7C, 0x7C, 0x00, 0xFF, 0xDB, 0x00, 0x00, 145*cdf0e10cSrcweir 0x8B, 0x8B, 0x8B, 0x00, 0x93, 0x93, 0x93, 0x00, 0x9B, 0x9B, 0x9B, 0x00, 146*cdf0e10cSrcweir 0xFF, 0xB6, 0xFF, 0x00, 0xAA, 0xAA, 0xAA, 0x00, 0xB2, 0xB2, 0xB2, 0x00, 147*cdf0e10cSrcweir 0xB9, 0xB9, 0xB9, 0x00, 0x00, 0x24, 0xFF, 0x00, 0x00, 0x49, 0x00, 0x00, 148*cdf0e10cSrcweir 0xD1, 0xD1, 0xD1, 0x00, 0xD8, 0xD8, 0xD8, 0x00, 0xE0, 0xE0, 0xE0, 0x00, 149*cdf0e10cSrcweir 0xE8, 0xE8, 0xE8, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0xFF, 0xB6, 0xAA, 0x00, 150*cdf0e10cSrcweir 0xFF, 0xDB, 0xFF, 0x00, 0x80, 0x92, 0x55, 0x00, 0x80, 0x92, 0xAA, 0x00, 151*cdf0e10cSrcweir 0x80, 0x92, 0xFF, 0x00, 0x80, 0xB6, 0x00, 0x00, 0x80, 0xB6, 0x55, 0x00, 152*cdf0e10cSrcweir 0x80, 0xB6, 0xAA, 0x00, 0x80, 0xB6, 0xFF, 0x00, 0x80, 0xDB, 0x00, 0x00, 153*cdf0e10cSrcweir 0x80, 0xDB, 0x55, 0x00, 0x80, 0xDB, 0xAA, 0x00, 0x80, 0xDB, 0xFF, 0x00, 154*cdf0e10cSrcweir 0x80, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0x55, 0x00, 0x80, 0xFF, 0xAA, 0x00, 155*cdf0e10cSrcweir 0x80, 0xFF, 0xFF, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x55, 0x00, 156*cdf0e10cSrcweir 0xAA, 0x00, 0xAA, 0x00, 0xAA, 0x00, 0xFF, 0x00, 0xAA, 0x24, 0x00, 0x00, 157*cdf0e10cSrcweir 0xAA, 0x24, 0x55, 0x00, 0xAA, 0x24, 0xAA, 0x00, 0xAA, 0x24, 0xFF, 0x00, 158*cdf0e10cSrcweir 0xAA, 0x49, 0x00, 0x00, 0xAA, 0x49, 0x55, 0x00, 0xAA, 0x49, 0xAA, 0x00, 159*cdf0e10cSrcweir 0xAA, 0x49, 0xFF, 0x00, 0xAA, 0x6D, 0x00, 0x00, 0xAA, 0x6D, 0x55, 0x00, 160*cdf0e10cSrcweir 0xAA, 0x6D, 0xAA, 0x00, 0xAA, 0x6D, 0xFF, 0x00, 0xAA, 0x92, 0x00, 0x00, 161*cdf0e10cSrcweir 0xAA, 0x92, 0x55, 0x00, 0xAA, 0x92, 0xAA, 0x00, 0xAA, 0x92, 0xFF, 0x00, 162*cdf0e10cSrcweir 0xAA, 0xB6, 0x00, 0x00, 0xAA, 0xB6, 0x55, 0x00, 0xAA, 0xB6, 0xAA, 0x00, 163*cdf0e10cSrcweir 0xAA, 0xB6, 0xFF, 0x00, 0xAA, 0xDB, 0x00, 0x00, 0xAA, 0xDB, 0x55, 0x00, 164*cdf0e10cSrcweir 0xAA, 0xDB, 0xAA, 0x00, 0x00, 0x49, 0x55, 0x00, 0xAA, 0xFF, 0x00, 0x00, 165*cdf0e10cSrcweir 0xAA, 0xFF, 0x55, 0x00, 0xAA, 0xFF, 0xAA, 0x00, 0xAA, 0xFF, 0xFF, 0x00, 166*cdf0e10cSrcweir 0xD5, 0x00, 0x00, 0x00, 0xD5, 0x00, 0x55, 0x00, 0xD5, 0x00, 0xAA, 0x00, 167*cdf0e10cSrcweir 0xD5, 0x00, 0xFF, 0x00, 0xD5, 0x24, 0x00, 0x00, 0xD5, 0x24, 0x55, 0x00, 168*cdf0e10cSrcweir 0xD5, 0x24, 0xAA, 0x00, 0xD5, 0x24, 0xFF, 0x00, 0xD5, 0x49, 0x00, 0x00, 169*cdf0e10cSrcweir 0xD5, 0x49, 0x55, 0x00, 0xD5, 0x49, 0xAA, 0x00, 0xD5, 0x49, 0xFF, 0x00, 170*cdf0e10cSrcweir 0xD5, 0x6D, 0x00, 0x00, 0xD5, 0x6D, 0x55, 0x00, 0xD5, 0x6D, 0xAA, 0x00, 171*cdf0e10cSrcweir 0xD5, 0x6D, 0xFF, 0x00, 0xD5, 0x92, 0x00, 0x00, 0xD5, 0x92, 0x55, 0x00, 172*cdf0e10cSrcweir 0xD5, 0x92, 0xAA, 0x00, 0xD5, 0x92, 0xFF, 0x00, 0xD5, 0xB6, 0x00, 0x00, 173*cdf0e10cSrcweir 0xD5, 0xB6, 0x55, 0x00, 0xD5, 0xB6, 0xAA, 0x00, 0xD5, 0xB6, 0xFF, 0x00, 174*cdf0e10cSrcweir 0xD5, 0xDB, 0x00, 0x00, 0xD5, 0xDB, 0x55, 0x00, 0xD5, 0xDB, 0xAA, 0x00, 175*cdf0e10cSrcweir 0xD5, 0xDB, 0xFF, 0x00, 0xD5, 0xFF, 0x00, 0x00, 0xD5, 0xFF, 0x55, 0x00, 176*cdf0e10cSrcweir 0xD5, 0xFF, 0xAA, 0x00, 0xD5, 0xFF, 0xFF, 0x00, 0xFF, 0xDB, 0x55, 0x00, 177*cdf0e10cSrcweir 0xFF, 0x00, 0x55, 0x00, 0xFF, 0x00, 0xAA, 0x00, 0xFF, 0xFF, 0x55, 0x00, 178*cdf0e10cSrcweir 0xFF, 0x24, 0x00, 0x00, 0xFF, 0x24, 0x55, 0x00, 0xFF, 0x24, 0xAA, 0x00, 179*cdf0e10cSrcweir 0xFF, 0x24, 0xFF, 0x00, 0xFF, 0x49, 0x00, 0x00, 0xFF, 0x49, 0x55, 0x00, 180*cdf0e10cSrcweir 0xFF, 0x49, 0xAA, 0x00, 0xFF, 0x49, 0xFF, 0x00, 0xFF, 0x6D, 0x00, 0x00, 181*cdf0e10cSrcweir 0xFF, 0x6D, 0x55, 0x00, 0xFF, 0x6D, 0xAA, 0x00, 0xFF, 0x6D, 0xFF, 0x00, 182*cdf0e10cSrcweir 0xFF, 0x92, 0x00, 0x00, 0xFF, 0x92, 0x55, 0x00, 0xFF, 0x92, 0xAA, 0x00, 183*cdf0e10cSrcweir 0xFF, 0x92, 0xFF, 0x00, 0xFF, 0xB6, 0x00, 0x00, 0xFF, 0xB6, 0x55, 0x00, 184*cdf0e10cSrcweir 0xF7, 0xF7, 0xF7, 0x00, 0xA2, 0xA2, 0xA2, 0x00, 0x83, 0x83, 0x83, 0x00, 185*cdf0e10cSrcweir 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 186*cdf0e10cSrcweir 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 187*cdf0e10cSrcweir 0xFF, 0xFF, 0xFF, 0x00 188*cdf0e10cSrcweir }; 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir /* */ 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir 194*cdf0e10cSrcweir inline long SwapLong( long n ) 195*cdf0e10cSrcweir { 196*cdf0e10cSrcweir #ifndef OSL_LITENDIAN 197*cdf0e10cSrcweir return SWAPLONG( n ); 198*cdf0e10cSrcweir #else 199*cdf0e10cSrcweir return n; 200*cdf0e10cSrcweir #endif 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir inline short SwapShort( short n ) 204*cdf0e10cSrcweir { 205*cdf0e10cSrcweir #ifndef OSL_LITENDIAN 206*cdf0e10cSrcweir return SWAPSHORT( n ); 207*cdf0e10cSrcweir #else 208*cdf0e10cSrcweir return n; 209*cdf0e10cSrcweir #endif 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir static void WriteBMPHeader( SvStream& rStream, 214*cdf0e10cSrcweir const SvxRTFPictureType& rPicType ) 215*cdf0e10cSrcweir { 216*cdf0e10cSrcweir sal_uInt32 n4Width = rPicType.nWidth; 217*cdf0e10cSrcweir sal_uInt32 n4Height = rPicType.nHeight; 218*cdf0e10cSrcweir sal_uInt16 n4ColBits = rPicType.nBitsPerPixel; 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir sal_uInt16 nColors = (1 << n4ColBits); // Anzahl der Farben ( 1, 16, 256 ) 221*cdf0e10cSrcweir sal_uInt16 nWdtOut = rPicType.nWidthBytes; 222*cdf0e10cSrcweir if( !nWdtOut ) 223*cdf0e10cSrcweir nWdtOut = (sal_uInt16)((( n4Width * n4ColBits + 31 ) / 32 ) * 4 ); 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir long nOffset = 14 + 40; // BMP_FILE_HD_SIZ + sizeof(*pBmpInfo); 226*cdf0e10cSrcweir if( 256 >= nColors ) 227*cdf0e10cSrcweir nOffset += nColors * 4; 228*cdf0e10cSrcweir long nSize = nOffset + nWdtOut * n4Height; 229*cdf0e10cSrcweir rStream << "BM" // = "BM" 230*cdf0e10cSrcweir << SwapLong(nSize) // Filesize in Bytes 231*cdf0e10cSrcweir << SwapShort(0) // Reserviert 232*cdf0e10cSrcweir << SwapShort(0) // Reserviert 233*cdf0e10cSrcweir << SwapLong(nOffset); // Offset? 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir rStream << SwapLong(40) // sizeof( BmpInfo ) 236*cdf0e10cSrcweir << SwapLong(n4Width) 237*cdf0e10cSrcweir << SwapLong(n4Height) 238*cdf0e10cSrcweir << (sal_uInt16)1 239*cdf0e10cSrcweir << n4ColBits 240*cdf0e10cSrcweir << SwapLong(0) 241*cdf0e10cSrcweir << SwapLong(0) 242*cdf0e10cSrcweir << SwapLong( rPicType.nGoalWidth 243*cdf0e10cSrcweir ? rPicType.nGoalWidth * 1000L / 254L 244*cdf0e10cSrcweir : 0 ) // DPI in Pixel per Meter 245*cdf0e10cSrcweir << SwapLong( rPicType.nGoalHeight 246*cdf0e10cSrcweir ? rPicType.nGoalHeight * 1000L / 254L // dito 247*cdf0e10cSrcweir : 0 ) 248*cdf0e10cSrcweir << SwapLong(0) 249*cdf0e10cSrcweir << SwapLong(0); 250*cdf0e10cSrcweir 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir switch( rPicType.nBitsPerPixel ) 253*cdf0e10cSrcweir { 254*cdf0e10cSrcweir case 1: rStream.Write( aPal1, sizeof( aPal1 )); break; 255*cdf0e10cSrcweir case 4: rStream.Write( aPal4, sizeof( aPal4 )); break; 256*cdf0e10cSrcweir case 8: rStream.Write( aPal8, sizeof( aPal8 )); break; 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir } 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir /* */ 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir // wandel die ASCII-HexCodes in binaere Zeichen um. Werden 263*cdf0e10cSrcweir // ungueltige Daten gefunden (Zeichen ausser 0-9|a-f|A-F, so 264*cdf0e10cSrcweir // wird USHRT_MAX returnt, ansonsten die Anzahl der umgewandelten Ze. 265*cdf0e10cSrcweir xub_StrLen SvxRTFParser::HexToBin( String& rToken ) 266*cdf0e10cSrcweir { 267*cdf0e10cSrcweir // dann mache aus den Hex-Werten mal "Binare Daten" 268*cdf0e10cSrcweir // (missbrauche den String als temp Buffer) 269*cdf0e10cSrcweir if( rToken.Len() & 1 ) // ungerade Anzahl, mit 0 auffuellen 270*cdf0e10cSrcweir rToken += '0'; 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir xub_StrLen n, nLen; 273*cdf0e10cSrcweir sal_Unicode nVal; 274*cdf0e10cSrcweir sal_Bool bValidData = sal_True; 275*cdf0e10cSrcweir const sal_Unicode* pStr = rToken.GetBufferAccess(); 276*cdf0e10cSrcweir sal_Char* pData = (sal_Char*)pStr; 277*cdf0e10cSrcweir for( n = 0, nLen = rToken.Len(); n < nLen; ++n, ++pStr ) 278*cdf0e10cSrcweir { 279*cdf0e10cSrcweir if( ((nVal = *pStr) >= '0') && ( nVal <= '9') ) 280*cdf0e10cSrcweir nVal -= '0'; 281*cdf0e10cSrcweir else if( (nVal >= 'A') && (nVal <= 'F') ) 282*cdf0e10cSrcweir nVal -= 'A' - 10; 283*cdf0e10cSrcweir else if( (nVal >= 'a') && (nVal <= 'f') ) 284*cdf0e10cSrcweir nVal -= 'a' - 10; 285*cdf0e10cSrcweir else 286*cdf0e10cSrcweir { 287*cdf0e10cSrcweir DBG_ASSERT( !this, "ungueltiger Hex-Wert" ); 288*cdf0e10cSrcweir bValidData = sal_False; 289*cdf0e10cSrcweir break; 290*cdf0e10cSrcweir } 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir if( n & 1 ) 293*cdf0e10cSrcweir *(pData++) |= nVal & 0x0f; 294*cdf0e10cSrcweir else 295*cdf0e10cSrcweir *(pData) = sal::static_int_cast< char >( ( nVal << 4 ) & 0xf0 ); 296*cdf0e10cSrcweir } 297*cdf0e10cSrcweir // the len div 2, because 2 character are one byte 298*cdf0e10cSrcweir return bValidData ? nLen / 2 : STRING_NOTFOUND; 299*cdf0e10cSrcweir } 300*cdf0e10cSrcweir 301*cdf0e10cSrcweir sal_Bool SvxRTFParser::ReadBmpData( Graphic& rGrf, SvxRTFPictureType& rPicType ) 302*cdf0e10cSrcweir { 303*cdf0e10cSrcweir // die alten Daten loeschen 304*cdf0e10cSrcweir rGrf.Clear(); 305*cdf0e10cSrcweir // sal_uInt32 nBmpSize = 0; 306*cdf0e10cSrcweir 307*cdf0e10cSrcweir rtl_TextEncoding eOldEnc = GetSrcEncoding(); 308*cdf0e10cSrcweir SetSrcEncoding( RTL_TEXTENCODING_MS_1252 ); 309*cdf0e10cSrcweir 310*cdf0e10cSrcweir const sal_Char* pFilterNm = 0; 311*cdf0e10cSrcweir SvCacheStream* pTmpFile = 0; 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir int nToken = 0; 314*cdf0e10cSrcweir bool bValidBmp = true, bFirstTextToken = true; 315*cdf0e10cSrcweir int _nOpenBrakets = 1, // die erste wurde schon vorher erkannt !! 316*cdf0e10cSrcweir nValidDataBraket = 1; 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir if( RTF_SHPPICT == GetStackPtr(0)->nTokenId ) 319*cdf0e10cSrcweir ++nValidDataBraket; 320*cdf0e10cSrcweir OUString sShapePropertyName, sShapePropertyValue; 321*cdf0e10cSrcweir int nShapePropertyBracket = -1; 322*cdf0e10cSrcweir while( _nOpenBrakets && IsParserWorking() && bValidBmp ) 323*cdf0e10cSrcweir { 324*cdf0e10cSrcweir nToken = GetNextToken(); 325*cdf0e10cSrcweir sal_uInt16 nVal = sal_uInt16( nTokenValue ); 326*cdf0e10cSrcweir switch( nToken ) 327*cdf0e10cSrcweir { 328*cdf0e10cSrcweir case '}': 329*cdf0e10cSrcweir --_nOpenBrakets; 330*cdf0e10cSrcweir if( nShapePropertyBracket > 0 && nShapePropertyBracket > _nOpenBrakets ) 331*cdf0e10cSrcweir { 332*cdf0e10cSrcweir nShapePropertyBracket = -1; 333*cdf0e10cSrcweir if( sShapePropertyName.getLength() ) 334*cdf0e10cSrcweir { 335*cdf0e10cSrcweir rPicType.aPropertyPairs.push_back( ::std::pair< OUString, OUString >( sShapePropertyName, sShapePropertyValue ) ); 336*cdf0e10cSrcweir sShapePropertyName = sShapePropertyValue = ::rtl::OUString(); 337*cdf0e10cSrcweir } 338*cdf0e10cSrcweir } 339*cdf0e10cSrcweir break; 340*cdf0e10cSrcweir case '{': 341*cdf0e10cSrcweir { 342*cdf0e10cSrcweir if( RTF_IGNOREFLAG != GetNextToken() ) 343*cdf0e10cSrcweir nToken = SkipToken( -1 ); 344*cdf0e10cSrcweir else if( RTF_UNKNOWNCONTROL != GetNextToken() ) 345*cdf0e10cSrcweir nToken = SkipToken( -2 ); 346*cdf0e10cSrcweir else 347*cdf0e10cSrcweir { 348*cdf0e10cSrcweir // gleich herausfiltern 349*cdf0e10cSrcweir ReadUnknownData(); 350*cdf0e10cSrcweir nToken = GetNextToken(); 351*cdf0e10cSrcweir if( '}' != nToken ) 352*cdf0e10cSrcweir eState = SVPAR_ERROR; 353*cdf0e10cSrcweir break; 354*cdf0e10cSrcweir } 355*cdf0e10cSrcweir ++_nOpenBrakets; 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir break; 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir case RTF_MACPICT: 360*cdf0e10cSrcweir { 361*cdf0e10cSrcweir rPicType.eStyle = SvxRTFPictureType::MAC_QUICKDRAW; 362*cdf0e10cSrcweir // Mac-Pict bekommt einen leeren Header voran 363*cdf0e10cSrcweir pTmpFile = new SvCacheStream; 364*cdf0e10cSrcweir ByteString aStr; 365*cdf0e10cSrcweir aStr.Fill( 512, '\0' ); 366*cdf0e10cSrcweir pTmpFile->Write( aStr.GetBuffer(), aStr.Len() ); 367*cdf0e10cSrcweir pFilterNm = "PCT"; 368*cdf0e10cSrcweir } 369*cdf0e10cSrcweir break; 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir case RTF_EMFBLIP: 372*cdf0e10cSrcweir case RTF_WMETAFILE: 373*cdf0e10cSrcweir case RTF_PNGBLIP: 374*cdf0e10cSrcweir case RTF_JPEGBLIP: 375*cdf0e10cSrcweir case RTF_WBITMAP: 376*cdf0e10cSrcweir case RTF_OSMETAFILE: 377*cdf0e10cSrcweir case RTF_DIBITMAP: 378*cdf0e10cSrcweir { 379*cdf0e10cSrcweir switch( nToken ) 380*cdf0e10cSrcweir { 381*cdf0e10cSrcweir case RTF_EMFBLIP: 382*cdf0e10cSrcweir rPicType.eStyle = SvxRTFPictureType::ENHANCED_MF; 383*cdf0e10cSrcweir pFilterNm = "EMF"; 384*cdf0e10cSrcweir break; 385*cdf0e10cSrcweir case RTF_WMETAFILE: 386*cdf0e10cSrcweir rPicType.eStyle = SvxRTFPictureType::WIN_METAFILE; 387*cdf0e10cSrcweir pFilterNm = "WMF"; 388*cdf0e10cSrcweir break; 389*cdf0e10cSrcweir case RTF_PNGBLIP: 390*cdf0e10cSrcweir rPicType.eStyle = SvxRTFPictureType::RTF_PNG; 391*cdf0e10cSrcweir pFilterNm = "PNG"; 392*cdf0e10cSrcweir break; 393*cdf0e10cSrcweir case RTF_JPEGBLIP: 394*cdf0e10cSrcweir rPicType.eStyle = SvxRTFPictureType::RTF_JPG; 395*cdf0e10cSrcweir pFilterNm = "JPG"; 396*cdf0e10cSrcweir break; 397*cdf0e10cSrcweir 398*cdf0e10cSrcweir case RTF_WBITMAP: 399*cdf0e10cSrcweir rPicType.eStyle = SvxRTFPictureType::RTF_BITMAP; 400*cdf0e10cSrcweir break; 401*cdf0e10cSrcweir case RTF_OSMETAFILE: 402*cdf0e10cSrcweir rPicType.eStyle = SvxRTFPictureType::OS2_METAFILE; 403*cdf0e10cSrcweir break; 404*cdf0e10cSrcweir case RTF_DIBITMAP: 405*cdf0e10cSrcweir rPicType.eStyle = SvxRTFPictureType::RTF_DI_BMP; 406*cdf0e10cSrcweir break; 407*cdf0e10cSrcweir } 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir rPicType.nType = nVal; 410*cdf0e10cSrcweir pTmpFile = new SvCacheStream; 411*cdf0e10cSrcweir } 412*cdf0e10cSrcweir break; 413*cdf0e10cSrcweir 414*cdf0e10cSrcweir case RTF_PICW: rPicType.nWidth = nVal; break; 415*cdf0e10cSrcweir case RTF_PICH: rPicType.nHeight = nVal; break; 416*cdf0e10cSrcweir case RTF_WBMBITSPIXEL: rPicType.nBitsPerPixel = nVal; break; 417*cdf0e10cSrcweir case RTF_WBMPLANES: rPicType.nPlanes = nVal; break; 418*cdf0e10cSrcweir case RTF_WBMWIDTHBYTES: rPicType.nWidthBytes = nVal; break; 419*cdf0e10cSrcweir case RTF_PICWGOAL: rPicType.nGoalWidth = nVal; break; 420*cdf0e10cSrcweir case RTF_PICHGOAL: rPicType.nGoalHeight = nVal; break; 421*cdf0e10cSrcweir case RTF_BIN: 422*cdf0e10cSrcweir rPicType.nMode = SvxRTFPictureType::BINARY_MODE; 423*cdf0e10cSrcweir rPicType.uPicLen = nTokenValue; 424*cdf0e10cSrcweir if (rPicType.uPicLen) 425*cdf0e10cSrcweir { 426*cdf0e10cSrcweir sal_uInt32 nPos = rStrm.Tell(); 427*cdf0e10cSrcweir nPos = nPos; 428*cdf0e10cSrcweir rStrm.SeekRel(-1); 429*cdf0e10cSrcweir sal_uInt8 aData[4096]; 430*cdf0e10cSrcweir sal_uInt32 nSize = sizeof(aData); 431*cdf0e10cSrcweir 432*cdf0e10cSrcweir while (rPicType.uPicLen > 0) 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir if (rPicType.uPicLen < nSize) 435*cdf0e10cSrcweir nSize = rPicType.uPicLen; 436*cdf0e10cSrcweir 437*cdf0e10cSrcweir rStrm.Read(aData, nSize); 438*cdf0e10cSrcweir pTmpFile->Write(aData, nSize); 439*cdf0e10cSrcweir rPicType.uPicLen -= nSize; 440*cdf0e10cSrcweir } 441*cdf0e10cSrcweir nNextCh = GetNextChar(); 442*cdf0e10cSrcweir bValidBmp = !pTmpFile->GetError(); 443*cdf0e10cSrcweir nPos = rStrm.Tell(); 444*cdf0e10cSrcweir nPos = nPos; 445*cdf0e10cSrcweir } 446*cdf0e10cSrcweir break; 447*cdf0e10cSrcweir case RTF_PICSCALEX: rPicType.nScalX = nVal; break; 448*cdf0e10cSrcweir case RTF_PICSCALEY: rPicType.nScalY = nVal; break; 449*cdf0e10cSrcweir case RTF_PICSCALED: break; 450*cdf0e10cSrcweir 451*cdf0e10cSrcweir case RTF_PICCROPT: rPicType.nCropT = (short)nTokenValue; break; 452*cdf0e10cSrcweir case RTF_PICCROPB: rPicType.nCropB = (short)nTokenValue; break; 453*cdf0e10cSrcweir case RTF_PICCROPL: rPicType.nCropL = (short)nTokenValue; break; 454*cdf0e10cSrcweir case RTF_PICCROPR: rPicType.nCropR = (short)nTokenValue; break; 455*cdf0e10cSrcweir case RTF_SP: 456*cdf0e10cSrcweir //read pairs of {\sn Name}{\sv Value} 457*cdf0e10cSrcweir nShapePropertyBracket = _nOpenBrakets; 458*cdf0e10cSrcweir break; 459*cdf0e10cSrcweir case RTF_SN: 460*cdf0e10cSrcweir nToken = GetNextToken(); 461*cdf0e10cSrcweir if( nToken != '}' ) 462*cdf0e10cSrcweir sShapePropertyName = aToken; 463*cdf0e10cSrcweir else 464*cdf0e10cSrcweir nToken = SkipToken( -1 ); 465*cdf0e10cSrcweir break; 466*cdf0e10cSrcweir case RTF_SV: 467*cdf0e10cSrcweir nToken = GetNextToken(); 468*cdf0e10cSrcweir if( nToken != '}' ) 469*cdf0e10cSrcweir sShapePropertyValue = aToken; 470*cdf0e10cSrcweir else 471*cdf0e10cSrcweir nToken = SkipToken( -1 ); 472*cdf0e10cSrcweir break; 473*cdf0e10cSrcweir case RTF_TEXTTOKEN: 474*cdf0e10cSrcweir // JP 26.06.98: Bug #51719# - nur TextToken auf 1. Ebene 475*cdf0e10cSrcweir // auswerten. Alle anderen sind irgendwelche 476*cdf0e10cSrcweir // nicht auszuwertende Daten 477*cdf0e10cSrcweir if( nValidDataBraket != _nOpenBrakets ) 478*cdf0e10cSrcweir break; 479*cdf0e10cSrcweir 480*cdf0e10cSrcweir if( bFirstTextToken ) 481*cdf0e10cSrcweir { 482*cdf0e10cSrcweir switch( rPicType.eStyle ) 483*cdf0e10cSrcweir { 484*cdf0e10cSrcweir case SvxRTFPictureType::RTF_BITMAP: 485*cdf0e10cSrcweir // erstmal die Header und Info-Struktur schreiben 486*cdf0e10cSrcweir if( pTmpFile ) 487*cdf0e10cSrcweir ::WriteBMPHeader( *pTmpFile, rPicType ); 488*cdf0e10cSrcweir break; 489*cdf0e10cSrcweir default: 490*cdf0e10cSrcweir break; 491*cdf0e10cSrcweir } 492*cdf0e10cSrcweir bFirstTextToken = sal_False; 493*cdf0e10cSrcweir } 494*cdf0e10cSrcweir 495*cdf0e10cSrcweir if( pTmpFile && SvxRTFPictureType::HEX_MODE == rPicType.nMode ) 496*cdf0e10cSrcweir { 497*cdf0e10cSrcweir xub_StrLen nTokenLen = HexToBin( aToken ); 498*cdf0e10cSrcweir if( STRING_NOTFOUND == nTokenLen ) 499*cdf0e10cSrcweir bValidBmp = sal_False; 500*cdf0e10cSrcweir else 501*cdf0e10cSrcweir { 502*cdf0e10cSrcweir pTmpFile->Write( (sal_Char*)aToken.GetBuffer(), 503*cdf0e10cSrcweir nTokenLen ); 504*cdf0e10cSrcweir bValidBmp = 0 == pTmpFile->GetError(); 505*cdf0e10cSrcweir } 506*cdf0e10cSrcweir } 507*cdf0e10cSrcweir break; 508*cdf0e10cSrcweir } 509*cdf0e10cSrcweir } 510*cdf0e10cSrcweir 511*cdf0e10cSrcweir if (pTmpFile) 512*cdf0e10cSrcweir { 513*cdf0e10cSrcweir //#i20775# 514*cdf0e10cSrcweir if (pTmpFile->Tell() == 0) 515*cdf0e10cSrcweir bValidBmp = false; 516*cdf0e10cSrcweir 517*cdf0e10cSrcweir if( bValidBmp ) 518*cdf0e10cSrcweir { 519*cdf0e10cSrcweir GraphicFilter* pGF = GraphicFilter::GetGraphicFilter(); 520*cdf0e10cSrcweir sal_uInt16 nImportFilter = GRFILTER_FORMAT_DONTKNOW; 521*cdf0e10cSrcweir 522*cdf0e10cSrcweir if( pFilterNm ) 523*cdf0e10cSrcweir { 524*cdf0e10cSrcweir String sTmp; 525*cdf0e10cSrcweir for( sal_uInt16 n = pGF->GetImportFormatCount(); n; ) 526*cdf0e10cSrcweir { 527*cdf0e10cSrcweir sTmp = pGF->GetImportFormatShortName( --n ); 528*cdf0e10cSrcweir if( sTmp.EqualsAscii( pFilterNm )) 529*cdf0e10cSrcweir { 530*cdf0e10cSrcweir nImportFilter = n; 531*cdf0e10cSrcweir break; 532*cdf0e10cSrcweir } 533*cdf0e10cSrcweir } 534*cdf0e10cSrcweir } 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir String sTmpStr; 537*cdf0e10cSrcweir pTmpFile->Seek( STREAM_SEEK_TO_BEGIN ); 538*cdf0e10cSrcweir bValidBmp = 0 == pGF->ImportGraphic( rGrf, sTmpStr, *pTmpFile, 539*cdf0e10cSrcweir nImportFilter ); 540*cdf0e10cSrcweir } 541*cdf0e10cSrcweir delete pTmpFile; 542*cdf0e10cSrcweir } 543*cdf0e10cSrcweir 544*cdf0e10cSrcweir if( !bValidBmp ) 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir rGrf.Clear(); 547*cdf0e10cSrcweir //TODO If nToken were not initialized to 0 above, it would potentially 548*cdf0e10cSrcweir // be used uninitialized here (if IsParserWorking() is false at the 549*cdf0e10cSrcweir // start of the while loop above): 550*cdf0e10cSrcweir if( '}' != nToken ) 551*cdf0e10cSrcweir SkipGroup(); 552*cdf0e10cSrcweir } 553*cdf0e10cSrcweir else 554*cdf0e10cSrcweir { 555*cdf0e10cSrcweir switch( rPicType.eStyle ) 556*cdf0e10cSrcweir { 557*cdf0e10cSrcweir //?? ENHANCED_MF, // in den Pict.Daten steht ein Enhanced-Metafile 558*cdf0e10cSrcweir case SvxRTFPictureType::RTF_PNG: 559*cdf0e10cSrcweir case SvxRTFPictureType::RTF_JPG: 560*cdf0e10cSrcweir { 561*cdf0e10cSrcweir const MapMode aMap( MAP_100TH_MM ); 562*cdf0e10cSrcweir Size aSize( rGrf.GetPrefSize() ); 563*cdf0e10cSrcweir if( MAP_PIXEL == rGrf.GetPrefMapMode().GetMapUnit() ) 564*cdf0e10cSrcweir aSize = Application::GetDefaultDevice()->PixelToLogic( 565*cdf0e10cSrcweir aSize, aMap ); 566*cdf0e10cSrcweir else 567*cdf0e10cSrcweir aSize = OutputDevice::LogicToLogic( aSize, 568*cdf0e10cSrcweir rGrf.GetPrefMapMode(), aMap ); 569*cdf0e10cSrcweir rPicType.nWidth = sal::static_int_cast< sal_uInt16 >(aSize.Width()); 570*cdf0e10cSrcweir rPicType.nHeight = sal::static_int_cast< sal_uInt16 >( 571*cdf0e10cSrcweir aSize.Height()); 572*cdf0e10cSrcweir } 573*cdf0e10cSrcweir break; 574*cdf0e10cSrcweir default: 575*cdf0e10cSrcweir break; 576*cdf0e10cSrcweir } 577*cdf0e10cSrcweir 578*cdf0e10cSrcweir #ifdef DEBUG_JP 579*cdf0e10cSrcweir new GrfWindow( rGrf ); 580*cdf0e10cSrcweir #endif 581*cdf0e10cSrcweir } 582*cdf0e10cSrcweir SetSrcEncoding( eOldEnc ); 583*cdf0e10cSrcweir 584*cdf0e10cSrcweir SkipToken( -1 ); // die schliesende Klammer wird "oben" ausgewertet 585*cdf0e10cSrcweir return bValidBmp; 586*cdf0e10cSrcweir } 587*cdf0e10cSrcweir 588*cdf0e10cSrcweir /* vi:set tabstop=4 shiftwidth=4 expandtab: */ 589