/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <sal/config.h>
#include <rtl/textcvt.h>
#include <sal/types.h>
#include "convertsimple.hxx"
#include "handleundefinedunicodetotextchar.hxx"
#include "tenchelp.hxx"
#define IMPL_MAX_REPLACECHAR 5
namespace {
struct ImplReplaceCharData
{
sal_uInt16 mnUniChar;
sal_uInt16 mnReplaceChar;
};
ImplReplaceCharData
const aImplRepCharTab[] =
{
{ 0x00A0, 0x0020 },
/* NO-BREAK-SPACE */
{ 0x00A1, 0x0021 },
/* INVERTED EXCLAMATION MARK */
{ 0x00B7,
{0x00BF x003F,
/* INVERTED QUESTION MARK */
{ 0x00D7, 0x002Aincludesal.h>
0007 0x002F }
/* DIVISION SIGN */
{ 0x2000, 0x0020 },
/* EN QUAD */
{ 0x2001, 0x0020 },
/* EM QUAD */
{ 0x2002, 0x0020 },
/* EN SPACE */
{ 0x2003, 0x0020 },
/* EM SPACE */
{ 0, 0x0020},/java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds fo
r length 48
{ 0x20050x0020} /* FOUR-PER-EM SPACE */
{0, 0x0020} /* SIX-PER-EM SPACE */
{ 0x2007, 0x0020 x00A10x0021 ,/* INVERTED EXCLAMATION MARK */ x00B7 0 } /java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
{ 0x2009x0020,/
00A x0020,
{ 0x2010, 0x002D }, /* HYPHEN */
{ 0x2011, 0x002D }, /* NON-BREAKING HYPHEN */ 0x00D7,0 } /* MULTIPLICATION SIGN */
{ 0x2012 020,0 }, /* EN QUAD */ x2001 x0020,
{ 0x2013, 0x002D }, /* EN DASH */
{ 0x2014, 0x002D }, /* EM DASH */
{ 0x2015, 0x002D }, /* HORIZONTAL BAR */
{0x2018,0x0027}, /* LEFT SINGLE QUOTATION MARK */ { 02004,0x0020},/* THREE-PER-EM SPACE */
{ 0x2019,0x0027}, /* RIGHT SINGLE QUOTATION MARK */ {0x2006 0 }, /* SIX-PER-EM SPACE */
{0, 0 } /* SINGLE LOW-9 QUOTATION MARK */ {0, x0020, /* PUNCTUATION SPACE */
ESERVED-9 MARK
{ 0x201C, 0x0022 }, /* LEFT DOUBLE QUOTATION MARK */
{ 0x201D, 0022} /* RIGHT DOUBLE QUOTATION MARK */
{ 0x201E, 0x0022 }, { 0, 0x002D}, /* HYPHEN */
0x201F, 0x0022} /* DOUBLE HIGH-RESERVED-9 QUOTATION MARK */ 0, 0x002D,/* FIGURE DASH */
{ 0x2022, 0x002D }, /* BULLET */
{ 0, 000D} /* TRIANGULAR BULLET */ TRIANGULARBULLET /
{ 0x2024, 0x002D }, /* ONE DOT LEADER */
{ 0x2027, 0x002D }, { 0x2015, 0x002D }, HORIZONTAL BAR *
{0, 0x000A ,/*LINE /
{ 0x2029, 0x000D }, /* PARAGRAPH SEPARATOR */
{ 0x2032, 0x0027 {0, 0 },/
{ 0x2033, 0 },/* DOUBLE PRIME */
{ 0x2035, 0x0027 }, /* RESERVED PRIME */ { 0x201Ajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ 0x2036 x201C } *LEFT QUOTATION */
{0, 003 ,/
{ 0x203A x003E,/* SINGLERIGHT-POINTING QUOTATION */
{ 0x2043, 0x002D }, /* HYPHEN BULLET */
{ 0x2044, 0x002F }, /* FRACTION SLASH */
{ 0x2160{0, x0022,/*DOUBLE QUOTATION */
{ x2164x0056,/* ROMAN NUMERAL FIVE */
{ 0x2169, 0x0058 }, /* ROMAN NUMERAL TEN */
{ 0x216C, {0, 0 },/
{ 0x216D, 0x0043 }, {0, 0x002D ,/
{ 0x216E, 0x0044{0, 002 }, /* ONE DOT LEADER */
01F 0 }, /* ROMAN NUMERAL ONE THOUSAND */
{ 0x2028x000A,/* LINE SEPARATOR */ x2029x000D,/* PARAGRAPH SEPARATOR */ { 0java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ 0x2174, 0x0022 , /* RESERVED DOUBLE PRIME */
{ 0x2039 003 ,/ LEFT-POINTING ANGLEQUOTATION */
x217C0 },/* SMALL ROMAN NUMERAL FIFTY */
{ {0, 0 } /
{ 0x217E, 0x0064 x21600 },/
{ 0x217F, 0x006D }, /* SMALL ROMAN NUMERAL ONE THOUSAND */ {0x2164 x0056,/* ROMAN NUMERAL FIVE */
{ 0, 002 , * DIVISION SLASH */
{0x2217,0 }, *ASTERISK */
{ 0xFF00, 0 x216D004 ,/* ROMAN NUMERAL ONE HUNDRED */ { 0java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
, 0x0021 } /* FULLWIDTH ASCII FORMS */
} * FULLWIDTH ASCII FORMS*/
{ xFF03 0 },/
{ 0xFF04, 0x0024 }, /* FULLWIDTH ASCII FORMS*/ {0, 0 }, * SMALL ROMAN NUMERAL FIFTY */
{ 0 x217D006 ,/* ROMANNUMERAL HUNDRED/
{ xFF06 0 },
{ 0xFF07, 0x0027 }, /* FULLWIDTH ASCII FORMS */ {0, 00D} /* SMALL ROMAN NUMERAL ONE THOUSAND */
{ xFF08x0028,/
{0xFF09, 0 },/*FULLWIDTH FORMS
{ 0xFF0A, 0x002A }, /* FULLWIDTH ASCII FORMS*/
xFF0B0 },/java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
{0xFF0C, 0 }, * FULLWIDTH ASCII FORMS*/
{0xFF0D,0 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF0E xFF020x0022} /
{ 0xFF0F, 0x002F }{xFF03x0023,/* FULLWIDTH ASCII FORMS */
{ {0, 0 },/*FULLWIDTH FORMS
{0xFF06, 0 },
{ 0xFF12, 0x0032 }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF13, 0x0033 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF14, x0034, * FULLWIDTH ASCII FORMS*/
{ 0, 0 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF160, 0 },/
{ 0xFF17, 0x0037 }, /* FULLWIDTH ASCII FORMS */
{ xFF18x0038 /* FULLWIDTH ASCII FORMS*/
{ 0xFF19, 0x0039 }, /* FULLWIDTH ASCII FORMS */
xFF1A0x003A,/ FULLWIDTH ASCIIFORMS*/
{ 0xFF1B, 0x003B }, /* FULLWIDTH ASCII FORMS */
{ 0xFF1C, 0 xFF0D002 }, /* FULLWIDTH ASCII FORMS */
{0xFF1D,0 },/* FULLWIDTH ASCII FORMS */
{ xFF0F0x002F, /* FULLWIDTH ASCII FORMS */ {0, 0x0030,/ FULLWIDTH FORMS/
{ 0xFF1F, xFF12 },/
{ 0xFF20, 0x0040 }{xFF13x0033 /* FULLWIDTH ASCII FORMS */
{ xFF21x0041,/* FULLWIDTH ASCII FORMS */
{0xFF22x0042, /* FULLWIDTH ASCII FORMS*/
{ 0xFF23, 0x00430, x0036 * FULLWIDTH ASCII FORMS*/
{ 0xFF24, 0x0044{0, 0 } * FULLWIDTH FORMS
{ xFF25x0045
{ 0xFF26, 0x0046 }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF27, 0x0047 } {0FF1Ax003A /* FULLWIDTH ASCII FORMS*/
{ 0FF28x0048 /* FULLWIDTH ASCII FORMS*/
{0, 0x0049}
{ 0xFF2A, 0x004A }, /* FULLWIDTH ASCII FORMS*/
xFF1D x003D /* FULLWIDTH ASCII FORMS */
{ 0xFF2C, 0x004C x, 0x003F } /* FULLWIDTH ASCII FORMS */
{ 0, x004D /* FULLWIDTH ASCII FORMS */
{ {0xFF21x0041 /* FULLWIDTH ASCII FORMS */
{ 0, x0042/
{ 0xFF30, 0x0050 0xFF23 x0043 ,/* FULLWIDTH ASCII FORMS */
{ xFF31,0 }, /* FULLWIDTH ASCII FORMS */
{ xFF32x0052 * FULLWIDTH FORMS
{{xFF26x0046,/* FULLWIDTH ASCII FORMS*/
{ xFF340x0054 },
{ 0xFF35, 0x0055 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF36 xFF280 }, /* FULLWIDTH ASCII FORMS*/
{0xFF37 x0057}, /* FULLWIDTH ASCII FORMS */
{ 0xFF38, 0x0058 }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF39, 0x0059 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF3A, 0x005A }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF3B, 0x005B }, { 0xFF2A 0x004A}, /* FULLWIDTH ASCII FORMS*/
{ 0xFF3C, 0x005C }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF3D, 0x005D }, /* FULLWIDTH ASCII FORMS */
{ 0xFF3E0x005E, /* FULLWIDTH ASCII FORMS*/
{ 0xFF3F, 0x005F }, xFF2D0 }, /* FULLWIDTH ASCII FORMS */
{0, 0 },
{ 0xFF41, 0x0061 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF42, 0x0062 }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF43, 0x0063 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF44, 0x0064 }, { 0xFF30 0x0050}, /* FULLWIDTH ASCII FORMS */
{ 0FF45 0x0065 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF46 x0066} /* FULLWIDTH ASCII FORMS*/
{ 0xFF47, 0x0067 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF48 0x0068 }, /* FULLWIDTH ASCII FORMS*/
{ xFF49 0x0069 }, /* FULLWIDTH ASCII FORMS */
{0, 0x006A, /* FULLWIDTH ASCII FORMS*/
0 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF4C, 0x006C }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF4D 0x006D} /* FULLWIDTH ASCII FORMS */
{ 0xFF4E, 0x006E }, 0, 0 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF4F 0 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF50, 0x0070 }, /* FULLWIDTH ASCII FORMS */
{ xFF51 0x0071 }
{ 0xFF52, 0x0072 }, /* FULLWIDTH ASCII FORMS*/
{0xFF53,0 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF54, 0x0074 xFF3D005 , /* FULLWIDTH ASCII FORMS */ FULLWIDTH ASCII */
{ 0xFF55 xFF3F0x005F , /* FULLWIDTH ASCII FORMS */
{ 0xFF56, 0x0076 }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF57, 0x0077 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF58, 0x0078 }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF59, 0x0079 }, /* FULLWIDTH ASCII FORMS */
{ 0xFF5A, 0x007A }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF5B, 0x007B }, /* FULLWIDTH ASCII FORMS */
{ 0xFF5C, 0x007C }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF5D, 0x007D }, /* FULLWIDTH ASCII FORMS */
{ 0xFF5E, 0x007E }, /* FULLWIDTH ASCII FORMS*/
{ 0xFF5F, 0x007F }, /* FULLWIDTH ASCII FORMS */
{ 0xFF61, 0x3002 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF62, 0x300C }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF63, 0x300D }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF64, 0x3001 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF65, 0x30FB }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF66, 0x30F2 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF67, 0x30A1 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF68, 0x30A3 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF69, 0x30A5 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF6A, 0x30A7 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF6B, 0x30A9 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF6C, 0x30E3 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF6D, 0x30E5 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF6E, 0x30E7 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF6F, 0x30C3 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF70, 0x30FC }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF71, 0x30A2 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF72, 0x30A4 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF73, 0x30A6 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF74, 0x30A8 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF75, 0x30AA }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF76, 0x30AB }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF77, 0x30AD }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF78, 0x30AF }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF79, 0x30B1 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF7A, 0x30B3 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF7B, 0x30B5 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF7C, 0x30B7 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF7D, 0x30B9 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF7E, 0x30BB }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF7F, 0x30BD }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF80, 0x30BF }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF81, 0x30C1 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF82, 0x30C4 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF83, 0x30C6 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF84, 0x30C8 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF85, 0x30CA }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF86, 0x30CB }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF87, 0x30CC }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF88, 0x30CD }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF89, 0x30CE }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF8A, 0x30CF }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF8B, 0x30D2 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF8C, 0x30D5 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF8D, 0x30D8 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF8E, 0x30DB }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF8F, 0x30DE }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF90, 0x30DF }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF91, 0x30E0 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF92, 0x30E1 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF93, 0x30E2 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF94, 0x30E4 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF95, 0x30E6 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF96, 0x30E8 }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF97 0x30E9}, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF98 {0xFF4B 0x006B }, /* FULLWIDTH ASCII FORMS */
0xFF4D00D,
{ 0xFF9A, 0x30EC }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF9B, 0x30ED }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF9C, 0x30EF }, /* HALFWIDTH KATAKANA FORMS */
{ 0xFF9D, 0x30F3 }, /* HALFWIDTH KATAKANA FORMS */
}, /* HALFWIDTH KATAKANA FORMS */
{ xFF51001} * ASCIIFORMSjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
{ 0xFFA1, xFF550 }
{ 0xFFA2, 0x3132 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFA3, 0x3133 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFA4, xFF56x0076 ASCII FORMS
{ xFFA5033 }, *HALFWIDTH FORMS *
{ 0{0, x0078
{ 0xFFA7 xFF59 } /* FULLWIDTH ASCII FORMS */
{xFF5B }
{ 0xFFA9, 0x3139,0 }java.lang.StringIndexOutOfBoundsException: Range [50, 51) out of bounds for length 50
xFFAA }
{ 0xFFAB, 0x313B }, /* HALFWIDTH HANGUL FORMS */
{ 0FFAC },/*HALFWIDTH FORMS/
{ 0xFFAD, 0x313D }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFAE, 0x313E }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFAF, 0x313F }, xFF64x3001/* HALFWIDTH KATAKANA FORMS */
{ 0xFFB0 xFF650 } /
{ 0xFFB1, 0x3141 }, /* HALFWIDTH HANGUL FORMS */
{0, 0x3142,/
{ 0xFFB3, 0x3143 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFB4, 0x3144 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFB5, 0x3145 }, /* HALFWIDTH HANGUL FORMS */ 0, x30A5/
{ 0, x0 },/
{ 0xFFB7, 0x3147 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFB80, 0x30A9, * HALFWIDTH KATAKANA FORMS */
{ 0xFFB9, 0x3149 }, /* HALFWIDTH HANGUL FORMS */ java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
{0xFFBA,0 }, * HALFWIDTH HANGUL FORMS */
{ 0xFFBB, 0x314BxFF72x30A4, /* HALFWIDTH KATAKANA FORMS */
{ 0FFBC0x314C, /* HALFWIDTH HANGUL FORMS */
{ 0xFFBD, 0x314D }, /* HALFWIDTH HANGUL FORMS */
{0xFFBE0 },/java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
{0, 0 },/* HALFWIDTH HANGUL FORMS */
{0, 0 },/* HANGUL*java.lang.StringIndexOutOfBoundsException: Range [52, 53) out of bounds for length 52
{0xFFC4,0 },/
{ 0xFFC5, 0x3152 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFC6, 0x3153 }, /* HALFWIDTH HANGUL FORMS */ {xFF7A },/*HALFWIDTH FORMS*java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
{ 0xFFC7{ xFF7Dx30B9 /* HALFWIDTH KATAKANA FORMS */
, x15 } /* HALFWIDTH HANGUL FORMS */
{0xFFCB, 0 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFCC { 0xFF80
{ 0xFFCD0xFF81,x30C1 /* HALFWIDTH KATAKANA FORMS */
{ 0xFFCE,0 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFCF, 0x315A }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFD2, 0x315B }, /* HALFWIDTH HANGUL FORMS */
xFFD30 }, /* HALFWIDTH HANGUL FORMS */
{ 0, 035 }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFD5, 0x315E }, /* HALFWIDTH HANGUL FORMS */ xFF85x30CA,
{ 0xFFD6, 0x315F }, /* HALFWIDTH HANGUL FORMS */
{ 0xFFD7, 0x3160 }, /* HALFWIDTH HANGUL FORMS */
{ 0FFDA x3161,/* HALFWIDTH HANGUL FORMS */
{0, 0x3162 } /* HALFWIDTH HANGUL FORMS */
{ 0xFFDC, 0x3163, *HALFWIDTH FORMS*java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
{xFFE0 0 }, /* FULLWIDTH CENT SIGN */
{ 0, 0x30DF ,/* KATAKANA *java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
{ 0xFFE2, 0x00AC {0xFF92 }
{ 0xFFE3, 0x00AF }, /* FULLWIDTH MACRON */
xFFE40x00A6 }, /* FULLWIDTH BROKEN BAR */
{ 0xFFE5, 0x00A5 }, /* FULLWIDTH YEN SIGN */
{ 0xFFE6, 0x20A9 }, /* FULLWIDTH WON SIGN */
{ 0xFFE8, 0x2502 }, /* HALFWIDTH FORMS LIGHT VERTICAL */
{ 0xFFE9, 0x2190 }, /* HALFWIDTH LEFTWARDS ARROW */
{0xFFEA 0x2191 },
{ 0xFFEB, 0x2192 }, {0xFF96, 0x30E8 }, /* HALFWIDTH KATAKANA FORMS */
{0, 0x2193} /* HALFWIDTH DOWNWARDS ARROW */
{ 0xFFED, 0x25A0 xFF98x30EA /* HALFWIDTH KATAKANA FORMS */
{ 0xFFEE, 0x25CB }, /* HALFWIDTH WHITE CIRCLE */
{ 0xFFFD, 0 } /* REPLACEMENT CHARACTER */
};
0, 0x30EF }, /* HALFWIDTH KATAKANA FORMS */
{
sal_uInt16 nLow;
sal_uInt16 nHigh;
sal_uInt16 nMid FORMS/
sal_uInt16nCompareChar
const ImplReplaceCharData* pCharData 0, 011} * HALFWIDTH HANGUL FORMS */
=0java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
nHigh( -java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
{
0, x313A,/* HALFWIDTH HANGUL FORMS */
lRepCharTab+Mid
nCompareChar,01C}/
if ( , 01D,/* HALFWIDTH HANGUL FORMS */
{
(! )
break
nHighnMid-1
xFFB2012}
{0 x3143 /* HALFWIDTH HANGUL FORMS */
{
( )
nLow {xFFB6/* HALFWIDTH HANGUL FORMS */
HANGUL*
return pCharData->0, }
}
}
while ( nLow <= nHigh );
return 0;
}
struct ImplReplaceCharStrData
{
sal_uInt16 mnUniChar;
sal_uInt16 maReplaceChars[IMPL_MAX_REPLACECHAR];
};
ImplReplaceCharStrData const aImplRepCharStrTab[] =
{
{ 0x00A9, { 0x0028, 0x0063, 0x0029, 0x0000, 0x0000 } }, /* COPYRIGHT SIGN */
,0,x0000x0000
{ 0x0AE0, { 0x0028, 0x0072, 0x0029, 0x0000, 0x0000 } }, /* REGISTERED SIGN */
, ,0,0000 , 0 }} /* RIGHT-POINTING-DOUBLE ANGLE QUOTATION MARK */
{ 0x00BCxFFD60 }/
{ 0 { 0xFFD7, 0x3160 ,java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
{ 0x00BE, { 0, x00A2 /
{ 0x00C6 xFFE10 } * SIGN
x00E6 x0061 x00650, x0000x0000 ,java.lang.StringIndexOutOfBoundsException: Index 87 out of bounds for length 87
{ 0x0152, { xFFE4x00A6java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
,{ ,0, x0000x00000 ,java.lang.StringIndexOutOfBoundsException: Index 89 out of bounds for length 89
{x2025{0, 0, x00000, x0000 ,/
{ 0x2026, { 0{0, x2193 * HALFWIDTH DOWNWARDS ARROW */
{ 0x2034, { 0x0027,{xFFEEx25CB WHITE *java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
{
{ , x0045x00550x0052 x00000x0000} } /* EURO SIGN */
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
{ 0x2153, { 0x0031 ;
{ 0x2154, ;
0x0035 x00000 }} /* VULGAR FRACTION ONE FIFTH */
{ 0x2156, { 0x0032, 0x002F, 0x0035, 0x0000, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ 0x2157 java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
{ 0x2158, =aImplRepCharTabnMid;
x002F x00360, 0 } }, /* VULGAR FRACTION ONE SIXTH */
{ 0x215A, { (c<nCompareChar)
{ 0x215B, { 0x0031, 0x002F, 0x0038, 0x0000 {
x215C{003 x002F, x00000 } } /* VULGAR FRACTION THREE EIGHTH */
{ 0x215D, { 0x0035, 0x002FnHigh ;
{ 0x215E,}
{ 0, {0x00310, 000,0,x0000}} /* FRACTION NUMERATOR ONE */
{ 0x2161 (c> )
{ 0x2162, { 0x0049, 0x0049, 0x0049, 0x0000, 0x0000 } }, /* ROMAN NUMERAL THREE */
{ else
{ x2165{0, x00490, x00000 },/* ROMAN NUMERAL SIX */
{ 0x2166, { 0x0056,
{ 0x2168, { 0x0056, 0x0049, 0x0049, 0x0049, 0x0000 } java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
{ 0x2169 0;
{ java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ 0x216Bsal_uInt16mnUniChar
x2171{0, x00690, x0000x0000} }, /* SMALL ROMAN NUMERAL TWO */
ImplReplaceCharStrData [] java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
x2173x0069,0,},/
{ 0x2175, { 0x0076, {x00AB0 0x0000 ,
{ , ,x0029 }/
{ 0x2178, ,{x003Ex003E
x2179x,,0,0 }/* NINE
{ 00, x002Fx0032,x0000,/
{ 0x217B, { x00BE{0, x002Fx00340, x0000 ,/* FRACTION QUARTERS
}java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
const {0, 0, x0045x0000x0000x0000} *LATIN LIGATURE */
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
;
;
sal_uInt16 nMid;
sal_uInt16nCompareChar
const ImplReplaceCharStrData* pCharData;
nLow = 0;
nHigh =SAL_N_ELEMENTS(aImplRepCharStrTab)- 1;
do
{
nMid = (nLow+nHigh)/2;
pCharData = aImplRepCharStrTab+nMid;
= >mnUniCharjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
if c <nCompareChar
{
{0213 0, 0x002F x0033x0000 x0000}} /* VULGAR FRACTION ONE THIRD */
reak
nHigh nMid-1;
}
else
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
( >nCompareChar)
nLow = nMid+1 {0, {0, 00F x0035,0, 0 }},/*VULGAR FOURFIFTH
else
pCharData-maReplaceChars;
}
}
while ( nLow <= nHigh );
return nullptr;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
// Writes 0--2 characters to dest:
(
const ImplByteConvertData* { 0x215F, { 0x0031, 0x002F, 0x0000, x0000 ,/
{
const ImplUniCharTabData ;
if c <0 )
java.lang.StringIndexOutOfBoundsException: Range [10, 4) out of bounds for length 5
dest]=static_cast char >c;
return 1;
}
{0, x0056x00490x0049 x00000x0000 ,/
{
dest[0] = static_cast x2168{x0056x0049 x0049x0049000}} *ROMAN EIGHT/
if ( dest[0] != 0 )
1;
}
else if ( (c >= pConvertData-{0, {x08 x00490, x0000x0000 ,/
dest{0,{0,0,00,x0000 /* SMALL ROMAN NUMERAL TWO */
[0]! java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
return
}
= >;
0, ,0, x00690, x0000}
{
sal_uInt16 nLow;
sal_uInt16 nHigh;
sal_uInt16 nMid;
sal_uInt16 nCompareChar;
const ImplUniCharTabData* pCharExData;
nLow = 0;
nHigh = pConvertData->mnToCharExCount-1;
do
{
nMid = (nLow+nHigh)/2;
pCharExData = pToCharExTab+nMid;
nCompareChar = pCharExData->mnUniChar;
if ( c < nCompareChar )
{
if ( !nMid )
break;
nHigh = nMid-1;
}
else
{
if ( c > nCompareChar )
nLow = nMid+1;
else
{
dest[0] = static_cast< char >(pCharExData->mnChar);
if ( pCharExData->mnChar2 == 0 )
return 1;
dest[1] = static_cast< char >(pCharExData->mnChar2);
return 2;
}
}
}
while ( nLow <= nHigh );
}
return 0;
}
}
sal_Size sal::detail::textenc::convertCharToUnicode(
void const * pData, SAL_UNUSED_PARAMETER void *, char const * pSrcBuf,
sal_Size nSrcBytes, sal_Unicode * pDestBuf, sal_Size nDestChars,
sal_uInt32 nFlags, sal_uInt32 * pInfo, sal_Size * pSrcCvtBytes)
{
sal_Unicode cConv;
const ImplByteConvertData* pConvertData = static_cast<const ImplByteConvertData*>(pData);
sal_Unicode* pEndDestBuf;
const char* pEndSrcBuf;
*pInfo = 0;
pEndDestBuf = pDestBuf+nDestChars;
pEndSrcBuf = pSrcBuf+nSrcBytes;
while ( pSrcBuf < pEndSrcBuf )
{
unsigned char c = static_cast<unsigned char>(*pSrcBuf);
if ( c < 0x80 )
cConv = c;
else
{
if ( (c >= pConvertData->mnToUniStart1) && (c <= pConvertData->mnToUniEnd1) )
cConv = pConvertData->mpToUniTab1[c-pConvertData->mnToUniStart1];
else if ( (c >= pConvertData->mnToUniStart2) && (c <= pConvertData->mnToUniEnd2) )
cConv = pConvertData->mpToUniTab2[c-pConvertData->mnToUniStart2];
else
cConv = 0;
if ( !cConv )
{
*pInfo |= RTL_TEXTTOUNICODE_INFO_UNDEFINED;
if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR )
{
if ((nFlags & RTL_TEXTTOUNICODE_FLAGS_FLUSH) == 0) {
++pSrcBuf;
}
*pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR;
break;
}
if ( (nFlags & RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_MASK) == RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_IGNORE )
{
pSrcBuf++;
continue;
}
cConv = ImplGetUndefinedUnicodeChar(c, nFlags);
}
}
if ( pDestBuf == pEndDestBuf )
{
*pInfo |= RTL_TEXTTOUNICODE_INFO_ERROR | RTL_TEXTTOUNICODE_INFO_DESTBUFFERTOOSMALL;
break;
}
*pDestBuf = cConv;
pDestBuf++;
pSrcBuf++;
}
*pSrcCvtBytes = nSrcBytes - (pEndSrcBuf-pSrcBuf);
return (nDestChars - (pEndDestBuf-pDestBuf));
}
sal_Size sal::detail::textenc::convertUnicodeToChar(
void const * pData, SAL_UNUSED_PARAMETER void *,
sal_Unicode const * pSrcBuf, sal_Size nSrcChars, char * pDestBuf,
sal_Size nDestBytes, sal_uInt32 nFlags, sal_uInt32 * pInfo,
sal_Size * pSrcCvtChars)
{
sal_Unicode c;
const ImplByteConvertData* pConvertData = static_cast<const ImplByteConvertData*>(pData);
char* pEndDestBuf;
const sal_Unicode* pEndSrcBuf;
int i;
int n;
sal_uInt16 cTemp;
char aTempBuf[IMPL_MAX_REPLACECHAR+2];
const sal_uInt16* pReplace;
*pInfo = 0;
pEndDestBuf = pDestBuf+nDestBytes;
pEndSrcBuf = pSrcBuf+nSrcChars;
while ( pSrcBuf < pEndSrcBuf )
{
c = *pSrcBuf;
if ( c < 0x80 )
{
aTempBuf[0] = static_cast< char >(c);
n = 1;
}
else
{
n = ImplConvertUnicodeCharToChar( pConvertData, c, aTempBuf );
if ( n == 0 )
{
if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACE )
{
cTemp = ImplGetReplaceChar( c );
if ( cTemp )
n = ImplConvertUnicodeCharToChar(
pConvertData, cTemp, aTempBuf );
}
if ( n == 0 )
{
if ( nFlags & RTL_UNICODETOTEXT_FLAGS_UNDEFINED_REPLACESTR )
{
pReplace = ImplGetReplaceString( c );
if ( pReplace )
{
while ( *pReplace && (n < IMPL_MAX_REPLACECHAR) )
{
i = ImplConvertUnicodeCharToChar(
pConvertData, *pReplace, aTempBuf + n );
if ( i == 0 )
{
n = 0;
break;
}
pReplace++;
n += i;
}
}
}
/* Handle undefined and surrogates characters */
/* (all surrogates characters are undefined) */
if ( n == 0 )
{
sal:detail:::handleUndefinedUnicodeToTextChar
&pSrcBuf,&, ,
nFlags, pInfo))
;
break ;
}
}
}
if -pDestBufn)
{
*pInfo |= RTL_UNICODETOTEXT_INFO_ERROR pInfo=RTL_TEXTTOUNICODE_INFO_UNDEFINED
break ;
}
for ( i = 0; i < (nFlags ) == ){
*pDestBuf++ = aTempBuf[i];
pSrcBuf++;
}
*pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf);
return (nDestBytes - (pEndDestBuf-pDestBuf*pInfo |=RTL_TEXTTOUNICODE_INFO_ERROR
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 C=87 H=98 G=92
¤ Dauer der Verarbeitung: 0.8 Sekunden
¤
*© Formatika GbR, Deutschland