/* -*- 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[] =
{
{
0 x00A0,
0 x0020 },
/* NO-BREAK-SPACE */
{
0 x00A1,
0 x0021 },
/* INVERTED EXCLAMATION MARK */
{
0 x00B7,
0 x0045 },
/* MIDDLE DOT */
{
0 x00BF,
0 x003F },
/* INVERTED QUESTION MARK */
{
0 x00D7,
0 x002A },
/* MULTIPLICATION SIGN */
{
0 x00F7,
0 x002F },
/* DIVISION SIGN */
{
0 x2000,
0 x0020 },
/* EN QUAD */
{
0 x2001,
0 x0020 },
/* EM QUAD */
{
0 x2002,
0 x0020 },
/* EN SPACE */
{
0 x2003,
0 x0020 },
/* EM SPACE */
{
0 x2004,
0 x0020 },
/* THREE-PER-EM SPACE */
{
0 x2005,
0 x0020 },
/* FOUR-PER-EM SPACE */
{
0 x2006,
0 x0020 },
/* SIX-PER-EM SPACE */
{
0 x2007,
0 x0020 },
/* FIGURE SPACE */
{
0 x2008,
0 x0020 },
/* PUNCTUATION SPACE */
{
0 x2009,
0 x0020 },
/* THIN SPACE */
{
0 x200A,
0 x0020 },
/* HAIR SPACE */
{
0 x2010,
0 x002D },
/* HYPHEN */
{
0 x2011,
0 x002D },
/* NON-BREAKING HYPHEN */
{
0 x2012,
0 x002D },
/* FIGURE DASH */
{
0 x2013,
0 x002D },
/* EN DASH */
{
0 x2014,
0 x002D },
/* EM DASH */
{
0 x2015,
0 x002D },
/* HORIZONTAL BAR */
{
0 x2018,
0 x0027 },
/* LEFT SINGLE QUOTATION MARK */
{
0 x2019,
0 x0027 },
/* RIGHT SINGLE QUOTATION MARK */
{
0 x201A,
0 x002C },
/* SINGLE LOW-9 QUOTATION MARK */
{
0 x201B,
0 x0027 },
/* SINGLE HIGH-RESERVED-9 QUOTATION MARK */
{
0 x201C,
0 x0022 },
/* LEFT DOUBLE QUOTATION MARK */
{
0 x201D,
0 x0022 },
/* RIGHT DOUBLE QUOTATION MARK */
{
0 x201E,
0 x0022 },
/* DOUBLE LOW-9 QUOTATION MARK */
{
0 x201F,
0 x0022 },
/* DOUBLE HIGH-RESERVED-9 QUOTATION MARK */
{
0 x2022,
0 x002D },
/* BULLET */
{
0 x2023,
0 x002D },
/* TRIANGULAR BULLET */
{
0 x2024,
0 x002D },
/* ONE DOT LEADER */
{
0 x2027,
0 x002D },
/* HYPHENATION POINT */
{
0 x2028,
0 x000A },
/* LINE SEPARATOR */
{
0 x2029,
0 x000D },
/* PARAGRAPH SEPARATOR */
{
0 x2032,
0 x0027 },
/* PRIME */
{
0 x2033,
0 x0022 },
/* DOUBLE PRIME */
{
0 x2035,
0 x0027 },
/* RESERVED PRIME */
{
0 x2036,
0 x0022 },
/* RESERVED DOUBLE PRIME */
{
0 x2039,
0 x003C },
/* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
{
0 x203A,
0 x003E },
/* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
{
0 x2043,
0 x002D },
/* HYPHEN BULLET */
{
0 x2044,
0 x002F },
/* FRACTION SLASH */
{
0 x2160,
0 x0049 },
/* ROMAN NUMERAL ONE */
{
0 x2164,
0 x0056 },
/* ROMAN NUMERAL FIVE */
{
0 x2169,
0 x0058 },
/* ROMAN NUMERAL TEN */
{
0 x216C,
0 x004C },
/* ROMAN NUMERAL FIFTY */
{
0 x216D,
0 x0043 },
/* ROMAN NUMERAL ONE HUNDRED */
{
0 x216E,
0 x0044 },
/* ROMAN NUMERAL FIVE HUNDRED */
{
0 x216F,
0 x004D },
/* ROMAN NUMERAL ONE THOUSAND */
{
0 x2170,
0 x0069 },
/* SMALL ROMAN NUMERAL ONE */
{
0 x2174,
0 x0076 },
/* SMALL ROMAN NUMERAL FIVE */
{
0 x2179,
0 x0078 },
/* SMALL ROMAN NUMERAL TEN */
{
0 x217C,
0 x006C },
/* SMALL ROMAN NUMERAL FIFTY */
{
0 x217D,
0 x0063 },
/* SMALL ROMAN NUMERAL ONE HUNDRED */
{
0 x217E,
0 x0064 },
/* SMALL ROMAN NUMERAL FIVE HUNDRED */
{
0 x217F,
0 x006D },
/* SMALL ROMAN NUMERAL ONE THOUSAND */
{
0 x2215,
0 x002F },
/* DIVISION SLASH */
{
0 x2217,
0 x002A },
/* ASTERISK OPERATOR */
{
0 xFF00,
0 x0020 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF01,
0 x0021 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF02,
0 x0022 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF03,
0 x0023 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF04,
0 x0024 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF05,
0 x0025 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF06,
0 x0026 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF07,
0 x0027 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF08,
0 x0028 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF09,
0 x0029 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF0A,
0 x002A },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF0B,
0 x002B },
/* FULLWIDTH ASCII FORMS */
{
0 xFF0C,
0 x002C },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF0D,
0 x002D },
/* FULLWIDTH ASCII FORMS */
{
0 xFF0E,
0 x002E },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF0F,
0 x002F },
/* FULLWIDTH ASCII FORMS */
{
0 xFF10,
0 x0030 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF11,
0 x0031 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF12,
0 x0032 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF13,
0 x0033 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF14,
0 x0034 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF15,
0 x0035 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF16,
0 x0036 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF17,
0 x0037 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF18,
0 x0038 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF19,
0 x0039 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF1A,
0 x003A },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF1B,
0 x003B },
/* FULLWIDTH ASCII FORMS */
{
0 xFF1C,
0 x003C },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF1D,
0 x003D },
/* FULLWIDTH ASCII FORMS */
{
0 xFF1E,
0 x003E },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF1F,
0 x003F },
/* FULLWIDTH ASCII FORMS */
{
0 xFF20,
0 x0040 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF21,
0 x0041 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF22,
0 x0042 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF23,
0 x0043 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF24,
0 x0044 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF25,
0 x0045 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF26,
0 x0046 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF27,
0 x0047 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF28,
0 x0048 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF29,
0 x0049 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF2A,
0 x004A },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF2B,
0 x004B },
/* FULLWIDTH ASCII FORMS */
{
0 xFF2C,
0 x004C },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF2D,
0 x004D },
/* FULLWIDTH ASCII FORMS */
{
0 xFF2E,
0 x004E },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF2F,
0 x004F },
/* FULLWIDTH ASCII FORMS */
{
0 xFF30,
0 x0050 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF31,
0 x0051 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF32,
0 x0052 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF33,
0 x0053 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF34,
0 x0054 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF35,
0 x0055 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF36,
0 x0056 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF37,
0 x0057 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF38,
0 x0058 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF39,
0 x0059 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF3A,
0 x005A },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF3B,
0 x005B },
/* FULLWIDTH ASCII FORMS */
{
0 xFF3C,
0 x005C },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF3D,
0 x005D },
/* FULLWIDTH ASCII FORMS */
{
0 xFF3E,
0 x005E },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF3F,
0 x005F },
/* FULLWIDTH ASCII FORMS */
{
0 xFF40,
0 x0060 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF41,
0 x0061 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF42,
0 x0062 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF43,
0 x0063 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF44,
0 x0064 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF45,
0 x0065 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF46,
0 x0066 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF47,
0 x0067 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF48,
0 x0068 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF49,
0 x0069 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF4A,
0 x006A },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF4B,
0 x006B },
/* FULLWIDTH ASCII FORMS */
{
0 xFF4C,
0 x006C },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF4D,
0 x006D },
/* FULLWIDTH ASCII FORMS */
{
0 xFF4E,
0 x006E },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF4F,
0 x006F },
/* FULLWIDTH ASCII FORMS */
{
0 xFF50,
0 x0070 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF51,
0 x0071 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF52,
0 x0072 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF53,
0 x0073 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF54,
0 x0074 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF55,
0 x0075 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF56,
0 x0076 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF57,
0 x0077 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF58,
0 x0078 },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF59,
0 x0079 },
/* FULLWIDTH ASCII FORMS */
{
0 xFF5A,
0 x007A },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF5B,
0 x007B },
/* FULLWIDTH ASCII FORMS */
{
0 xFF5C,
0 x007C },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF5D,
0 x007D },
/* FULLWIDTH ASCII FORMS */
{
0 xFF5E,
0 x007E },
/* FULLWIDTH ASCII FORMS*/
{
0 xFF5F,
0 x007F },
/* FULLWIDTH ASCII FORMS */
{
0 xFF61,
0 x3002 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF62,
0 x300C },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF63,
0 x300D },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF64,
0 x3001 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF65,
0 x30FB },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF66,
0 x30F2 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF67,
0 x30A1 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF68,
0 x30A3 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF69,
0 x30A5 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF6A,
0 x30A7 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF6B,
0 x30A9 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF6C,
0 x30E3 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF6D,
0 x30E5 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF6E,
0 x30E7 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF6F,
0 x30C3 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF70,
0 x30FC },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF71,
0 x30A2 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF72,
0 x30A4 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF73,
0 x30A6 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF74,
0 x30A8 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF75,
0 x30AA },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF76,
0 x30AB },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF77,
0 x30AD },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF78,
0 x30AF },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF79,
0 x30B1 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF7A,
0 x30B3 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF7B,
0 x30B5 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF7C,
0 x30B7 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF7D,
0 x30B9 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF7E,
0 x30BB },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF7F,
0 x30BD },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF80,
0 x30BF },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF81,
0 x30C1 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF82,
0 x30C4 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF83,
0 x30C6 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF84,
0 x30C8 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF85,
0 x30CA },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF86,
0 x30CB },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF87,
0 x30CC },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF88,
0 x30CD },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF89,
0 x30CE },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF8A,
0 x30CF },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF8B,
0 x30D2 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF8C,
0 x30D5 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF8D,
0 x30D8 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF8E,
0 x30DB },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF8F,
0 x30DE },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF90,
0 x30DF },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF91,
0 x30E0 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF92,
0 x30E1 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF93,
0 x30E2 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF94,
0 x30E4 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF95,
0 x30E6 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF96,
0 x30E8 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF97,
0 x30E9 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF98,
0 x30EA },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF99,
0 x30EB },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF9A,
0 x30EC },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF9B,
0 x30ED },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF9C,
0 x30EF },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF9D,
0 x30F3 },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF9E,
0 x309B },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFF9F,
0 x309C },
/* HALFWIDTH KATAKANA FORMS */
{
0 xFFA0,
0 x3164 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA1,
0 x3131 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA2,
0 x3132 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA3,
0 x3133 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA4,
0 x3134 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA5,
0 x3135 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA6,
0 x3136 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA7,
0 x3137 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA8,
0 x3138 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFA9,
0 x3139 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFAA,
0 x313A },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFAB,
0 x313B },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFAC,
0 x313C },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFAD,
0 x313D },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFAE,
0 x313E },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFAF,
0 x313F },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB0,
0 x3140 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB1,
0 x3141 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB2,
0 x3142 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB3,
0 x3143 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB4,
0 x3144 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB5,
0 x3145 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB6,
0 x3146 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB7,
0 x3147 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB8,
0 x3148 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFB9,
0 x3149 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFBA,
0 x314A },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFBB,
0 x314B },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFBC,
0 x314C },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFBD,
0 x314D },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFBE,
0 x314E },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFC2,
0 x314F },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFC3,
0 x3150 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFC4,
0 x3151 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFC5,
0 x3152 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFC6,
0 x3153 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFC7,
0 x3154 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFCA,
0 x3155 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFCB,
0 x3156 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFCC,
0 x3157 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFCD,
0 x3158 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFCE,
0 x3159 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFCF,
0 x315A },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFD2,
0 x315B },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFD3,
0 x315C },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFD4,
0 x315D },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFD5,
0 x315E },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFD6,
0 x315F },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFD7,
0 x3160 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFDA,
0 x3161 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFDB,
0 x3162 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFDC,
0 x3163 },
/* HALFWIDTH HANGUL FORMS */
{
0 xFFE0,
0 x00A2 },
/* FULLWIDTH CENT SIGN */
{
0 xFFE1,
0 x00A3 },
/* FULLWIDTH POUND SIGN */
{
0 xFFE2,
0 x00AC },
/* FULLWIDTH NOT SIGN */
{
0 xFFE3,
0 x00AF },
/* FULLWIDTH MACRON */
{
0 xFFE4,
0 x00A6 },
/* FULLWIDTH BROKEN BAR */
{
0 xFFE5,
0 x00A5 },
/* FULLWIDTH YEN SIGN */
{
0 xFFE6,
0 x20A9 },
/* FULLWIDTH WON SIGN */
{
0 xFFE8,
0 x2502 },
/* HALFWIDTH FORMS LIGHT VERTICAL */
{
0 xFFE9,
0 x2190 },
/* HALFWIDTH LEFTWARDS ARROW */
{
0 xFFEA,
0 x2191 },
/* HALFWIDTH UPWARDS ARROW */
{
0 xFFEB,
0 x2192 },
/* HALFWIDTH RIGHTWARDS ARROW */
{
0 xFFEC,
0 x2193 },
/* HALFWIDTH DOWNWARDS ARROW */
{
0 xFFED,
0 x25A0 },
/* HALFWIDTH BLACK SQUARE */
{
0 xFFEE,
0 x25CB },
/* HALFWIDTH WHITE CIRCLE */
{
0 xFFFD,
0 x003F }
/* REPLACEMENT CHARACTER */
};
sal_uInt16 ImplGetReplaceChar( sal_Unicode c )
{
sal_uInt16 nLow;
sal_uInt16 nHigh;
sal_uInt16 nMid;
sal_uInt16 nCompareChar;
const ImplReplaceCharData* pCharData;
nLow =
0 ;
nHigh = SAL_N_ELEMENTS( aImplRepCharTab ) -
1 ;
do
{
nMid = (nLow+nHigh)/
2 ;
pCharData = aImplRepCharTab+nMid;
nCompareChar = pCharData->mnUniChar;
if ( c < nCompareChar )
{
if ( !nMid )
break ;
nHigh = nMid-
1 ;
}
else
{
if ( c > nCompareChar )
nLow = nMid+
1 ;
else
return pCharData->mnReplaceChar;
}
}
while ( nLow <= nHigh );
return 0 ;
}
struct ImplReplaceCharStrData
{
sal_uInt16 mnUniChar;
sal_uInt16 maReplaceChars[IMPL_MAX_REPLACECHAR];
};
ImplReplaceCharStrData
const aImplRepCharStrTab[] =
{
{
0 x00A9, {
0 x0028,
0 x0063,
0 x0029,
0 x0000,
0 x0000 } },
/* COPYRIGHT SIGN */
{
0 x00AB, {
0 x003C,
0 x003C,
0 x0000,
0 x0000,
0 x0000 } },
/* LEFT-POINTING-DOUBLE ANGLE QUOTATION MARK */
{
0 x0AE0, {
0 x0028,
0 x0072,
0 x0029,
0 x0000,
0 x0000 } },
/* REGISTERED SIGN */
{
0 x00BB, {
0 x003E,
0 x003E,
0 x0000,
0 x0000,
0 x0000 } },
/* RIGHT-POINTING-DOUBLE ANGLE QUOTATION MARK */
{
0 x00BC, {
0 x0031,
0 x002F,
0 x0034,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION ONE QUARTER */
{
0 x00BD, {
0 x0031,
0 x002F,
0 x0032,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION ONE HALF */
{
0 x00BE, {
0 x0033,
0 x002F,
0 x0034,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION THREE QUARTERS */
{
0 x00C6, {
0 x0041,
0 x0045,
0 x0000,
0 x0000,
0 x0000 } },
/* LATIN CAPITAL LETTER AE */
{
0 x00E6, {
0 x0061,
0 x0065,
0 x0000,
0 x0000,
0 x0000 } },
/* LATIN SMALL LETTER AE */
{
0 x0152, {
0 x004F,
0 x0045,
0 x0000,
0 x0000,
0 x0000 } },
/* LATIN CAPITAL LIGATURE OE */
{
0 x0153, {
0 x006F,
0 x0065,
0 x0000,
0 x0000,
0 x0000 } },
/* LATIN SMALL LIGATURE OE */
{
0 x2025, {
0 x002E,
0 x002E,
0 x0000,
0 x0000,
0 x0000 } },
/* TWO DOT LEADER */
{
0 x2026, {
0 x002E,
0 x002E,
0 x002E,
0 x0000,
0 x0000 } },
/* HORIZONTAL ELLIPSES */
{
0 x2034, {
0 x0027,
0 x0027,
0 x0027,
0 x0000,
0 x0000 } },
/* TRIPLE PRIME */
{
0 x2037, {
0 x0027,
0 x0027,
0 x0027,
0 x0000,
0 x0000 } },
/* REVERSED TRIPLE PRIME */
{
0 x20AC, {
0 x0045,
0 x0055,
0 x0052,
0 x0000,
0 x0000 } },
/* EURO SIGN */
{
0 x2122, {
0 x0028,
0 x0074,
0 x006D,
0 x0029,
0 x0000 } },
/* TRADE MARK SIGN */
{
0 x2153, {
0 x0031,
0 x002F,
0 x0033,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION ONE THIRD */
{
0 x2154, {
0 x0032,
0 x002F,
0 x0033,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION TWO THIRD */
{
0 x2155, {
0 x0031,
0 x002F,
0 x0035,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION ONE FIFTH */
{
0 x2156, {
0 x0032,
0 x002F,
0 x0035,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION TWO FIFTH */
{
0 x2157, {
0 x0033,
0 x002F,
0 x0035,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION THREE FIFTH */
{
0 x2158, {
0 x0034,
0 x002F,
0 x0035,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION FOUR FIFTH */
{
0 x2159, {
0 x0031,
0 x002F,
0 x0036,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION ONE SIXTH */
{
0 x215A, {
0 x0035,
0 x002F,
0 x0036,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION FIVE SIXTH */
{
0 x215B, {
0 x0031,
0 x002F,
0 x0038,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION ONE EIGHTH */
{
0 x215C, {
0 x0033,
0 x002F,
0 x0038,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION THREE EIGHTH */
{
0 x215D, {
0 x0035,
0 x002F,
0 x0038,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION FIVE EIGHTH */
{
0 x215E, {
0 x0037,
0 x002F,
0 x0038,
0 x0000,
0 x0000 } },
/* VULGAR FRACTION SEVEN EIGHTH */
{
0 x215F, {
0 x0031,
0 x002F,
0 x0000,
0 x0000,
0 x0000 } },
/* FRACTION NUMERATOR ONE */
{
0 x2161, {
0 x0049,
0 x0049,
0 x0000,
0 x0000,
0 x0000 } },
/* ROMAN NUMERAL TWO */
{
0 x2162, {
0 x0049,
0 x0049,
0 x0049,
0 x0000,
0 x0000 } },
/* ROMAN NUMERAL THREE */
{
0 x2163, {
0 x0049,
0 x0056,
0 x0000,
0 x0000,
0 x0000 } },
/* ROMAN NUMERAL FOUR */
{
0 x2165, {
0 x0056,
0 x0049,
0 x0000,
0 x0000,
0 x0000 } },
/* ROMAN NUMERAL SIX */
{
0 x2166, {
0 x0056,
0 x0049,
0 x0049,
0 x0000,
0 x0000 } },
/* ROMAN NUMERAL SEVEN */
{
0 x2168, {
0 x0056,
0 x0049,
0 x0049,
0 x0049,
0 x0000 } },
/* ROMAN NUMERAL EIGHT */
{
0 x2169, {
0 x0049,
0 x0058,
0 x0000,
0 x0000,
0 x0000 } },
/* ROMAN NUMERAL NINE */
{
0 x216A, {
0 x0058,
0 x0049,
0 x0000,
0 x0000,
0 x0000 } },
/* ROMAN NUMERAL ELEVEN */
{
0 x216B, {
0 x0058,
0 x0049,
0 x0049,
0 x0000,
0 x0000 } },
/* ROMAN NUMERAL TWELVE */
{
0 x2171, {
0 x0069,
0 x0069,
0 x0000,
0 x0000,
0 x0000 } },
/* SMALL ROMAN NUMERAL TWO */
{
0 x2172, {
0 x0069,
0 x0069,
0 x0069,
0 x0000,
0 x0000 } },
/* SMALL ROMAN NUMERAL THREE */
{
0 x2173, {
0 x0069,
0 x0076,
0 x0000,
0 x0000,
0 x0000 } },
/* SMALL ROMAN NUMERAL FOUR */
{
0 x2175, {
0 x0076,
0 x0069,
0 x0000,
0 x0000,
0 x0000 } },
/* SMALL ROMAN NUMERAL SIX */
{
0 x2176, {
0 x0076,
0 x0069,
0 x0069,
0 x0000,
0 x0000 } },
/* SMALL ROMAN NUMERAL SEVEN */
{
0 x2178, {
0 x0076,
0 x0069,
0 x0069,
0 x0069,
0 x0000 } },
/* SMALL ROMAN NUMERAL EIGHT */
{
0 x2179, {
0 x0069,
0 x0078,
0 x0000,
0 x0000,
0 x0000 } },
/* SMALL ROMAN NUMERAL NINE */
{
0 x217A, {
0 x0078,
0 x0069,
0 x0000,
0 x0000,
0 x0000 } },
/* SMALL ROMAN NUMERAL ELEVEN */
{
0 x217B, {
0 x0058,
0 x0069,
0 x0069,
0 x0000,
0 x0000 } }
/* SMALL ROMAN NUMERAL TWELVE */
};
const sal_uInt16* ImplGetReplaceString( sal_Unicode c )
{
sal_uInt16 nLow;
sal_uInt16 nHigh;
sal_uInt16 nMid;
sal_uInt16 nCompareChar;
const ImplReplaceCharStrData* pCharData;
nLow =
0 ;
nHigh = SAL_N_ELEMENTS( aImplRepCharStrTab ) -
1 ;
do
{
nMid = (nLow+nHigh)/
2 ;
pCharData = aImplRepCharStrTab+nMid;
nCompareChar = pCharData->mnUniChar;
if ( c < nCompareChar )
{
if ( !nMid )
break ;
nHigh = nMid-
1 ;
}
else
{
if ( c > nCompareChar )
nLow = nMid+
1 ;
else
return pCharData->maReplaceChars;
}
}
while ( nLow <= nHigh );
return nullptr;
}
// Writes 0--2 characters to dest:
int ImplConvertUnicodeCharToChar(
const ImplByteConvertData* pConvertData, sal_Unicode c,
char * dest )
{
const ImplUniCharTabData* pToCharExTab;
if ( c <
0 x80 )
{
dest[
0 ] =
static_cast <
char >(c);
return 1 ;
}
if ( (c >= pConvertData->mnToCharStart1) && (c <= pConvertData->mnToCharEnd1) )
{
dest[
0 ] =
static_cast <
char >(pConvertData->mpToCharTab1[c-pConvertData->mnToCharStart1]
);
if ( dest[0 ] != 0 )
return 1 ;
}
else if ( (c >= pConvertData->mnToCharStart2) && (c <= pConvertData->mnToCharEnd2) )
{
dest[0 ] = static_cast < char >(pConvertData->mpToCharTab2[c-pConvertData->mnToCharStart2]);
if ( dest[0 ] != 0 )
return 1 ;
}
pToCharExTab = pConvertData->mpToCharExTab;
if ( pToCharExTab )
{
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 < 0 x80 )
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 < 0 x80 )
{
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 )
{
if (sal::detail::textenc::handleUndefinedUnicodeToTextChar(
&pSrcBuf, pEndSrcBuf, &pDestBuf, pEndDestBuf,
nFlags, pInfo))
continue ;
break ;
}
}
}
}
if ( pEndDestBuf - pDestBuf < n )
{
*pInfo |= RTL_UNICODETOTEXT_INFO_ERROR | RTL_UNICODETOTEXT_INFO_DESTBUFFERTOSMALL;
break ;
}
for ( i = 0 ; i < n; ++i )
*pDestBuf++ = aTempBuf[i];
pSrcBuf++;
}
*pSrcCvtChars = nSrcChars - (pEndSrcBuf-pSrcBuf);
return (nDestBytes - (pEndDestBuf-pDestBuf));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 in Prozent C=91 H=94 G=92
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet am 2026-06-06)
¤
*© Formatika GbR, Deutschland