xref: /aoo4110/main/svtools/source/edit/sychconv.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svtools.hxx"
26*b1cdbd2cSJim Jagielski #include <svtools/sychconv.hxx>
27*b1cdbd2cSJim Jagielski #include <vcl/outdev.hxx>
28*b1cdbd2cSJim Jagielski 
Convert(Font & rFont,UniString & rString,OutputDevice * pDev)29*b1cdbd2cSJim Jagielski sal_Bool SymCharConverter::Convert( Font& rFont, UniString& rString, OutputDevice* pDev )
30*b1cdbd2cSJim Jagielski {
31*b1cdbd2cSJim Jagielski     // hibyte 0 = exact matching
32*b1cdbd2cSJim Jagielski     //		  1 = little differences,
33*b1cdbd2cSJim Jagielski     //		  2 = the converted character does not look like the original but got the same meaning
34*b1cdbd2cSJim Jagielski     //		  3 = the destination does not match looking and meaning of the original
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski 	static sal_uInt16 __READONLY_DATA aWingdingsToStarBatsTable[ 256 - 32 ] =
37*b1cdbd2cSJim Jagielski 	{
38*b1cdbd2cSJim Jagielski 		0x0020, 0x0238, 0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0174,	0x02BA,	0x017B,	0x017C,	0x037C,	0x037C,	0x037C,	0x037C,
39*b1cdbd2cSJim Jagielski 		0x0000, 0x0000, 0x0372,	0x0272,	0x0372,	0x0000,	0x0000,	0x0374,	0x0279,	0x0000,	0x027A,	0x0000,	0x0178,	0x0278,	0x0000,	0x0137,
40*b1cdbd2cSJim Jagielski 		0x027E, 0x0000, 0x0000,	0x0000,	0x0000,	0x0000,	0x017D,	0x0000,	0x0000,	0x0000,	0x0021,	0x03AC,	0x00AD,	0x0000,	0x0000,	0x0000,
41*b1cdbd2cSJim Jagielski 		0x0000, 0x0000, 0x01C0,	0x0000,	0x0000,	0x0286,	0x0286,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
42*b1cdbd2cSJim Jagielski 		0x0000, 0x0000, 0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0022,	0x0023,	0x0024,	0x0025,
43*b1cdbd2cSJim Jagielski 		0x0026, 0x0027, 0x0028,	0x0029,	0x002A,	0x002B,	0x002C,	0x002D,	0x0133,	0x0000,	0x0000,	0x0000,	0x0000,	0x0193,	0x0194,	0x0000,
44*b1cdbd2cSJim Jagielski 		0x0067, 0x0068, 0x0069,	0x006A,	0x006B,	0x006C,	0x006D,	0x006E,	0x006F,	0x0070,	0x0071,	0x005C,	0x005D,	0x005E,	0x005F,	0x0060,
45*b1cdbd2cSJim Jagielski 		0x0061, 0x0062, 0x0063,	0x0064,	0x0065,	0x0066,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x01A5,	0x0095,
46*b1cdbd2cSJim Jagielski 		0x0000, 0x0000, 0x0000,	0x0000,	0x0000,	0x0000,	0x002E,	0x0024,	0x0125,	0x0000,	0x0000,	0x0000,	0x014B,	0x024D,	0x014E,	0x014A,
47*b1cdbd2cSJim Jagielski 		0x0000, 0x0000, 0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
48*b1cdbd2cSJim Jagielski 		0x0000, 0x0000, 0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
49*b1cdbd2cSJim Jagielski 		0x0000, 0x0000, 0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x002F,	0x0000,	0x0000,	0x0000,	0x0035,	0x0000,	0x0000,	0x0000,
50*b1cdbd2cSJim Jagielski 		0x0030, 0x0000, 0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0031,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x01B1,
51*b1cdbd2cSJim Jagielski 		0x01AF, 0x01B2, 0x01B0,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0150,	0x0032,	0x0033,	0x0034,	0x01C8
52*b1cdbd2cSJim Jagielski 	};
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski 	static sal_uInt16 __READONLY_DATA aMonotypeSortsToStarBatsTable[ 256 - 32 ]=
55*b1cdbd2cSJim Jagielski 	{
56*b1cdbd2cSJim Jagielski 		0x0020,	0x00cb,	0x00cb,	0x00cb,	0x00cb,	0x0074,	0x00ba,	0x0021,	0x00cc,	0x007b,	0x0036,	0x007d,	0x007e,	0x0037,	0x0038,	0x0038,
57*b1cdbd2cSJim Jagielski 		0x0039,	0x0038,	0x0038,	0x0039,	0x003a,	0x004f,	0x0050,	0x004f,	0x0050,	0x0051,	0x0052,	0x0053,	0x0054,	0x0086,	0x0086,	0x0086,
58*b1cdbd2cSJim Jagielski 		0x0052,	0x00cd,	0x0044,	0x0045,	0x0046,	0x0047,	0x0041,	0x0041,	0x0058,	0x0057,	0x0075,	0x0055,	0x0056,	0x0057,	0x0058,	0x0059,
59*b1cdbd2cSJim Jagielski 		0x005a,	0x004b,	0x004b,	0x0048,	0x0049,	0x004a,	0x004b,	0x004c,	0x004d,	0x004e,	0x004e,	0x004b,	0x004b,	0x00ce,	0x00ce,	0x00ce,
60*b1cdbd2cSJim Jagielski 		0x00ce,	0x00ce,	0x00ce,	0x00ce,	0x00cf,	0x00cf,	0x00cf,	0x00cf,	0x00cf,	0x00cf,	0x00b9,	0x00b9,	0x003b,	0x003c,	0x003d,	0x003e,
61*b1cdbd2cSJim Jagielski 		0x003f,	0x003e,	0x0040,	0x00c5,	0x00c4,	0x002b,	0x002c,	0x00d0,	0x00d1,	0x00d1,	0x00d1,	0x0091,	0x0092,	0x0093,	0x0094,	0x0000,
62*b1cdbd2cSJim Jagielski 		0x00d2,	0x00d3,	0x00d2,	0x00d3,	0x00d2,	0x00d3,	0x00d2,	0x00d3,	0x00d2,	0x00d3,	0x00d2,	0x00d3,	0x00d2,	0x00d3,	0x0000,	0x0000,
63*b1cdbd2cSJim Jagielski 		0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,	0x0000,
64*b1cdbd2cSJim Jagielski 		0x0000,	0x00d4,	0x00d4,	0x00d4,	0x00d6,	0x00d6,	0x00d4,	0x00d4,	0x00d5,	0x002a,	0x00d6,	0x00d7,	0x0068,	0x0069,	0x006a,	0x006b,
65*b1cdbd2cSJim Jagielski 		0x006c,	0x006d,	0x006e,	0x006f,	0x0070,	0x0071,	0x005d,	0x005e,	0x005f,	0x0060,	0x0061,	0x0062,	0x0063,	0x0064,	0x0065,	0x0066,
66*b1cdbd2cSJim Jagielski 		0x0068,	0x0069,	0x006a,	0x006b,	0x006c,	0x006d,	0x006e,	0x006f,	0x0070,	0x0071,	0x005d,	0x005e,	0x005f,	0x0060,	0x0061,	0x0062,
67*b1cdbd2cSJim Jagielski 		0x0063,	0x0064,	0x0065,	0x0066,	0x0030,	0x0031,	0x00d8,	0x00d9,	0x00da,	0x00bc,	0x00db,	0x00bc,	0x00bc,	0x00bc,	0x00bc,	0x0031,
68*b1cdbd2cSJim Jagielski 		0x0031,	0x0031,	0x002f,	0x002f,	0x002f,	0x00be,	0x00be,	0x0031,	0x0031,	0x00af,	0x00af,	0x00af,	0x00af,	0x00af,	0x00af,	0x00af,
69*b1cdbd2cSJim Jagielski 		0x0000,	0x00af,	0x0035,	0x00dc,	0x00da,	0x00dc,	0x00db,	0x00da,	0x00dc,	0x00db,	0x00dc,	0x00dc,	0x00dc,	0x00dc,	0x00af,	0x0000
70*b1cdbd2cSJim Jagielski 	};
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski 	const sal_uInt16* pTransTable = NULL;
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski 	sal_Bool bIsAvailable = ( pDev ) ? pDev->IsFontAvailable( rFont.GetName() ) : sal_False;
75*b1cdbd2cSJim Jagielski 	if ( !bIsAvailable )
76*b1cdbd2cSJim Jagielski 	{
77*b1cdbd2cSJim Jagielski 		if ( rFont.GetName().CompareToAscii( RTL_CONSTASCII_STRINGPARAM( "Wingdings" ) ) == COMPARE_EQUAL )
78*b1cdbd2cSJim Jagielski 			pTransTable = &aWingdingsToStarBatsTable[ 0 ];
79*b1cdbd2cSJim Jagielski 		else if ( rFont.GetName().CompareToAscii( RTL_CONSTASCII_STRINGPARAM( "Monotype Sorts" ) ) == COMPARE_EQUAL )
80*b1cdbd2cSJim Jagielski 			pTransTable = &aMonotypeSortsToStarBatsTable[ 0 ];
81*b1cdbd2cSJim Jagielski 	}
82*b1cdbd2cSJim Jagielski 	if ( pTransTable )
83*b1cdbd2cSJim Jagielski 	{
84*b1cdbd2cSJim Jagielski 		sal_Unicode c;
85*b1cdbd2cSJim Jagielski 		for ( sal_uInt16 i = rString.Len(); i--; )
86*b1cdbd2cSJim Jagielski 		{
87*b1cdbd2cSJim Jagielski 			c = rString.GetChar( i );
88*b1cdbd2cSJim Jagielski 			c -= 32;
89*b1cdbd2cSJim Jagielski 			c = ( ((sal_uInt16)c) >= 224 ) ? 0 : (sal_Unicode) pTransTable[ c ];
90*b1cdbd2cSJim Jagielski 			if ( !c )				// if character is out of range or not matching
91*b1cdbd2cSJim Jagielski 				c = 0xA5;			// we will default a StarBats-Bullet
92*b1cdbd2cSJim Jagielski 			rString.SetChar( i, c );
93*b1cdbd2cSJim Jagielski 		}
94*b1cdbd2cSJim Jagielski 		rFont.SetCharSet( RTL_TEXTENCODING_SYMBOL );
95*b1cdbd2cSJim Jagielski 		rFont.SetName( String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarBats" ) ) );
96*b1cdbd2cSJim Jagielski 		return sal_True;
97*b1cdbd2cSJim Jagielski 	}
98*b1cdbd2cSJim Jagielski 	else return sal_False;
99*b1cdbd2cSJim Jagielski };
100