mirror of
https://github.com/vim/vim.git
synced 2026-05-06 20:30:02 -04:00
af2c8e256a
And anticipate occasional multibyte line wrapping owing to: > A poorly rendered line may otherwise become wrapped when enough of > spurious U+FFFD (0xEF 0xBF 0xBD) characters claim more columns than > are available (75) and then invalidate line correspondence under test. Observe that for "vim_ex_command.vim" another workaround is chosen: the long line containing an only multibyte character near its EOL is conversely made longer by padding and moving the character to a separate _tail_ part of the wrapped line. That is, the _head_ part of the line is all ASCII characters and the wrapped _tail_ part is a mix of various characters whose total byte count is within bounds. Other unmodified tracked files of interest: java_lambda_expressions.java, java_lambda_expressions_signature.java, java_numbers.java, markdown_conceal.markdown, vim9_generic_function_example_set.vim Also, remove stray U+FFFC (0xEF 0xBF 0xBC) characters. Related to #16559 and #17704. Reference: https://github.com/vim/vim/blob/0fde6aebddef5cb0428e85040994ba45e55cba99/runtime/syntax/testdir/README.txt#L120-L123 closes: #17868 Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
60 lines
1.7 KiB
C
60 lines
1.7 KiB
C
// C string literals
|
|
|
|
// Source: https://en.cppreference.com/w/c/language/string_literal
|
|
|
|
#include <inttypes.h>
|
|
#include <locale.h>
|
|
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <uchar.h>
|
|
|
|
int main(void)
|
|
{
|
|
char s1[] = "a猫🍌"; // or "a\u732B\U0001F34C"
|
|
#if __STDC_VERSION__ >= 202311L
|
|
char8_t
|
|
#else
|
|
char
|
|
#endif
|
|
s2[] = u8"a猫🍌";
|
|
char16_t s3[] = u"a猫🍌";
|
|
char32_t s4[] = U"a猫🍌";
|
|
wchar_t s5[] = L"a猫🍌";
|
|
|
|
setlocale(LC_ALL, "en_US.utf8");
|
|
printf(" \"%s\" is a char[%zu] holding { ", s1, sizeof s1 / sizeof *s1);
|
|
for(size_t n = 0; n < sizeof s1 / sizeof *s1; ++n)
|
|
printf("0x%02X ", +(unsigned char)s1[n]);
|
|
puts("}");
|
|
printf(
|
|
#if __STDC_VERSION__ >= 202311L
|
|
"u8\"%s\" is a char8_t[%zu] holding { "
|
|
#else
|
|
"u8\"%s\" is a char[%zu] holding { "
|
|
#endif
|
|
, s2, sizeof s2 / sizeof *s2);
|
|
for(size_t n = 0; n < sizeof s2 / sizeof *s2; ++n)
|
|
#if __STDC_VERSION__ >= 202311L
|
|
printf("0x%02X ", s2[n]);
|
|
#else
|
|
printf("0x%02X ", +(unsigned char)s2[n]);
|
|
#endif
|
|
puts("}");
|
|
printf(" u\"a猫🍌\" is a char16_t[%zu] holding { ",
|
|
sizeof s3 / sizeof *s3);
|
|
for(size_t n = 0; n < sizeof s3 / sizeof *s3; ++n)
|
|
printf("0x%04" PRIXLEAST16" ", s3[n]);
|
|
puts("}");
|
|
printf(" U\"a猫🍌\" is a char32_t[%zu] holding { ",
|
|
sizeof s4 / sizeof *s4);
|
|
for(size_t n = 0; n < sizeof s4 / sizeof *s4; ++n)
|
|
printf("0x%08" PRIXLEAST32" ", s4[n]);
|
|
puts("}");
|
|
printf(" L\"%ls\" is a wchar_t[%zu] holding { ", s5, sizeof s5 / sizeof *s5);
|
|
for(size_t n = 0; n < sizeof s5 / sizeof *s5; ++n)
|
|
printf("0x%08X ", (unsigned)s5[n]);
|
|
puts("}");
|
|
}
|
|
|