|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
LCMapString
The LCMapString function maps one character string to another, performing a specified locale-dependent transformation. The function can also be used to generate a sort key for the input string.
int LCMapString(
LCID Locale, // locale identifier DWORD dwMapFlags, // mapping transformation type LPCTSTR lpSrcStr, // address of source string int cchSrc, // number of characters in source string LPTSTR lpDestStr, // address of destination buffer int cchDest // size of destination buffer );
Parameters
Locale
Specifies a locale identifier. The locale provides a context for the string mapping or sort key generation. An application can use the MAKELCID macro to create a locale identifier.
dwMapFlags
A set of flags that indicate the type of transformation to be used during string mapping or sort key generation. An application can specify more than one of these options on a single transformation, although some combinations are invalid. The following mapping options are defined; restrictions are noted following the table:
Option Meaning LCMAP_BYTEREV Windows NT only: Use byte reversal. For example, if you pass in 0x3450 0x4822 the result is 0x5034 0x2248. LCMAP_FULLWIDTH Map single-byte characters to double-byte characters. LCMAP_HALFWIDTH Map double-byte characters to single-byte characters. LCMAP_HIRAGANA Map double-byte Katakana characters to double-byte Hiragana characters. LCMAP_KATAKANA Map double-byte Hiragana characters to double-byte Katakana characters. LCMAP_LOWERCASE Use lowercase. LCMAP_SORTKEY Produce a normalized wide-character sort key. LCMAP_UPPERCASE Use uppercase. NORM_IGNORECASE Ignore case. NORM_IGNOREKANATYPE Do not differentiate between Hiragana and Katakana characters. Corresponding Hiragana and Katakana will compare as equal. NORM_IGNORENONSPACE Ignore nonspacing. This flag also removes Japanese accent characters. NORM_IGNORESYMBOLS Ignore symbols. NORM_IGNOREWIDTH Do not differentiate between a single-byte character and the same character as a double-byte character. SORT_STRINGSORT Treat punctuation the same as symbols.
If the LCMAP_SORTKEY flag is not specified, the LCMapString function performs string mapping. In this case the following restrictions apply:
· LCMAP_LOWERCASE and LCMAP_UPPERCASE are mutually exclusive. · LCMAP_HIRAGANA and LCMAP_KATAKANA are mutually exclusive. · LCMAP_HALFWIDTH and LCMAP_FULLWIDTH are mutually exclusive. · SORT_STRINGSORT, NORM_IGNOREKANATYPE, NORM_IGNOREWIDTH, and NORM_IGNORECASE are not valid. · LCMAP_LOWERCASE and LCMAP_UPPERCASE are not valid in combination with any of the following flags: LCMAP_HIRAGANA, LCMAP_KATAKANA, LCMAP_HALFWIDTH, and LCMAP_FULLWIDTH.
When the LCMAP_SORTKEY flag is specified, the LCMapString function generates a sort key. In this case the following restriction applies:
· All LCMAP_* options are invalid, with the sole exception of LCMAP_BYTEREV. In other words, LCMAP_SORTKEY is mutually exclusive with all other LCMAP_* flags, with the sole exception of LCMAP_BYTEREV. LCMAP_BYTEREV is valid for Windows NT only.
lpSrcStr
Pointer to a source string that the function maps or uses for sort key generation.
cchSrc
Specifies the number of bytes (ANSI version) or characters (Unicode version) in the string pointed to by the lpSrcStr parameter.
This count can include the NULL terminator, or not include it. If the NULL terminator is included in the character count, it does not greatly affect the mapping behavior. That is because NULL is considered to be unsortable, and always maps to itself. A cchSrc value of -1 specifies that the string pointed to by lpSrcStr is null-terminated. If this is the case, and LCMapString is being used in its string-mapping mode, the function calculates the string's length itself, and null-terminates the mapped string stored into *lpDestStr.
lpDestStr
Pointer to a buffer into which the function stores the mapped string or sort key.
If LCMAP_SORTKEY is specified, LCMapString stores a sort key into the buffer. The sort key is stored as an array of byte values in the following format:
[all Unicode sort weights] 0x01 [all Diacritic weights] 0x01 [all Case weights] 0x01 [all Special weights] 0x00
Note that the sort key is null-terminated. This is true regardless of the value of cchSrc. Also note that, even if some of the sort weights are absent from the sort key, due to the presence of one or more ignore flags in dwMapFlags, the 0x01 separators and the 0x00 terminator are still present.
cchDest
Specifies the size in bytes (ANSI version) or characters (Unicode version) of the buffer pointed to by lpDestStr.
If the function is being used for string mapping, the size is a character count. If space for a NULL terminator is included in cchSrc, then cchDest must also include space for a NULL terminator. If the function is being used to generate a sort key, the size is a byte count. This byte count must include space for the sort key 0x00 terminator. If cchDest is zero, the function's return value is the number of characters, or bytes if LCMAP_SORTKEY is specified, required to hold the mapped string or sort key. In this case, the buffer pointed to by lpDestStr is not used.
Return Values
If the function succeeds, and the value of cchDest is nonzero, the return value is the number of characters, or bytes if LCMAP_SORTKEY is specified, written to the buffer. This count includes room for a NULL terminator. If the function succeeds, and the value of cchDest is zero, the return value is the size of the buffer in characters, or bytes if LCMAP_SORTKEY is specified, required to receive the translated string or sort key. This size includes room for a NULL terminator.
If the function fails, the return value is 0. To get extended error information, call GetLastError. GetLastError may return one of the following error codes:
ERROR_INSUFFICIENT_BUFFER ERROR_INVALID_FLAGS ERROR_INVALID_PARAMETER
Remarks
The mapped string is null terminated if the source string is null terminated. The A version of this function maps strings to and from Unicode based on the specified LCID's default ANSI code page. If the LCMAP_HIRAGANA flag is specified to map Katakana characters to Hiragana characters, and LCMAP_FULLWIDTH is not specified, the function only maps full-width characters to Hiragana. In this case, any half-width Katakana characters are placed as-is in the output string, with no mapping to Hiragana. An application must specify LCMAP_FULLWIDTH if it wants half-width Katakana characters mapped to Hiragana.
The lpSrcStr and lpDestStr pointers must not be the same. If they are the same, the function fails, and GetLastError returns ERROR_INVALID_PARAMETER. Even if the wide-character Unicode version of this function is called, the output string is only in WCHAR or CHAR format if the string mapping mode of LCMapString is used. If the sort key generation mode is used, specified by LCMAP_SORTKEY, the output is an array of byte values. An application can compare sort keys by using a byte-by-byte comparison.
An application can call the function with the NORM_IGNORENONSPACE and NORM_IGNORESYMBOLS flags set, and all other options flags cleared, in order to simply strip characters from the input string. If this is done with an input string that is not null-terminated, it is possible for LCMapString to return an empty string and not return an error. The LCMapString function ignores the Arabic Kashida. If an application calls the function to create a sort key for a string containing an Arabic Kashida, there will be no sort key value for the Kashida.
The function treats the hyphen and apostrophe a bit differently than other punctuation symbols, so that words like coop and co-op stay together in a list. All punctuation symbols other than the hyphen and apostrophe sort before the alphanumeric characters. An application can change this behavior by setting the SORT_STRINGSORT flag. See CompareString for a more detailed discussion of this issue. When LCMapString is used to generate a sort key, by setting the LC_MAPSORTKEY flag, the sort key stored into *lpDestStr may contain an odd number of bytes. The LCMAP_BYTEREV option (Windows NT only) only reverses an even number of bytes. If both options are chosen, the last (odd-positioned) byte in the sort key is not reversed. If the terminating 0x00 byte is an odd-positioned byte, then it remains the last byte in the sort key. If the terminating 0x00 byte is an even-positioned byte, it exchanges positions with the byte that precedes it.
See Also
CompareString, FoldString, MAKELCID
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
LCMapString
Функция LCMapString отображает одну символьную строку другому, выполняя определенное место действия-зависимое преобразование. Функция может также использована, чтобы генерировать ключ сортировки для входной строки.
int LCMapString(
МЕСТО действия LCID, // место действия идентификатора DWORD dwMapFlags, // распределения преобразования набирают LPCTSTR lpSrcStr, // адрес исходной строки int cchSrc, // количество символов в исходной строке LPTSTR lpDestStr, // адресе буфера расположения размера int cchDest // буфера расположения );
Параметры
Место действия
Определяет место действия идентификатора. Место действия обеспечивает контексту для распределения строки или ключевого поколения сортировки. Приложение может использовать макро MAKELCID, чтобы создавать место действия идентификатора.
dwMapFlags
Набор флагов, которые указывают тип преобразования, которое нужно использоваться в течение распределения строки или ключевого поколения сортировки. Приложение может определить более, чем один из этих выборов в единственном преобразовании, хотя некоторые комбинации недействительны. Следующее, отображающее выборы определено; ограничения отмечены следуя за столом:
Значение Выбора LCMAP_BYTEREV Windows NT только: байтовое изменение Использования. Например, если Вы проходите в 0x3450 0x4822, результат - 0x5034 0x2248. Карта LCMAP_FULLWIDTH единственные-байтовые символы в двойные-байтовые символы. Карта LCMAP_HALFWIDTH двойные-байтовые символы в единственные-байтовые символы. Карта LCMAP_HIRAGANA двойные-байтовые символы Katakana в двойные-байтовые символы Hiragana. Карта LCMAP_KATAKANA двойные-байтовые символы Hiragana в двойные-байтовые символы Katakana. верхний регистр Использования LCMAP_LOWERCASE. LCMAP_SORTKEY Производит нормализованный широкий-символьный ключ сортировки. верхний регистр Использования LCMAP_UPPERCASE. NORM_IGNORECASE Игнорирует случай. NORM_IGNOREKANATYPE не различается между Hiragana и символами Katakana. Соответствуя Hiragana и Katakana сравнит как равный. NORM_IGNORENONSPACE Игнорирует nonspacing. Этот флаг также удаляет Японские символы акцента. NORM_IGNORESYMBOLS Игнорирует символы. NORM_IGNOREWIDTH не различается между единственным-байтовым символом и тем же символом как двойной-байтовый символ. пунктуация Рассматривать SORT_STRINGSORT такой же как и символы.
Если флаг LCMAP_SORTKEY не определен, функция LCMapString выполняет распределение строки. В этом случае, следующие ограничения прилагают:
LCMAP_LOWERCASE и LCMAP_UPPERCASE взаимно исключительные. LCMAP_HIRAGANA и LCMAP_KATAKANA взаимно исключительные. LCMAP_HALFWIDTH и LCMAP_FULLWIDTH взаимно исключительные. SORT_STRINGSORT, NORM_IGNOREKANATYPE, NORM_IGNOREWIDTH, и NORM_IGNORECASE недействительны. LCMAP_LOWERCASE и LCMAP_UPPERCASE недействительны в комбинации с любым из следующего флагов: LCMAP_HIRAGANA, LCMAP_KATAKANA, LCMAP_HALFWIDTH, и LCMAP_FULLWIDTH.
Когда флаг LCMAP_SORTKEY определен, функция LCMapString генерирует ключ сортировки. В этом случае, следующее ограничение прилагает:
Все LCMAP_* выборы недействительны, с единственным исключением LCMAP_BYTEREV. Другими словами, LCMAP_SORTKEY взаимно исключительный со всем другим LCMAP_* флаги, с единственным исключением LCMAP_BYTEREV. LCMAP_BYTEREV - в силе для Windows NT только.
lpSrcStr
Указатель в исходную строку, что функция отображает или используется для ключевого поколения сортировки.
cchSrc
Определяет количество байтов (версия ANSI) или символы (версия Уникода) в строке указанной, чтобы параметром lpSrcStr.
Этот счет может включить НЕДЕЙСТВИТЕЛЬНЫЙ терминатор, или не включать это. Если НЕДЕЙСТВИТЕЛЬНЫЙ терминатор включен на символьный счет, он существенно не влияет на отображающее поведение. Это - поскольку НЕДЕЙСТВИТЕЛЬНЫЙ считается, что будет unsortable, и всегда картами себе. Величина cchSrc -1 определяет, что строка указанная, чтобы lpSrcStr недействительный расторгнутая. Если это является причиной, и LCMapString используется в своей строке-распределении способа, функция вычисляет саму длину строки, и недействительный-завершает отображенную строку сохраненную в *lpDestStr.
lpDestStr
Указатель в буфер в который функция хранит отображенный ключ строки или сортировки.
Если LCMAP_SORTKEY определен, LCMapString хранит ключ сортировки в буфер. Клавиша сортировки загружена так как массив байта оценивает в следующем формата:
[весь вес сортировки Уникода] 0x01 [всего Диакритического веса] 0x01 [всего веса Случая] 0x01 [всего Специального веса] 0x00
Отметьте, что клавиша сортировки недействительный расторгнутая. Это - истина независимо от величины cchSrc. Также отметьтесь, что, даже если бы некоторый вес сортировки отсутствует с клавиши сортировки, из-за присутствия одного или более проигнорируйте флаги в dwMapFlags, 0x01 разделители и 0x00 терминатор - неподвижное настоящее.
cchDest
Определяет размеру в байтах (версия ANSI) или символы (версия Уникода) буфера указанных, чтобы lpDestStr.
Если функция используется для распределения строки, размер является символьным счетом. Если пространство для НЕДЕЙСТВИТЕЛЬНОГО терминатора включено в cchSrc, тогда cchDest должен также включить пространство для НЕДЕЙСТВИТЕЛЬНОГО терминатора. Если функция используется, чтобы генерировать клавишу сортировки, размер является байтовым счетом. Этот байтовый счет должен включить пространство для ключевого 0x00 терминатора сортировки. Если cchDest - нуль, функциональная обратная величина - количество символов, или байты если LCMAP_SORTKEY определен, требуется держать отображенную строку или сортировать клавишу. В этом случае, буфер указывался, чтобы lpDestStr не использован.
Обратные Величины
Если функция добивается успеха, и величина cchDest ненулевая, обратная величина - количество символов, или байты если LCMAP_SORTKEY определен, записанное в буфер. Этот счет включает место для НЕДЕЙСТВИТЕЛЬНОГО терминатора. Если функция добивается успеха, и величина cchDest является нулем, обратная величина является размером буфера в символах, или байтах если LCMAP_SORTKEY определен, требуется получать переведенную строку или сортировать клавишу. Этот размер включает место для НЕДЕЙСТВИТЕЛЬНОГО терминатора.
Если функция терпит неудачу, обратная величина - 0. Для того, чтобы расширять информацию ошибки, назовите GetLastError. GetLastError МОЖЕТ возвращать один из следующих кодов ошибки:
ERROR_INSUFFICIENT_BUFFER ERROR_INVALID_FLAGS ERROR_INVALID_PARAMETER
Замечания
Отображенная строка недействительна расторгнутая если исходная строка недействительна расторгнутая. Версия этой функции отображает строки на и из Уникода основанного на определенной LCID's по умолчанию кодовой страницы ANSI. Если флаг LCMAP_HIRAGANA определен, чтобы отображать символы Katakana в символы Hiragana, и LCMAP_FULLWIDTH не определен, функция только отображает полные-широтные символы на Hiragana. В этом случае, любые половина-широтные символы Katakana установлены как-- в выходной строке, без распределения на Hiragana. Приложение должно определить LCMAP_FULLWIDTH если оно хочется половина-широтные символы Katakana отображенные на Hiragana.
lpSrcStr И указатели lpDestStr не должны быть теми же. Если они - те же, функция терпит неудачу, и возврат GetLastError ERROR_INVALID_PARAMETER. Даже если бы широкая-символьная версия Уникода этой функции названа, выходная строка - только в WCHAR или формате СИМВОЛА если строка, отображающая режим LCMapString использована. Если режим ключевого поколения сортировки использован, определен LCMAP_SORTKEY, выход является массивом байтовых величин. Приложение может сравнить клавиши сортировки используя байт--байтовым сравнением.
Приложение может назвать функцию с NORM_IGNORENONSPACE и флаги NORM_IGNORESYMBOLS были установлены, и все другие флаги опций очищали, для того, чтобы просто удалять символы из входной строки. Если это удовлетвориться входной строкой, что не недействительный расторгнутое, возможно для LCMapString возвращать пустую строку и не возвращать ошибку. Функция LCMapString игнорирует Арабский Kashida. Если приложение называет функцию, чтобы создавать клавишу сортировки для строки, содержащей Арабский Kashida, найдется никакая ключевая величина сортировки для Kashida.
Функция обрабатывает дефис и апостроф немного иначе чем другие символы пунктуации, чтобы слово подобно курятнику и пребыванию кооператива вместе в списке. Все символы пунктуации кроме дефиса и сортировки апострофа перед текстовыми символами. Приложение может изменить это поведение устанавливая флаг SORT_STRINGSORT. Смотри CompareString для более подробной дискуссии этой передачи. Когда LCMapString использован, чтобы генерировать клавишу сортировки, устанавливая флаг LC_MAPSORTKEY, клавиша сортировки загружала в *lpDestStr может содержать нечетное количество байтов. Опция LCMAP_BYTEREV (Windows NT только), только возобновляет ровное количество байтов. Если обе опции выбраны, последний байт (нечетный спозиционированный) на клавише сортировки не возобновлен. Если завершение 0x00 байта является нечетный спозиционированным байтом, тогда оно остается последним байтом на клавише сортировки. Если завершение 0x00 байта - даже-спозиционировавшее байт, оно обменивает позиции с байтом, который предшествует это.
Смотри Также
CompareString, FoldString, MAKELCID
|
|
|
|
| |