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 #ifndef INCLUDED_sal_textenc_convertsinglebytetobmpunicode_hxx 25*b1cdbd2cSJim Jagielski #define INCLUDED_sal_textenc_convertsinglebytetobmpunicode_hxx 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "tenchelp.h" 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski #include "sal/types.h" 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include <cstddef> 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski /// @HTML 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski namespace rtl { namespace textenc { 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski /** 38*b1cdbd2cSJim Jagielski Maps a range of BMP Unicode code points to individual bytes. 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski @see rtl::textenc::BmpUnicodeToSingleByteConverterData 41*b1cdbd2cSJim Jagielski */ 42*b1cdbd2cSJim Jagielski struct BmpUnicodeToSingleByteRange { 43*b1cdbd2cSJim Jagielski /** 44*b1cdbd2cSJim Jagielski The start of the range of BMP Unicode code points. 45*b1cdbd2cSJim Jagielski */ 46*b1cdbd2cSJim Jagielski sal_Unicode unicode; 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski /** 49*b1cdbd2cSJim Jagielski The extend of the range of BMP Unicode code points. 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski <p>The range covers <code>unicode</code> to <code>unicode + range</code>, 52*b1cdbd2cSJim Jagielski inclusive. It is an error if <code>unicode + range</code> is greater 53*b1cdbd2cSJim Jagielski than <code>0xFFFF</code>.</p> 54*b1cdbd2cSJim Jagielski */ 55*b1cdbd2cSJim Jagielski sal_uInt8 range; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski /** 58*b1cdbd2cSJim Jagielski The start of the corresponding range of individual bytes. 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski <p>It is an error if <code>byte + range</code> is greater than 61*b1cdbd2cSJim Jagielski <code>0xFF</code>.</p> 62*b1cdbd2cSJim Jagielski */ 63*b1cdbd2cSJim Jagielski sal_uInt8 byte; 64*b1cdbd2cSJim Jagielski }; 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski /** 67*b1cdbd2cSJim Jagielski Data to convert between BMP Unicode and a single-byte character set. 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski <p>Only supports conversions where each legal unit from the single-byte 70*b1cdbd2cSJim Jagielski character set has one or more mappings to individual BMP Unicode code points 71*b1cdbd2cSJim Jagielski that are neither noncharacters nor surrogates.</p> 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski @see rtl_textenc_convertSingleByteToBmpUnicode 74*b1cdbd2cSJim Jagielski @see rtl_textenc_convertBmpUnicodeToSingleByte 75*b1cdbd2cSJim Jagielski */ 76*b1cdbd2cSJim Jagielski struct BmpUnicodeToSingleByteConverterData { 77*b1cdbd2cSJim Jagielski /** 78*b1cdbd2cSJim Jagielski Mapping from the single-byte character set to BMP Unicode code points. 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski <p>Illegal units from the single-byte character set are mapped to 81*b1cdbd2cSJim Jagielski <code>0xFFFF</code>.</p> 82*b1cdbd2cSJim Jagielski */ 83*b1cdbd2cSJim Jagielski sal_Unicode byteToUnicode[256]; 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski /** 86*b1cdbd2cSJim Jagielski The number of Unicode-to-byte conversion ranges. 87*b1cdbd2cSJim Jagielski */ 88*b1cdbd2cSJim Jagielski std::size_t unicodeToByteEntries; 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski /** 91*b1cdbd2cSJim Jagielski The array of Unicode-to-byte conversion ranges, sorted by increasing 92*b1cdbd2cSJim Jagielski <code>unicode</code> values. 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski <p>The ranges may not overlap.</p> 95*b1cdbd2cSJim Jagielski */ 96*b1cdbd2cSJim Jagielski BmpUnicodeToSingleByteRange const * unicodeToByte; 97*b1cdbd2cSJim Jagielski }; 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski } } 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski /** 102*b1cdbd2cSJim Jagielski Function to convert from a single-byte character set to BMP Unicode. 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski @see ImplConvertToUnicodeProc 105*b1cdbd2cSJim Jagielski */ 106*b1cdbd2cSJim Jagielski extern "C" sal_Size rtl_textenc_convertSingleByteToBmpUnicode( 107*b1cdbd2cSJim Jagielski ImplTextConverterData const * data, void * context, sal_Char const * srcBuf, 108*b1cdbd2cSJim Jagielski sal_Size srcBytes, sal_Unicode * destBuf, sal_Size destChars, 109*b1cdbd2cSJim Jagielski sal_uInt32 flags, sal_uInt32 * info, sal_Size * srcCvtBytes); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski /** 112*b1cdbd2cSJim Jagielski Function to convert from BMP Unicode to a single-byte character set. 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski @see ImplConvertToTextProc 115*b1cdbd2cSJim Jagielski */ 116*b1cdbd2cSJim Jagielski extern "C" sal_Size rtl_textenc_convertBmpUnicodeToSingleByte( 117*b1cdbd2cSJim Jagielski ImplTextConverterData const * data, void * context, 118*b1cdbd2cSJim Jagielski sal_Unicode const * srcBuf, sal_Size srcChars, sal_Char * destBuf, 119*b1cdbd2cSJim Jagielski sal_Size destBytes, sal_uInt32 flags, sal_uInt32 * info, 120*b1cdbd2cSJim Jagielski sal_Size * srcCvtChars); 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski #endif 123