mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 06:53:33 +00:00
Do some string library work
This commit is contained in:
parent
83d41e4588
commit
35203c0551
42 changed files with 1381 additions and 136 deletions
|
@ -65,14 +65,6 @@ wcsnlen_s:
|
|||
.leafepilogue
|
||||
.endfn wcsnlen_s,globl
|
||||
|
||||
// Returns length of NUL-terminated wchar_t string.
|
||||
//
|
||||
// @param rdi is non-null NUL-terminated wchar_t string pointer
|
||||
// @return rax is the number of chars, excluding the NUL
|
||||
// @asyncsignalsafe
|
||||
wcslen: or $-1,%rsi
|
||||
// fallthrough
|
||||
|
||||
// Returns length of NUL-terminated memory, with limit.
|
||||
//
|
||||
// @param rdi is non-null memory
|
||||
|
@ -176,6 +168,5 @@ wcssak: lea -4(%rdi),%rax
|
|||
.endfn wmemchr,globl
|
||||
.endfn rawwmemchr,globl
|
||||
.endfn wcsnlen,globl
|
||||
.endfn wcslen,globl
|
||||
.endfn wcschr,globl
|
||||
.endfn wcschrnul,globl
|
||||
|
|
27
libc/sock/htonl.c
Normal file
27
libc/sock/htonl.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/intrin/bswap.h"
|
||||
#include "libc/sock/sock.h"
|
||||
|
||||
/**
|
||||
* Converts network to host short.
|
||||
*/
|
||||
uint32_t(htonl)(uint32_t x) {
|
||||
return bswap_32(x);
|
||||
}
|
27
libc/sock/htons.c
Normal file
27
libc/sock/htons.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/intrin/bswap.h"
|
||||
#include "libc/sock/sock.h"
|
||||
|
||||
/**
|
||||
* Converts host to network short.
|
||||
*/
|
||||
uint16_t(htons)(uint16_t x) {
|
||||
return bswap_16(x);
|
||||
}
|
27
libc/sock/ntohl.c
Normal file
27
libc/sock/ntohl.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/intrin/bswap.h"
|
||||
#include "libc/sock/sock.h"
|
||||
|
||||
/**
|
||||
* Converts network to host long.
|
||||
*/
|
||||
uint32_t(ntohl)(uint32_t x) {
|
||||
return bswap_32(x);
|
||||
}
|
27
libc/sock/ntohs.c
Normal file
27
libc/sock/ntohs.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/intrin/bswap.h"
|
||||
#include "libc/sock/sock.h"
|
||||
|
||||
/**
|
||||
* Converts network to host short.
|
||||
*/
|
||||
uint16_t(ntohs)(uint16_t x) {
|
||||
return bswap_16(x);
|
||||
}
|
|
@ -18,6 +18,7 @@
|
|||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/internal.h"
|
||||
#include "libc/calls/strace.internal.h"
|
||||
#include "libc/calls/struct/fd.internal.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/sock/internal.h"
|
||||
#include "libc/sock/sock.h"
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_SOCK_SOCK_H_
|
||||
#define COSMOPOLITAN_LIBC_SOCK_SOCK_H_
|
||||
#include "libc/intrin/bswap.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
/*───────────────────────────────────────────────────────────────────────────│─╗
|
||||
|
@ -8,13 +7,19 @@ COSMOPOLITAN_C_START_
|
|||
╚────────────────────────────────────────────────────────────────────────────│*/
|
||||
|
||||
#define INET_ADDRSTRLEN 22
|
||||
#define IFHWADDRLEN 6
|
||||
|
||||
#define htons(u16) bswap_16(u16)
|
||||
#define ntohs(u16) bswap_16(u16)
|
||||
#define htonl(u32) bswap_32(u32)
|
||||
#define ntohl(u32) bswap_32(u32)
|
||||
uint16_t htons(uint16_t);
|
||||
uint16_t ntohs(uint16_t);
|
||||
uint32_t htonl(uint32_t);
|
||||
uint32_t ntohl(uint32_t);
|
||||
|
||||
#define IFHWADDRLEN 6
|
||||
#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
|
||||
#define htons(x) __builtin_bswap16(x)
|
||||
#define ntohs(x) __builtin_bswap16(x)
|
||||
#define htonl(x) __builtin_bswap32(x)
|
||||
#define ntohl(x) __builtin_bswap32(x)
|
||||
#endif
|
||||
|
||||
const char *inet_ntop(int, const void *, char *, uint32_t);
|
||||
int inet_pton(int, const char *, void *);
|
||||
|
|
|
@ -21,12 +21,13 @@
|
|||
/**
|
||||
* Copies NUL-terminated UCS-2 or UTF-16 string.
|
||||
*
|
||||
* DEST and SRC must not overlap unless DEST ≤ SRC.
|
||||
* 𝑑 and 𝑠 must not overlap unless 𝑑 ≤ 𝑠.
|
||||
*
|
||||
* @param dest is destination memory
|
||||
* @param src is a NUL-terminated 16-bit string
|
||||
* @return original dest
|
||||
* @param d is dination memory
|
||||
* @param s is a NUL-terminated 16-bit string
|
||||
* @return original d
|
||||
* @asyncsignalsafe
|
||||
*/
|
||||
char16_t *strcpy16(char16_t *dest, const char16_t *src) {
|
||||
return memcpy(dest, src, (strlen16(src) + 1) * sizeof(char16_t));
|
||||
char16_t *strcpy16(char16_t *d, const char16_t *s) {
|
||||
return memcpy(d, s, (strlen16(s) + 1) * sizeof(char16_t));
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ typedef char16_t xmm_t __attribute__((__vector_size__(16), __aligned__(16)));
|
|||
*/
|
||||
noasan size_t strlen16(const char16_t *s) {
|
||||
size_t n;
|
||||
xmm_t v, z = {0};
|
||||
xmm_t z = {0};
|
||||
unsigned m, k = (uintptr_t)s & 15;
|
||||
const xmm_t *p = (const xmm_t *)((uintptr_t)s & -16);
|
||||
if (IsAsan()) __asan_verify(s, 2);
|
||||
|
|
|
@ -50,7 +50,7 @@ static noasan axdx_t tprecode16to8_sse2(char *dst, size_t dstsize,
|
|||
* Transcodes UTF-16 to UTF-8.
|
||||
*
|
||||
* This is a low-level function intended for the core runtime. Use
|
||||
* utf16toutf8() for a much better API that uses malloc().
|
||||
* utf16to8() for a much better API that uses malloc().
|
||||
*
|
||||
* @param dst is output buffer
|
||||
* @param dstsize is bytes in dst
|
||||
|
|
|
@ -47,7 +47,7 @@ static inline noasan axdx_t tprecode8to16_sse2(char16_t *dst, size_t dstsize,
|
|||
* Transcodes UTF-8 to UTF-16.
|
||||
*
|
||||
* This is a low-level function intended for the core runtime. Use
|
||||
* utf8toutf16() for a much better API that uses malloc().
|
||||
* utf8to16() for a much better API that uses malloc().
|
||||
*
|
||||
* @param dst is output buffer
|
||||
* @param dstsize is shorts in dst
|
||||
|
|
|
@ -23,12 +23,11 @@
|
|||
*
|
||||
* 𝑑 and 𝑠 must not overlap unless 𝑑 ≤ 𝑠.
|
||||
*
|
||||
* @param 𝑑 is destination memory
|
||||
* @param 𝑠 is a NUL-terminated string
|
||||
* @return original dest
|
||||
* @param d is destination memory
|
||||
* @param s is a NUL-terminated string
|
||||
* @return original d
|
||||
* @asyncsignalsafe
|
||||
*/
|
||||
wchar_t *wcscpy(wchar_t *d, const wchar_t *s) {
|
||||
memcpy(d, s, (wcslen(s) + 1) * sizeof(wchar_t));
|
||||
return d;
|
||||
return memcpy(d, s, (wcslen(s) + 1) * sizeof(wchar_t));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
||||
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
|
@ -16,27 +16,28 @@
|
|||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/dce.h"
|
||||
#include "libc/intrin/asan.internal.h"
|
||||
#include "libc/str/str.h"
|
||||
|
||||
typedef wchar_t xmm_t __attribute__((__vector_size__(16), __aligned__(16)));
|
||||
|
||||
/**
|
||||
* Searches for substring.
|
||||
* Returns length of NUL-terminated wide string.
|
||||
*
|
||||
* @param haystack is the search area, as a NUL-terminated string
|
||||
* @param needle is the desired substring, also NUL-terminated
|
||||
* @return pointer to first substring within haystack, or NULL
|
||||
* @param s is non-null NUL-terminated wide string pointer
|
||||
* @return number of wide characters (excluding NUL)
|
||||
* @asyncsignalsafe
|
||||
* @see memmem()
|
||||
*/
|
||||
wchar_t *wcsstr(const wchar_t *haystack, const wchar_t *needle) {
|
||||
size_t i;
|
||||
for (;;) {
|
||||
for (i = 0;;) {
|
||||
if (!needle[i]) return (/*unconst*/ wchar_t *)haystack;
|
||||
if (!haystack[i]) break;
|
||||
if (needle[i] != haystack[i]) break;
|
||||
++i;
|
||||
}
|
||||
if (!*haystack++) break;
|
||||
}
|
||||
return NULL;
|
||||
noasan size_t wcslen(const wchar_t *s) {
|
||||
size_t n;
|
||||
xmm_t z = {0};
|
||||
unsigned m, k = (uintptr_t)s & 15;
|
||||
const xmm_t *p = (const xmm_t *)((uintptr_t)s & -16);
|
||||
if (IsAsan()) __asan_verify(s, 4);
|
||||
m = __builtin_ia32_pmovmskb128(*p == z) >> k << k;
|
||||
while (!m) m = __builtin_ia32_pmovmskb128(*++p == z);
|
||||
n = (const wchar_t *)p + (__builtin_ctzl(m) >> 2) - s;
|
||||
if (IsAsan()) __asan_verify(s, n);
|
||||
return n;
|
||||
}
|
||||
|
|
|
@ -30,6 +30,6 @@ int wcsncasecmp(const wchar_t *a, const wchar_t *b, size_t n) {
|
|||
size_t i = 0;
|
||||
unsigned x, y;
|
||||
if (!n-- || a == b) return 0;
|
||||
while ((x = tolower(a[i])) == (y = tolower(b[i])) && b[i] && i < n) ++i;
|
||||
while ((x = towlower(a[i])) == (y = towlower(b[i])) && b[i] && i < n) ++i;
|
||||
return x - y;
|
||||
}
|
||||
|
|
42
libc/str/wcsstr.c
Normal file
42
libc/str/wcsstr.c
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/str/str.h"
|
||||
|
||||
/**
|
||||
* Searches for substring.
|
||||
*
|
||||
* @param haystack is the search area, as a NUL-terminated string
|
||||
* @param needle is the desired substring, also NUL-terminated
|
||||
* @return pointer to first substring within haystack, or NULL
|
||||
* @asyncsignalsafe
|
||||
* @see memmem()
|
||||
*/
|
||||
wchar_t *wcsstr(const wchar_t *haystack, const wchar_t *needle) {
|
||||
size_t i;
|
||||
for (;;) {
|
||||
for (i = 0;;) {
|
||||
if (!needle[i]) return (/*unconst*/ wchar_t *)haystack;
|
||||
if (!haystack[i]) break;
|
||||
if (needle[i] != haystack[i]) break;
|
||||
++i;
|
||||
}
|
||||
if (!*haystack++) break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
|
@ -1,2 +1,2 @@
|
|||
.include "o/libc/sysv/macros.internal.inc"
|
||||
.scall bsdthread_create,0xfffffffff2168fff,globl
|
||||
.scall bsdthread_create,0xfffffffff2168fff,globl,hidden
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
.include "o/libc/sysv/macros.internal.inc"
|
||||
.scall bsdthread_register,0xfffffffff216efff,globl
|
||||
.scall bsdthread_register,0xfffffffff216efff,globl,hidden
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
.include "o/libc/sysv/macros.internal.inc"
|
||||
.scall sys_pledge,0xfff06cffffffffff,globl
|
||||
.scall sys_pledge,0xfff06cffffffffff,globl,hidden
|
||||
|
|
|
@ -371,8 +371,8 @@ scall pidfd_send_signal 0xfffffffffffff1a8 globl # ├─ linux conferences ban
|
|||
scall io_uring_setup 0xfffffffffffff1a9 globl # └─ gnu founder richard stallman publicly disgraced
|
||||
scall io_uring_enter 0xfffffffffffff1aa globl
|
||||
scall io_uring_register 0xfffffffffffff1ab globl
|
||||
#────────────────────────RHEL CLOUD────────────────────────── # ←┬─ red hat terminates community release of enterprise linux circa 2020
|
||||
scall sys_pledge 0xfff06cffffffffff globl # └─ online linux services ban the president of united states of america
|
||||
#────────────────────────RHEL CLOUD────────────────────────── # ←──────┬─ red hat terminates community release of enterprise linux circa 2020
|
||||
scall sys_pledge 0xfff06cffffffffff globl hidden # └─ online linux services ban the president of united states of america
|
||||
scall msyscall 0xfff025ffffffffff globl
|
||||
scall sys_bogus 0x5005005002500500 globl
|
||||
scall open_tree 0xfffffffffffff1ac globl
|
||||
|
@ -478,9 +478,9 @@ scall access_extended 0xfffffffff211cfff globl
|
|||
scall audit_session_join 0xfffffffff21adfff globl
|
||||
scall audit_session_port 0xfffffffff21b0fff globl
|
||||
scall audit_session_self 0xfffffffff21acfff globl
|
||||
scall bsdthread_create 0xfffffffff2168fff globl
|
||||
scall bsdthread_create 0xfffffffff2168fff globl hidden
|
||||
scall bsdthread_ctl 0xfffffffff21defff globl
|
||||
scall bsdthread_register 0xfffffffff216efff globl
|
||||
scall bsdthread_register 0xfffffffff216efff globl hidden
|
||||
scall bsdthread_terminate 0xfffffffff2169fff globl
|
||||
scall change_fdguard_np 0xfffffffff21bcfff globl
|
||||
scall chmod_extended 0xfffffffff211afff globl
|
||||
|
|
|
@ -14,12 +14,14 @@ LIBC_TESTLIB_A_CHECKS = $(LIBC_TESTLIB_A).pkg
|
|||
|
||||
LIBC_TESTLIB_A_ASSETS = \
|
||||
libc/testlib/blocktronics.txt \
|
||||
libc/testlib/viewables.txt \
|
||||
libc/testlib/hyperion.txt \
|
||||
libc/testlib/moby.txt
|
||||
|
||||
LIBC_TESTLIB_A_HDRS = \
|
||||
libc/testlib/bench.h \
|
||||
libc/testlib/blocktronics.h \
|
||||
libc/testlib/viewables.h \
|
||||
libc/testlib/ezbench.h \
|
||||
libc/testlib/fastrandomstring.h \
|
||||
libc/testlib/hyperion.h \
|
||||
|
@ -29,6 +31,7 @@ LIBC_TESTLIB_A_HDRS = \
|
|||
LIBC_TESTLIB_A_SRCS_S = \
|
||||
libc/testlib/bench.S \
|
||||
libc/testlib/blocktronics.S \
|
||||
libc/testlib/viewables.S \
|
||||
libc/testlib/combo.S \
|
||||
libc/testlib/fixture.S \
|
||||
libc/testlib/hyperion.S \
|
||||
|
@ -126,6 +129,7 @@ $(LIBC_TESTLIB_A).pkg: \
|
|||
$(foreach x,$(LIBC_TESTLIB_A_DIRECTDEPS),$($(x)_A).pkg)
|
||||
|
||||
o/$(MODE)/libc/testlib/blocktronics.o: libc/testlib/blocktronics.txt
|
||||
o/$(MODE)/libc/testlib/viewables.o: libc/testlib/viewables.txt
|
||||
o/$(MODE)/libc/testlib/hyperion.o: libc/testlib/hyperion.txt
|
||||
o/$(MODE)/libc/testlib/moby.o: libc/testlib/moby.txt
|
||||
|
||||
|
|
33
libc/testlib/viewables.S
Normal file
33
libc/testlib/viewables.S
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
|
||||
│vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/macros.internal.h"
|
||||
.rodata
|
||||
|
||||
// Nontrivial NUL-terminated string test vector.
|
||||
.underrun
|
||||
kViewables:
|
||||
0: .incbin "libc/testlib/viewables.txt"
|
||||
1: .byte 0
|
||||
.endobj kViewables,globl
|
||||
.overrun
|
||||
|
||||
.align 8
|
||||
kViewablesSize:
|
||||
.quad 1b-0b
|
||||
.endobj kViewablesSize,globl
|
12
libc/testlib/viewables.h
Normal file
12
libc/testlib/viewables.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_TESTLIB_VIEWABLES_H_
|
||||
#define COSMOPOLITAN_LIBC_TESTLIB_VIEWABLES_H_
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
extern size_t kViewablesSize;
|
||||
extern char kViewables[];
|
||||
extern uint8_t kViewablesZip[];
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_LIBC_TESTLIB_VIEWABLES_H_ */
|
924
libc/testlib/viewables.txt
Normal file
924
libc/testlib/viewables.txt
Normal file
|
@ -0,0 +1,924 @@
|
|||
VIEWABLE UNICODE CHARACTERS
|
||||
According To PragmataPro
|
||||
|
||||
Basic Latin
|
||||
═══════════════════════════════════════════════════════
|
||||
0000 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
0020 │ ! " # $ % & ' ( ) * + , - . /
|
||||
0030 │ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
|
||||
0040 │ @ A B C D E F G H I J K L M N O
|
||||
0050 │ P Q R S T U V W X Y Z [ \ ] ^ _
|
||||
0060 │ ` a b c d e f g h i j k l m n o
|
||||
0070 │ p q r s t u v w x y z { | } ~
|
||||
|
||||
Latin-1 Supplement
|
||||
═══════════════════════════════════════════════════════
|
||||
0080 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
00a0 │ ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯
|
||||
00b0 │ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
|
||||
00c0 │ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
|
||||
00d0 │ Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
|
||||
00e0 │ à á â ã ä å æ ç è é ê ë ì í î ï
|
||||
00f0 │ ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
|
||||
|
||||
Latin Extended-A
|
||||
═══════════════════════════════════════════════════════
|
||||
0100 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
0100 │ Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď
|
||||
0110 │ Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ
|
||||
0120 │ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į
|
||||
0130 │ İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ
|
||||
0140 │ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ
|
||||
0150 │ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş
|
||||
0160 │ Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů
|
||||
0170 │ Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ
|
||||
|
||||
Latin Extended-B
|
||||
═══════════════════════════════════════════════════════
|
||||
0180 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
0180 │ ƀ Ɓ Ƃ ƃ Ƅ ƅ Ɔ Ƈ ƈ Ɖ Ɗ Ƌ ƌ ƍ Ǝ Ə
|
||||
0190 │ Ɛ Ƒ ƒ Ɠ Ɣ ƕ Ɩ Ɨ Ƙ ƙ ƚ ƛ Ɯ Ɲ ƞ Ɵ
|
||||
01a0 │ Ơ ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư
|
||||
01b0 │ ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ
|
||||
01c0 │ ǀ ǁ ǂ ǃ DŽ Dž dž LJ Lj lj NJ Nj nj Ǎ ǎ Ǐ
|
||||
01d0 │ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ ǝ Ǟ ǟ
|
||||
01e0 │ Ǡ ǡ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ
|
||||
01f0 │ ǰ DZ Dz dz Ǵ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ
|
||||
0200 │ Ȁ ȁ Ȃ ȃ Ȅ ȅ Ȇ ȇ Ȉ ȉ Ȋ ȋ Ȍ ȍ Ȏ ȏ
|
||||
0210 │ Ȑ ȑ Ȓ ȓ Ȕ ȕ Ȗ ȗ Ș ș Ț ț Ȝ ȝ Ȟ ȟ
|
||||
0220 │ Ƞ ȡ Ȣ ȣ Ȥ ȥ Ȧ ȧ Ȩ ȩ Ȫ ȫ Ȭ ȭ Ȯ ȯ
|
||||
0230 │ Ȱ ȱ Ȳ ȳ ȴ ȵ ȶ ȷ ȸ ȹ Ⱥ Ȼ ȼ Ƚ Ⱦ ȿ
|
||||
0240 │ ɀ Ɂ ɂ Ƀ Ʉ Ʌ Ɇ ɇ Ɉ ɉ Ɋ ɋ Ɍ ɍ Ɏ ɏ
|
||||
|
||||
IPA Extensions
|
||||
═══════════════════════════════════════════════════════
|
||||
0250 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
0250 │ ɐ ɑ ɒ ɓ ɔ ɕ ɖ ɗ ɘ ə ɚ ɛ ɜ ɝ ɞ ɟ
|
||||
0260 │ ɠ ɡ ɢ ɣ ɤ ɥ ɦ ɧ ɨ ɩ ɪ ɫ ɬ ɭ ɮ ɯ
|
||||
0270 │ ɰ ɱ ɲ ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ
|
||||
0280 │ ʀ ʁ ʂ ʃ ʄ ʅ ʆ ʇ ʈ ʉ ʊ ʋ ʌ ʍ ʎ ʏ
|
||||
0290 │ ʐ ʑ ʒ ʓ ʔ ʕ ʖ ʗ ʘ ʙ ʚ ʛ ʜ ʝ ʞ ʟ
|
||||
02a0 │ ʠ ʡ ʢ ʣ ʤ ʥ ʦ ʧ ʨ ʩ ʪ ʫ ʬ ʭ ʮ ʯ
|
||||
|
||||
Spacing Modifier Letters
|
||||
═══════════════════════════════════════════════════════
|
||||
02b0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
02b0 │ ʰ ʱ ʲ ʳ ʴ ʵ ʶ ʷ ʸ ʹ ʺ ʻ ʼ ʽ ʾ ʿ
|
||||
02c0 │ ˀ ˁ ˂ ˃ ˄ ˅ ˆ ˇ ˈ ˉ ˊ ˋ ˌ ˍ ˎ ˏ
|
||||
02d0 │ ː ˑ ˒ ˓ ˔ ˕ ˖ ˗ ˘ ˙ ˚ ˛ ˜ ˝ ˞ ˟
|
||||
02e0 │ ˠ ˡ ˢ ˣ ˤ ˥ ˦ ˧ ˨ ˩ ˪ ˫ ˬ ˭ ˮ ˯
|
||||
02f0 │ ˰ ˱ ˲ ˳ ˴ ˵ ˶ ˷ ˸ ˹ ˺ ˻ ˼ ˽ ˾ ˿
|
||||
|
||||
Greek and Coptic
|
||||
═══════════════════════════════════════════════════════
|
||||
0370 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
0370 │ ;
|
||||
0380 │ ΄ ΅ Ά · Έ Ή Ί Ό Ύ Ώ
|
||||
0390 │ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο
|
||||
03a0 │ Π Ρ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί
|
||||
03b0 │ ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο
|
||||
03c0 │ π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ
|
||||
03d0 │ ϐ ϑ ϕ ϖ Ϝ ϝ
|
||||
03f0 │ ϰ ϱ ϴ ϵ
|
||||
|
||||
Cyrillic
|
||||
═══════════════════════════════════════════════════════
|
||||
0400 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
0400 │ Ѐ Ё Ђ Ѓ Є Ѕ І Ї Ј Љ Њ Ћ Ќ Ѝ Ў Џ
|
||||
0410 │ А Б В Г Д Е Ж З И Й К Л М Н О П
|
||||
0420 │ Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
|
||||
0430 │ а б в г д е ж з и й к л м н о п
|
||||
0440 │ р с т у ф х ц ч ш щ ъ ы ь э ю я
|
||||
0450 │ ѐ ё ђ ѓ є ѕ і ї ј љ њ ћ ќ ѝ ў џ
|
||||
0460 │ Ѡ ѡ Ѣ ѣ Ѥ ѥ
|
||||
0470 │ Ѳ ѳ
|
||||
0490 │ Ґ ґ Ҙ ҙ Қ қ
|
||||
|
||||
Runic
|
||||
═══════════════════════════════════════════════════════
|
||||
16a0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
16a0 │ ᚠ ᚡ ᚢ ᚣ ᚤ ᚥ ᚦ ᚧ ᚨ ᚩ ᚪ ᚫ ᚬ ᚭ ᚮ ᚯ
|
||||
16b0 │ ᚰ ᚱ ᚲ ᚳ ᚴ ᚵ ᚶ ᚷ ᚸ ᚹ ᚺ ᚻ ᚼ ᚽ ᚾ ᚿ
|
||||
16c0 │ ᛀ ᛁ ᛂ ᛃ ᛄ ᛅ ᛆ ᛇ ᛈ ᛉ ᛊ ᛋ ᛌ ᛍ ᛎ ᛏ
|
||||
16d0 │ ᛐ ᛑ ᛒ ᛓ ᛔ ᛕ ᛖ ᛗ ᛘ ᛙ ᛚ ᛛ ᛜ ᛝ ᛞ ᛟ
|
||||
16e0 │ ᛠ ᛡ ᛢ ᛣ ᛤ ᛥ ᛦ ᛧ ᛨ ᛩ ᛪ ᛫ ᛬ ᛭ ᛮ ᛯ
|
||||
16f0 │ ᛰ
|
||||
|
||||
Phonetic Extensions
|
||||
═══════════════════════════════════════════════════════
|
||||
1d00 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1d00 │ ᴀ ᴁ ᴂ ᴃ ᴄ ᴅ ᴆ ᴇ ᴈ ᴉ ᴊ ᴋ ᴌ ᴍ ᴎ ᴏ
|
||||
1d10 │ ᴐ ᴑ ᴒ ᴓ ᴔ ᴕ ᴖ ᴗ ᴘ ᴙ ᴚ ᴛ ᴜ ᴝ ᴞ ᴟ
|
||||
1d20 │ ᴠ ᴡ ᴢ ᴣ ᴤ ᴥ ᴦ ᴧ ᴨ ᴩ ᴪ ᴫ ᴬ ᴭ ᴮ ᴯ
|
||||
1d30 │ ᴰ ᴱ ᴲ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴻ ᴼ ᴽ ᴾ ᴿ
|
||||
1d40 │ ᵀ ᵁ ᵂ ᵃ ᵄ ᵅ ᵆ ᵇ ᵈ ᵉ ᵊ ᵋ ᵌ ᵍ ᵎ ᵏ
|
||||
1d50 │ ᵐ ᵑ ᵒ ᵓ ᵔ ᵕ ᵖ ᵗ ᵘ ᵙ ᵚ ᵛ ᵜ ᵝ ᵞ ᵟ
|
||||
1d60 │ ᵠ ᵡ ᵢ ᵣ ᵤ ᵥ ᵦ ᵧ ᵨ ᵩ ᵪ ᵫ ᵬ ᵭ ᵮ ᵯ
|
||||
1d70 │ ᵰ ᵱ ᵲ ᵳ ᵴ ᵵ ᵶ ᵷ ᵸ ᵹ ᵺ ᵻ ᵼ ᵽ ᵾ ᵿ
|
||||
|
||||
Phonetic Extensions Supplement
|
||||
═══════════════════════════════════════════════════════
|
||||
1d80 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1d90 │ ᶜ
|
||||
1da0 │ ᶠ ᶥ
|
||||
1db0 │ ᶷ ᶻ ᶿ
|
||||
|
||||
Latin Extended Additional
|
||||
═══════════════════════════════════════════════════════
|
||||
1e00 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1e00 │ Ḁ ḁ Ḃ ḃ Ḅ ḅ Ḇ ḇ Ḉ ḉ Ḋ ḋ Ḍ ḍ Ḏ ḏ
|
||||
1e10 │ Ḑ ḑ Ḓ ḓ Ḕ ḕ Ḗ ḗ Ḙ ḙ Ḛ ḛ Ḝ ḝ Ḟ ḟ
|
||||
1e20 │ Ḡ ḡ Ḣ ḣ Ḥ ḥ Ḧ ḧ Ḩ ḩ Ḫ ḫ Ḭ ḭ Ḯ ḯ
|
||||
1e30 │ Ḱ ḱ Ḳ ḳ Ḵ ḵ Ḷ ḷ Ḹ ḹ Ḻ ḻ Ḽ ḽ Ḿ ḿ
|
||||
1e40 │ Ṁ ṁ Ṃ ṃ Ṅ ṅ Ṇ ṇ Ṉ ṉ Ṋ ṋ Ṍ ṍ Ṏ ṏ
|
||||
1e50 │ Ṑ ṑ Ṓ ṓ Ṕ ṕ Ṗ ṗ Ṙ ṙ Ṛ ṛ Ṝ ṝ Ṟ ṟ
|
||||
1e60 │ Ṡ ṡ Ṣ ṣ Ṥ ṥ Ṧ ṧ Ṩ ṩ Ṫ ṫ Ṭ ṭ Ṯ ṯ
|
||||
1e70 │ Ṱ ṱ Ṳ ṳ Ṵ ṵ Ṷ ṷ Ṹ ṹ Ṻ ṻ Ṽ ṽ Ṿ ṿ
|
||||
1e80 │ Ẁ ẁ Ẃ ẃ Ẅ ẅ Ẇ ẇ Ẉ ẉ Ẋ ẋ Ẍ ẍ Ẏ ẏ
|
||||
1e90 │ Ẑ ẑ Ẓ ẓ Ẕ ẕ ẖ ẗ ẘ ẙ ẚ ẛ ẜ ẝ ẞ ẟ
|
||||
1ea0 │ Ạ ạ Ả ả Ấ ấ Ầ ầ Ẩ ẩ Ẫ ẫ Ậ ậ Ắ ắ
|
||||
1eb0 │ Ằ ằ Ẳ ẳ Ẵ ẵ Ặ ặ Ẹ ẹ Ẻ ẻ Ẽ ẽ Ế ế
|
||||
1ec0 │ Ề ề Ể ể Ễ ễ Ệ ệ Ỉ ỉ Ị ị Ọ ọ Ỏ ỏ
|
||||
1ed0 │ Ố ố Ồ ồ Ổ ổ Ỗ ỗ Ộ ộ Ớ ớ Ờ ờ Ở ở
|
||||
1ee0 │ Ỡ ỡ Ợ ợ Ụ ụ Ủ ủ Ứ ứ Ừ ừ Ử ử Ữ ữ
|
||||
1ef0 │ Ự ự Ỳ ỳ Ỵ ỵ Ỷ ỷ Ỹ ỹ Ỻ ỻ Ỽ ỽ Ỿ ỿ
|
||||
|
||||
Greek Extended
|
||||
═══════════════════════════════════════════════════════
|
||||
1f00 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1f00 │ ἀ ἁ ἂ ἃ ἄ ἅ ἆ ἇ Ἀ Ἁ Ἂ Ἃ Ἄ Ἅ Ἆ Ἇ
|
||||
1f10 │ ἐ ἑ ἒ ἓ ἔ ἕ Ἐ Ἑ Ἒ Ἓ Ἔ Ἕ
|
||||
1f20 │ ἠ ἡ ἢ ἣ ἤ ἥ ἦ ἧ Ἠ Ἡ Ἢ Ἣ Ἤ Ἥ Ἦ Ἧ
|
||||
1f30 │ ἰ ἱ ἲ ἳ ἴ ἵ ἶ ἷ Ἰ Ἱ Ἲ Ἳ Ἴ Ἵ Ἶ Ἷ
|
||||
1f40 │ ὀ ὁ ὂ ὃ ὄ ὅ Ὀ Ὁ Ὂ Ὃ Ὄ Ὅ
|
||||
1f50 │ ὐ ὑ ὒ ὓ ὔ ὕ ὖ ὗ Ὑ Ὓ Ὕ Ὗ
|
||||
1f60 │ ὠ ὡ ὢ ὣ ὤ ὥ ὦ ὧ Ὠ Ὡ Ὢ Ὣ Ὤ Ὥ Ὦ Ὧ
|
||||
1f70 │ ὰ ά ὲ έ ὴ ή ὶ ί ὸ ό ὺ ύ ὼ ώ
|
||||
1f80 │ ᾀ ᾁ ᾂ ᾃ ᾄ ᾅ ᾆ ᾇ ᾈ ᾉ ᾊ ᾋ ᾌ ᾍ ᾎ ᾏ
|
||||
1f90 │ ᾐ ᾑ ᾒ ᾓ ᾔ ᾕ ᾖ ᾗ ᾘ ᾙ ᾚ ᾛ ᾜ ᾝ ᾞ ᾟ
|
||||
1fa0 │ ᾠ ᾡ ᾢ ᾣ ᾤ ᾥ ᾦ ᾧ ᾨ ᾩ ᾪ ᾫ ᾬ ᾭ ᾮ ᾯ
|
||||
1fb0 │ ᾰ ᾱ ᾲ ᾳ ᾴ ᾶ ᾷ Ᾰ Ᾱ Ὰ Ά ᾼ
|
||||
1fc0 │ ῁ ῂ ῃ ῄ ῆ ῇ Ὲ Έ Ὴ Ή ῌ ῍ ῎ ῏
|
||||
1fd0 │ ῐ ῑ ῒ ΐ ῖ ῗ Ῐ Ῑ Ὶ Ί ῝ ῞ ῟
|
||||
1fe0 │ ῠ ῡ ῢ ΰ ῤ ῥ ῦ ῧ Ῠ Ῡ Ὺ Ύ Ῥ ῭ ΅ `
|
||||
1ff0 │ ῲ ῳ ῴ ῶ ῷ Ὸ Ό Ὼ Ώ ῼ ´
|
||||
|
||||
General Punctuation
|
||||
═══════════════════════════════════════════════════════
|
||||
2000 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2010 │ ‐ ‑ ‒ – — ― ‖ ‗ ‘ ’ ‚ ‛ “ ” „ ‟
|
||||
2020 │ † ‡ • ‣ ․ ‥ … ‧
|
||||
2030 │ ‰ ‱ ′ ″ ‴ ‵ ‶ ‷ ‸ ‹ › ※ ‼ ‽ ‾ ‿
|
||||
2040 │ ⁀ ⁁ ⁂ ⁃ ⁄ ⁅ ⁆ ⁇ ⁈ ⁉ ⁊ ⁋ ⁌ ⁍ ⁎ ⁏
|
||||
2050 │ ⁐ ⁑ ⁒ ⁓ ⁔ ⁕ ⁖ ⁗ ⁘ ⁙ ⁚ ⁛ ⁜ ⁝ ⁞
|
||||
|
||||
Superscripts and Subscripts
|
||||
═══════════════════════════════════════════════════════
|
||||
2070 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2070 │ ⁰ ⁱ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ
|
||||
2080 │ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎
|
||||
2090 │ ₐ ₑ ₒ ₓ ₔ ₕ ₖ ₗ ₘ ₙ ₚ ₛ ₜ
|
||||
|
||||
Currency Symbols
|
||||
═══════════════════════════════════════════════════════
|
||||
20a0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
20a0 │ ₣ ₤ ₩ ₪ €
|
||||
20b0 │ ₱ ₲ ₳ ₵ ₹ ₺ ₽ ₿
|
||||
|
||||
Letterlike Symbols
|
||||
═══════════════════════════════════════════════════════
|
||||
2100 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2100 │ ℀ ℁ ℂ ℃ ℄ ℅ ℆ ℇ ℈ ℉ ℊ ℋ ℌ ℍ ℎ ℏ
|
||||
2110 │ ℐ ℑ ℒ ℓ ℔ ℕ № ℗ ℘ ℙ ℚ ℛ ℜ ℝ ℞ ℟
|
||||
2120 │ ℠ ℡ ™ ℣ ℤ ℥ Ω ℧ ℨ ℩ K Å ℬ ℭ ℮ ℯ
|
||||
2130 │ ℰ ℱ Ⅎ ℳ ℴ ℵ ℶ ℷ ℸ ℹ ℺ ℻ ℼ ℽ ℾ ℿ
|
||||
2140 │ ⅀ ⅁ ⅂ ⅃ ⅄ ⅅ ⅆ ⅇ ⅈ ⅉ ⅊ ⅋ ⅌ ⅍ ⅎ ⅏
|
||||
|
||||
Number Forms
|
||||
═══════════════════════════════════════════════════════
|
||||
2150 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2150 │ ⅐ ⅑ ⅒ ⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞ ⅟
|
||||
2160 │ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ Ⅼ Ⅽ Ⅾ Ⅿ
|
||||
2170 │ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ ⅼ ⅽ ⅾ ⅿ
|
||||
2180 │ ↀ ↁ ↂ Ↄ ↄ ↅ ↆ ↇ ↈ ↉ ↊ ↋
|
||||
|
||||
Arrows
|
||||
═══════════════════════════════════════════════════════
|
||||
2190 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2190 │ ← ↑ → ↓ ↔ ↕ ↖ ↗ ↘ ↙ ↚ ↛ ↜ ↝ ↞ ↟
|
||||
21a0 │ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↩ ↪ ↫ ↬ ↭ ↮ ↯
|
||||
21b0 │ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ↼ ↽ ↾ ↿
|
||||
21c0 │ ⇀ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇋ ⇌ ⇍ ⇎ ⇏
|
||||
21d0 │ ⇐ ⇑ ⇒ ⇓ ⇔ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟
|
||||
21e0 │ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪ ⇫ ⇬ ⇭ ⇮ ⇯
|
||||
21f0 │ ⇰ ⇱ ⇲ ⇳ ⇴ ⇵ ⇶ ⇷ ⇸ ⇹ ⇺ ⇻ ⇼ ⇽ ⇾ ⇿
|
||||
|
||||
Mathematical Operators
|
||||
═══════════════════════════════════════════════════════
|
||||
2200 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2200 │ ∀ ∁ ∂ ∃ ∄ ∅ ∆ ∇ ∈ ∉ ∊ ∋ ∌ ∍ ∎ ∏
|
||||
2210 │ ∐ ∑ − ∓ ∔ ∕ ∖ ∗ ∘ ∙ √ ∛ ∜ ∝ ∞ ∟
|
||||
2220 │ ∠ ∡ ∢ ∣ ∤ ∥ ∦ ∧ ∨ ∩ ∪ ∫ ∬ ∭ ∮ ∯
|
||||
2230 │ ∰ ∱ ∲ ∳ ∴ ∵ ∶ ∷ ∸ ∹ ∺ ∻ ∼ ∽ ∾ ∿
|
||||
2240 │ ≀ ≁ ≂ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≏
|
||||
2250 │ ≐ ≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟
|
||||
2260 │ ≠ ≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯
|
||||
2270 │ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿
|
||||
2280 │ ⊀ ⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊊ ⊋ ⊌ ⊍ ⊎ ⊏
|
||||
2290 │ ⊐ ⊑ ⊒ ⊓ ⊔ ⊕ ⊖ ⊗ ⊘ ⊙ ⊚ ⊛ ⊜ ⊝ ⊞ ⊟
|
||||
22a0 │ ⊠ ⊡ ⊢ ⊣ ⊤ ⊥ ⊦ ⊧ ⊨ ⊩ ⊪ ⊫ ⊬ ⊭ ⊮ ⊯
|
||||
22b0 │ ⊰ ⊱ ⊲ ⊳ ⊴ ⊵ ⊶ ⊷ ⊸ ⊹ ⊺ ⊻ ⊼ ⊽ ⊾ ⊿
|
||||
22c0 │ ⋀ ⋁ ⋂ ⋃ ⋄ ⋅ ⋆ ⋇ ⋈ ⋉ ⋊ ⋋ ⋌ ⋍ ⋎ ⋏
|
||||
22d0 │ ⋐ ⋑ ⋒ ⋓ ⋔ ⋕ ⋖ ⋗ ⋘ ⋙ ⋚ ⋛ ⋜ ⋝ ⋞ ⋟
|
||||
22e0 │ ⋠ ⋡ ⋢ ⋣ ⋤ ⋥ ⋦ ⋧ ⋨ ⋩ ⋪ ⋫ ⋬ ⋭ ⋮ ⋯
|
||||
22f0 │ ⋰ ⋱ ⋲ ⋳ ⋴ ⋵ ⋶ ⋷ ⋸ ⋹ ⋺ ⋻ ⋼ ⋽ ⋾ ⋿
|
||||
|
||||
Miscellaneous Technical
|
||||
═══════════════════════════════════════════════════════
|
||||
2300 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2300 │ ⌀ ⌁ ⌂ ⌃ ⌄ ⌅ ⌆ ⌇ ⌈ ⌉ ⌊ ⌋ ⌌ ⌍ ⌎ ⌏
|
||||
2310 │ ⌐ ⌑ ⌒ ⌓ ⌔ ⌕ ⌖ ⌗ ⌘ ⌙ ⌚ ⌛ ⌜ ⌝ ⌞ ⌟
|
||||
2320 │ ⌠ ⌡ ⌢ ⌣ ⌤ ⌥ ⌦ ⌧ ⌨ 〈 〉 ⌫ ⌬
|
||||
2330 │ ⌴ ⌶ ⌷ ⌸ ⌹ ⌺ ⌻ ⌼ ⌽ ⌾ ⌿
|
||||
2340 │ ⍀ ⍁ ⍂ ⍃ ⍄ ⍅ ⍆ ⍇ ⍈ ⍉ ⍊ ⍋ ⍌ ⍍ ⍎ ⍏
|
||||
2350 │ ⍐ ⍑ ⍒ ⍓ ⍔ ⍕ ⍖ ⍗ ⍘ ⍙ ⍚ ⍛ ⍜ ⍝ ⍞ ⍟
|
||||
2360 │ ⍠ ⍡ ⍢ ⍣ ⍤ ⍥ ⍦ ⍧ ⍨ ⍩ ⍪ ⍫ ⍬ ⍭ ⍮ ⍯
|
||||
2370 │ ⍱ ⍲ ⍳ ⍴ ⍵ ⍶ ⍷ ⍸ ⍹ ⍺ ⍽
|
||||
2380 │ ⎀ ⎁ ⎂ ⎃ ⎄ ⎅ ⎆ ⎇ ⎈ ⎉ ⎊ ⎋ ⎌ ⎍ ⎎ ⎏
|
||||
2390 │ ⎐ ⎑ ⎒ ⎓ ⎔ ⎕ ⎖ ⎗ ⎘ ⎙ ⎚ ⎛ ⎜ ⎝ ⎞ ⎟
|
||||
23a0 │ ⎠ ⎡ ⎢ ⎣ ⎤ ⎥ ⎦ ⎧ ⎨ ⎩ ⎪ ⎫ ⎬ ⎭ ⎮ ⎯
|
||||
23b0 │ ⎰ ⎱ ⎲ ⎳ ⎴ ⎵ ⎶ ⎷ ⎸ ⎹ ⎺ ⎻ ⎼ ⎽
|
||||
23c0 │ ⏏
|
||||
23d0 │ ⏐ ⏜ ⏝ ⏞ ⏟
|
||||
23e0 │ ⏠ ⏡ ⏩ ⏪ ⏫ ⏬ ⏭ ⏮ ⏯
|
||||
23f0 │ ⏰ ⏱ ⏲ ⏳ ⏸ ⏹ ⏺ ⏻ ⏼ ⏽ ⏾
|
||||
|
||||
Control Pictures
|
||||
═══════════════════════════════════════════════════════
|
||||
2400 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2400 │ ␀ ␁ ␂ ␃ ␄ ␅ ␆ ␇ ␈ ␉ ␊ ␋ ␌ ␍ ␎ ␏
|
||||
2410 │ ␐ ␑ ␒ ␓ ␔ ␕ ␖ ␗ ␘ ␙ ␚ ␛ ␜ ␝ ␞ ␟
|
||||
2420 │ ␠ ␡ ␢ ␣  ␥ ␦
|
||||
|
||||
Enclosed Alphanumerics
|
||||
═══════════════════════════════════════════════════════
|
||||
2460 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2460 │ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯
|
||||
2470 │ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿
|
||||
2480 │ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
|
||||
24b0 │ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ
|
||||
24c0 │ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
|
||||
24d0 │ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ
|
||||
24e0 │ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪
|
||||
|
||||
Box Drawing
|
||||
═══════════════════════════════════════════════════════
|
||||
2500 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2500 │ ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏
|
||||
2510 │ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟
|
||||
2520 │ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯
|
||||
2530 │ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿
|
||||
2540 │ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏
|
||||
2550 │ ═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟
|
||||
2560 │ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯
|
||||
2570 │ ╰ ╱ ╲ ╳ ╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿
|
||||
|
||||
Block Elements
|
||||
═══════════════════════════════════════════════════════
|
||||
2580 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2580 │ ▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏
|
||||
2590 │ ▐ ░ ▒ ▓ ▔ ▕ ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟
|
||||
|
||||
Geometric Shapes
|
||||
═══════════════════════════════════════════════════════
|
||||
25a0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
25a0 │ ■ □ ▢ ▣ ▤ ▥ ▦ ▧ ▨ ▩ ▪ ▫ ▬ ▭ ▮ ▯
|
||||
25b0 │ ▰ ▱ ▲ △ ▴ ▵ ▶ ▷ ▸ ▹ ► ▻ ▼ ▽ ▾ ▿
|
||||
25c0 │ ◀ ◁ ◂ ◃ ◄ ◅ ◆ ◇ ◈ ◉ ◊ ○ ◌ ◍ ◎ ●
|
||||
25d0 │ ◐ ◑ ◒ ◓ ◔ ◕ ◖ ◗ ◘ ◙ ◚ ◛ ◜ ◝ ◞ ◟
|
||||
25e0 │ ◠ ◡ ◢ ◣ ◤ ◥ ◦ ◧ ◨ ◩ ◪ ◫ ◬ ◭ ◮ ◯
|
||||
25f0 │ ◰ ◱ ◲ ◳ ◴ ◵ ◶ ◷ ◸ ◹ ◺ ◻ ◼ ◽ ◾ ◿
|
||||
|
||||
Miscellaneous Symbols
|
||||
═══════════════════════════════════════════════════════
|
||||
2600 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2600 │ ☀ ☁ ☂ ☃ ☄ ★ ☆ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☎ ☏
|
||||
2610 │ ☐ ☑ ☒ ☓ ☔ ☕ ☖ ☗ ☘ ☚ ☛ ☜ ☝ ☞ ☟
|
||||
2620 │ ☠ ☡ ☢ ☣ ☤ ☥ ☦ ☧ ☨ ☩ ☪ ☭ ☮ ☯
|
||||
2630 │ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷ ☹ ☺ ☻ ☼ ☽ ☾ ☿
|
||||
2640 │ ♀ ♁ ♂ ♃ ♄ ♅ ♆ ♇ ♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏
|
||||
2650 │ ♐ ♑ ♒ ♓ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ♛ ♜ ♝ ♞ ♟
|
||||
2660 │ ♠ ♡ ♢ ♣ ♤ ♥ ♦ ♧ ♩ ♪ ♫ ♬ ♭ ♮ ♯
|
||||
2670 │ ♳ ♴ ♵ ♶ ♷ ♸ ♹ ♺
|
||||
2680 │ ⚀ ⚁ ⚂ ⚃ ⚄ ⚅ ⚆ ⚇ ⚈ ⚉ ⚊ ⚋ ⚌ ⚍ ⚎ ⚏
|
||||
2690 │ ⚐ ⚑ ⚒ ⚙
|
||||
26a0 │ ⚠ ⚡ ⚢ ⚣ ⚤ ⚥ ⚦ ⚧ ⚨ ⚪ ⚫ ⚬ ⚭ ⚮ ⚯
|
||||
26b0 │ ⚰ ⚱ ⚲ ⚳ ⚴ ⚵ ⚶ ⚷ ⚸ ⚹ ⚺ ⚻ ⚼ ⚽
|
||||
26d0 │ ⛔
|
||||
|
||||
Dingbats
|
||||
═══════════════════════════════════════════════════════
|
||||
2700 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2700 │ ✁ ✂ ✃ ✈
|
||||
2710 │ ✓ ✔ ✘ ✚
|
||||
2720 │ ✭
|
||||
2740 │ ❌
|
||||
2750 │ ❘ ❙ ❚
|
||||
2760 │ ❨ ❩ ❪ ❫ ❬ ❭ ❮ ❯
|
||||
2770 │ ❰ ❱ ❲ ❳ ❴ ❵ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿
|
||||
2780 │ ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➉ ➊ ➋ ➌ ➍ ➎ ➏
|
||||
2790 │ ➐ ➑ ➒ ➓ ➔ ➕ ➖ ➗ ➘ ➙ ➚ ➛ ➜ ➝ ➞ ➟
|
||||
27a0 │ ➠ ➡ ➢ ➣ ➤ ➥ ➦ ➧ ➨ ➩ ➪ ➫ ➬ ➭ ➮ ➯
|
||||
27b0 │ ➰ ➱ ➲ ➳ ➴ ➵ ➶ ➷ ➸ ➹ ➺ ➻ ➼ ➽ ➾ ➿
|
||||
|
||||
Miscellaneous Mathematical Symbols-A
|
||||
═══════════════════════════════════════════════════════
|
||||
27c0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
27c0 │ ⟀ ⟁ ⟂ ⟃ ⟄ ⟅ ⟆ ⟇ ⟈ ⟉ ⟊ ⟌
|
||||
27d0 │ ⟐ ⟑ ⟒ ⟓ ⟔ ⟕ ⟖ ⟗ ⟘ ⟙ ⟚ ⟛ ⟜ ⟝ ⟞ ⟟
|
||||
27e0 │ ⟠ ⟡ ⟢ ⟣ ⟤ ⟥ ⟦ ⟧ ⟨ ⟩ ⟪ ⟫ ⟬ ⟭ ⟮ ⟯
|
||||
|
||||
Supplemental Arrows-A
|
||||
═══════════════════════════════════════════════════════
|
||||
27f0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
27f0 │ ⟰ ⟱ ⟲ ⟳ ⟴ ⟵ ⟶ ⟷ ⟸ ⟹ ⟺ ⟻ ⟼ ⟽ ⟾ ⟿
|
||||
|
||||
Braille Patterns
|
||||
═══════════════════════════════════════════════════════
|
||||
2800 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2800 │ ⠁ ⠂ ⠃ ⠄ ⠅ ⠆ ⠇ ⠈ ⠉ ⠊ ⠋ ⠌ ⠍ ⠎ ⠏
|
||||
2810 │ ⠐ ⠑ ⠒ ⠓ ⠔ ⠕ ⠖ ⠗ ⠘ ⠙ ⠚ ⠛ ⠜ ⠝ ⠞ ⠟
|
||||
2820 │ ⠠ ⠡ ⠢ ⠣ ⠤ ⠥ ⠦ ⠧ ⠨ ⠩ ⠪ ⠫ ⠬ ⠭ ⠮ ⠯
|
||||
2830 │ ⠰ ⠱ ⠲ ⠳ ⠴ ⠵ ⠶ ⠷ ⠸ ⠹ ⠺ ⠻ ⠼ ⠽ ⠾ ⠿
|
||||
2840 │ ⡀ ⡁ ⡂ ⡃ ⡄ ⡅ ⡆ ⡇ ⡈ ⡉ ⡊ ⡋ ⡌ ⡍ ⡎ ⡏
|
||||
2850 │ ⡐ ⡑ ⡒ ⡓ ⡔ ⡕ ⡖ ⡗ ⡘ ⡙ ⡚ ⡛ ⡜ ⡝ ⡞ ⡟
|
||||
2860 │ ⡠ ⡡ ⡢ ⡣ ⡤ ⡥ ⡦ ⡧ ⡨ ⡩ ⡪ ⡫ ⡬ ⡭ ⡮ ⡯
|
||||
2870 │ ⡰ ⡱ ⡲ ⡳ ⡴ ⡵ ⡶ ⡷ ⡸ ⡹ ⡺ ⡻ ⡼ ⡽ ⡾ ⡿
|
||||
2880 │ ⢀ ⢁ ⢂ ⢃ ⢄ ⢅ ⢆ ⢇ ⢈ ⢉ ⢊ ⢋ ⢌ ⢍ ⢎ ⢏
|
||||
2890 │ ⢐ ⢑ ⢒ ⢓ ⢔ ⢕ ⢖ ⢗ ⢘ ⢙ ⢚ ⢛ ⢜ ⢝ ⢞ ⢟
|
||||
28a0 │ ⢠ ⢡ ⢢ ⢣ ⢤ ⢥ ⢦ ⢧ ⢨ ⢩ ⢪ ⢫ ⢬ ⢭ ⢮ ⢯
|
||||
28b0 │ ⢰ ⢱ ⢲ ⢳ ⢴ ⢵ ⢶ ⢷ ⢸ ⢹ ⢺ ⢻ ⢼ ⢽ ⢾ ⢿
|
||||
28c0 │ ⣀ ⣁ ⣂ ⣃ ⣄ ⣅ ⣆ ⣇ ⣈ ⣉ ⣊ ⣋ ⣌ ⣍ ⣎ ⣏
|
||||
28d0 │ ⣐ ⣑ ⣒ ⣓ ⣔ ⣕ ⣖ ⣗ ⣘ ⣙ ⣚ ⣛ ⣜ ⣝ ⣞ ⣟
|
||||
28e0 │ ⣠ ⣡ ⣢ ⣣ ⣤ ⣥ ⣦ ⣧ ⣨ ⣩ ⣪ ⣫ ⣬ ⣭ ⣮ ⣯
|
||||
28f0 │ ⣰ ⣱ ⣲ ⣳ ⣴ ⣵ ⣶ ⣷ ⣸ ⣹ ⣺ ⣻ ⣼ ⣽ ⣾ ⣿
|
||||
|
||||
Supplemental Arrows-B
|
||||
═══════════════════════════════════════════════════════
|
||||
2900 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2900 │ ⤆ ⤇ ⤈ ⤉ ⤊ ⤋
|
||||
2910 │ ⤒ ⤓ ⤙ ⤚ ⤛ ⤜
|
||||
2930 │ ⤸
|
||||
2940 │ ⥀ ⥁ ⥂ ⥃ ⥄ ⥅ ⥆ ⥉ ⥊ ⥋ ⥌ ⥍ ⥎ ⥏
|
||||
2950 │ ⥐ ⥑ ⥒ ⥓ ⥔ ⥕ ⥖ ⥗ ⥘ ⥙ ⥚ ⥛ ⥜ ⥝ ⥞ ⥟
|
||||
2960 │ ⥠ ⥡ ⥢ ⥣ ⥤ ⥥ ⥦ ⥧ ⥨ ⥩ ⥪ ⥫ ⥬ ⥭ ⥮ ⥯
|
||||
2970 │ ⥰ ⥱ ⥲ ⥳ ⥴ ⥵ ⥶ ⥷ ⥸ ⥹ ⥺ ⥻ ⥼ ⥽ ⥾ ⥿
|
||||
|
||||
Miscellaneous Mathematical Symbols-B
|
||||
═══════════════════════════════════════════════════════
|
||||
2980 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2980 │ ⦀ ⦁ ⦂ ⦃ ⦄ ⦅ ⦆ ⦇ ⦈ ⦉ ⦊ ⦋ ⦌ ⦍ ⦎ ⦏
|
||||
2990 │ ⦐ ⦑ ⦒ ⦓ ⦔ ⦗ ⦘ ⦙ ⦚ ⦜
|
||||
29b0 │ ⦻ ⦼ ⦽ ⦾ ⦿
|
||||
29c0 │ ⧊ ⧋ ⧎ ⧏
|
||||
29d0 │ ⧐ ⧑ ⧒ ⧓ ⧔ ⧕ ⧖ ⧗ ⧘ ⧙ ⧚ ⧛ ⧜ ⧞
|
||||
29e0 │ ⧣ ⧤ ⧥ ⧦ ⧧ ⧨ ⧩ ⧪ ⧫ ⧬ ⧭ ⧮ ⧯
|
||||
29f0 │ ⧰ ⧱ ⧲ ⧳ ⧴ ⧵ ⧶ ⧷ ⧸ ⧹ ⧺ ⧻ ⧼ ⧽ ⧾ ⧿
|
||||
|
||||
Supplemental Mathematical Operators
|
||||
═══════════════════════════════════════════════════════
|
||||
2a00 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2a00 │ ⨀ ⨁ ⨂ ⨍ ⨎ ⨏
|
||||
2a10 │ ⨐ ⨑ ⨒ ⨓ ⨔ ⨕ ⨖ ⨗ ⨘ ⨙ ⨚ ⨛ ⨜ ⨟
|
||||
2a20 │ ⨡ ⨢ ⨣ ⨤ ⨥ ⨦ ⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨯
|
||||
2a30 │ ⨰ ⨱ ⨲ ⨳ ⨴ ⨵ ⨼ ⨽ ⨾ ⨿
|
||||
2a40 │ ⩀ ⩁ ⩂ ⩃ ⩄ ⩅ ⩆ ⩇ ⩈ ⩉ ⩌ ⩍ ⩎ ⩏
|
||||
2a50 │ ⩑ ⩒ ⩓ ⩔ ⩕ ⩖ ⩗ ⩘ ⩙ ⩚ ⩛ ⩜ ⩝ ⩞ ⩟
|
||||
2a60 │ ⩠ ⩡ ⩢ ⩣ ⩤ ⩥ ⩦ ⩧ ⩨ ⩩ ⩪ ⩫ ⩬ ⩭ ⩮ ⩯
|
||||
2a70 │ ⩰ ⩱ ⩲ ⩳ ⩷ ⩹ ⩺ ⩻ ⩼ ⩽ ⩾ ⩿
|
||||
2a80 │ ⪀ ⪁ ⪂ ⪃ ⪄ ⪅ ⪆ ⪇ ⪈ ⪉ ⪊ ⪋ ⪌ ⪍ ⪎ ⪏
|
||||
2a90 │ ⪐ ⪑ ⪒ ⪓ ⪔ ⪕ ⪖ ⪗ ⪘ ⪙ ⪚ ⪛ ⪜ ⪝ ⪞ ⪟
|
||||
2aa0 │ ⪠ ⪡ ⪢ ⪣ ⪤ ⪦ ⪧ ⪨ ⪩ ⪪ ⪫ ⪬ ⪭ ⪮ ⪯
|
||||
2ab0 │ ⪰ ⪱ ⪲ ⪳ ⪴ ⪵ ⪶ ⪷ ⪸ ⪹ ⪺ ⪽ ⪾ ⪿
|
||||
2ac0 │ ⫀ ⫁ ⫂ ⫃ ⫄ ⫅ ⫆ ⫇ ⫈ ⫉ ⫊ ⫋ ⫌ ⫏
|
||||
2ad0 │ ⫐ ⫑ ⫒ ⫓ ⫔ ⫕ ⫖ ⫙ ⫚ ⫛ ⫝̸ ⫝ ⫞
|
||||
2ae0 │ ⫬ ⫭ ⫮ ⫯
|
||||
2af0 │ ⫰ ⫱ ⫲ ⫳ ⫴ ⫵ ⫶ ⫹ ⫺ ⫻ ⫼ ⫽ ⫾ ⫿
|
||||
|
||||
Miscellaneous Symbols and Arrows
|
||||
═══════════════════════════════════════════════════════
|
||||
2b00 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2b00 │ ⬀ ⬁ ⬂ ⬃ ⬅ ⬆ ⬇ ⬈ ⬉ ⬊ ⬋ ⬍ ⬎ ⬏
|
||||
2b10 │ ⬐ ⬑ ⬒ ⬓ ⬔ ⬕ ⬖ ⬗ ⬘ ⬙ ⬚ ⬛ ⬜ ⬝ ⬞ ⬟
|
||||
2b20 │ ⬥ ⬦ ⬧ ⬨ ⬩ ⬪ ⬫ ⬮ ⬯
|
||||
2b30 │ ⬱
|
||||
2b40 │ ⭍ ⭎ ⭏
|
||||
2b50 │ ⭐ ⭑ ⭒ ⭖ ⭗ ⭘ ⭙ ⭚ ⭛ ⭜ ⭝ ⭞ ⭟
|
||||
2b60 │ ⭠ ⭡ ⭢ ⭣ ⭤ ⭥ ⭦ ⭧ ⭨ ⭩ ⭪ ⭫ ⭬ ⭭ ⭮ ⭯
|
||||
2b70 │ ⭱ ⭳ ⭿
|
||||
2b80 │ ⮀ ⮁ ⮂ ⮃ ⮄ ⮅ ⮆ ⮇ ⮈ ⮊ ⮌ ⮍ ⮎ ⮏
|
||||
2b90 │ ⮕ ⮘ ⮙ ⮚ ⮛ ⮜ ⮝ ⮞ ⮟
|
||||
2ba0 │ ⮠ ⮡ ⮢ ⮣ ⮤ ⮥ ⮦ ⮧ ⮨ ⮩ ⮪ ⮫ ⮬ ⮭ ⮮ ⮯
|
||||
2bb0 │ ⮸ ⮽
|
||||
2bc0 │ ⯀ ⯁ ⯂ ⯃ ⯅ ⯆ ⯇ ⯈ ⯌ ⯍ ⯎ ⯏
|
||||
2be0 │ ⯭ ⯯
|
||||
|
||||
Latin Extended-C
|
||||
═══════════════════════════════════════════════════════
|
||||
2c60 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2c70 │ ⱱ ⱼ ⱽ
|
||||
|
||||
Supplemental Punctuation
|
||||
═══════════════════════════════════════════════════════
|
||||
2e00 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
2e20 │ ⸮
|
||||
|
||||
Bopomofo
|
||||
═══════════════════════════════════════════════════════
|
||||
3100 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
3100 │ ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ
|
||||
3110 │ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ
|
||||
3120 │ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ
|
||||
|
||||
Private Use Area
|
||||
═══════════════════════════════════════════════════════
|
||||
e000 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
e0a0 │
|
||||
e0b0 │
|
||||
e1c0 │
|
||||
e4c0 │
|
||||
e8c0 │
|
||||
e900 │
|
||||
e920 │
|
||||
e930 │
|
||||
e940 │
|
||||
e950 │
|
||||
e960 │
|
||||
e970 │
|
||||
e980 │
|
||||
e990 │
|
||||
e9a0 │
|
||||
e9b0 │
|
||||
e9c0 │
|
||||
e9d0 │
|
||||
e9e0 │
|
||||
e9f0 │
|
||||
ea00 │
|
||||
ea10 │
|
||||
ea20 │
|
||||
ea40 │
|
||||
ea50 │
|
||||
ea60 │
|
||||
ea70 │
|
||||
ea80 │
|
||||
ea90 │
|
||||
eb00 │
|
||||
eb20 │
|
||||
eb30 │
|
||||
eb40 │
|
||||
eb50 │
|
||||
eb60 │
|
||||
eb70 │
|
||||
eb80 │
|
||||
eb90 │
|
||||
eba0 │
|
||||
ebb0 │
|
||||
ebc0 │
|
||||
ebe0 │
|
||||
ebf0 │
|
||||
ec00 │
|
||||
ec10 │
|
||||
ec20 │
|
||||
ec30 │
|
||||
ec40 │
|
||||
eca0 │
|
||||
ecc0 │
|
||||
ecd0 │
|
||||
ece0 │
|
||||
ecf0 │
|
||||
ed00 │
|
||||
ed10 │
|
||||
ed20 │
|
||||
ed30 │
|
||||
ed40 │
|
||||
ed50 │
|
||||
ed60 │
|
||||
ed80 │
|
||||
ed90 │
|
||||
eda0 │
|
||||
edb0 │
|
||||
edc0 │
|
||||
edd0 │
|
||||
ede0 │
|
||||
|
||||
Alphabetic Presentation Forms
|
||||
═══════════════════════════════════════════════════════
|
||||
fb00 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
fb00 │ fi fl
|
||||
fb20 │ ﬩
|
||||
|
||||
CJK Compatibility Forms
|
||||
═══════════════════════════════════════════════════════
|
||||
fe30 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
fe30 │ ︰ ︱ ︲ ︳ ︿
|
||||
fe40 │ ﹀ ﹁ ﹂ ﹇ ﹈
|
||||
|
||||
Small Form Variants
|
||||
═══════════════════════════════════════════════════════
|
||||
fe50 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
fe50 │ ﹐ ﹑ ﹒ ﹔ ﹕ ﹖ ﹗ ﹘ ﹙ ﹚ ﹛ ﹜ ﹝ ﹞ ﹟
|
||||
fe60 │ ﹠ ﹡ ﹢ ﹣ ﹤ ﹥ ﹦ ﹨ ﹩ ﹪ ﹫
|
||||
|
||||
Halfwidth and Fullwidth Forms
|
||||
═══════════════════════════════════════════════════════
|
||||
ff00 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
ff00 │ ! " # $ % & ' ( ) * + , - . /
|
||||
ff10 │ 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
|
||||
ff20 │ @ A B C D E F G H I J K L M N O
|
||||
ff30 │ P Q R S T U V W X Y Z [ \ ] ^ _
|
||||
ff40 │ ` a b c d e f g h i j k l m n o
|
||||
ff50 │ p q r s t u v w x y z { | } ~
|
||||
ff60 │ 。 「 」 、 ・
|
||||
ffe0 │ ¢ £ ¬  ̄ ¦ ¥ ₩ │ ← ↑ → ↓ ■ ○
|
||||
|
||||
Specials
|
||||
═══════════════════════════════════════════════════════
|
||||
fff0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
fff0 │  <20>
|
||||
|
||||
_ _
|
||||
__ _ ___| |_ _ __ __ _| |
|
||||
/ _` / __| __| '__/ _` | |
|
||||
| (_| \__ \ |_| | | (_| | |
|
||||
\__,_|___/\__|.| \__,_|_|
|
||||
_ __ | | __ _ _ __ ___ ___
|
||||
| '_ \| |/ _` | '_ \ / _ \/ __|
|
||||
| |_) | | (_| | | | | __/\__ \
|
||||
| .__/|_|\__,_|_| |_|\___||___/
|
||||
|_|
|
||||
|
||||
Old Italic
|
||||
═══════════════════════════════════════════════════════
|
||||
10300 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
10300 │ 𐌀 𐌁 𐌂 𐌃 𐌄 𐌅 𐌆 𐌇 𐌈 𐌉 𐌊 𐌋 𐌌 𐌍 𐌎 𐌏
|
||||
10310 │ 𐌐 𐌑 𐌒 𐌓 𐌔 𐌕 𐌖 𐌗 𐌘 𐌙 𐌚 𐌛 𐌜 𐌝 𐌞 𐌟
|
||||
10320 │ 𐌠 𐌡 𐌢 𐌣
|
||||
|
||||
Gothic
|
||||
═══════════════════════════════════════════════════════
|
||||
10330 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
10330 │ 𐌰 𐌱 𐌲 𐌳 𐌴 𐌵 𐌶 𐌷 𐌸 𐌹 𐌺 𐌻 𐌼 𐌽 𐌾 𐌿
|
||||
10340 │ 𐍀 𐍁 𐍂 𐍃 𐍄 𐍅 𐍆 𐍇 𐍈 𐍉 𐍊
|
||||
|
||||
Deseret
|
||||
═══════════════════════════════════════════════════════
|
||||
10400 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
10400 │ 𐐀 𐐁 𐐂 𐐃 𐐄 𐐅 𐐆 𐐇 𐐈 𐐉 𐐊 𐐋 𐐌 𐐍 𐐎 𐐏
|
||||
10410 │ 𐐐 𐐑 𐐒 𐐓 𐐔 𐐕 𐐖 𐐗 𐐘 𐐙 𐐚 𐐛 𐐜 𐐝 𐐞 𐐟
|
||||
10420 │ 𐐠 𐐡 𐐢 𐐣 𐐤 𐐥 𐐦 𐐧 𐐨 𐐩 𐐪 𐐫 𐐬 𐐭 𐐮 𐐯
|
||||
10430 │ 𐐰 𐐱 𐐲 𐐳 𐐴 𐐵 𐐶 𐐷 𐐸 𐐹 𐐺 𐐻 𐐼 𐐽 𐐾 𐐿
|
||||
10440 │ 𐑀 𐑁 𐑂 𐑃 𐑄 𐑅 𐑆 𐑇 𐑈 𐑉 𐑊 𐑋 𐑌 𐑍 𐑎 𐑏
|
||||
|
||||
Osmanya
|
||||
═══════════════════════════════════════════════════════
|
||||
10480 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
10480 │ 𐒀 𐒁 𐒂 𐒃 𐒄 𐒅 𐒆 𐒇 𐒈 𐒉 𐒊 𐒋 𐒌 𐒍 𐒎 𐒏
|
||||
10490 │ 𐒐 𐒑 𐒒 𐒓 𐒔 𐒕 𐒖 𐒗 𐒘 𐒙 𐒚 𐒛 𐒜 𐒝
|
||||
|
||||
Osage
|
||||
═══════════════════════════════════════════════════════
|
||||
104b0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
104b0 │ 𐒰 𐒱 𐒲 𐒳 𐒴 𐒵 𐒶 𐒷 𐒸 𐒹 𐒺 𐒻 𐒼 𐒽 𐒾 𐒿
|
||||
104c0 │ 𐓀 𐓁 𐓂 𐓃 𐓄 𐓅 𐓆 𐓇 𐓈 𐓉 𐓊 𐓋 𐓌 𐓍 𐓎 𐓏
|
||||
104d0 │ 𐓐 𐓑 𐓒 𐓓 𐓘 𐓙 𐓚 𐓛 𐓜 𐓝 𐓞 𐓟
|
||||
104e0 │ 𐓠 𐓡 𐓢 𐓣 𐓤 𐓥 𐓦 𐓧 𐓨 𐓩 𐓪 𐓫 𐓬 𐓭 𐓮 𐓯
|
||||
104f0 │ 𐓰 𐓱 𐓲 𐓳 𐓴 𐓵 𐓶 𐓷 𐓸 𐓹 𐓺 𐓻
|
||||
|
||||
Brahmi
|
||||
═══════════════════════════════════════════════════════
|
||||
11000 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
11000 │ 𑀃 𑀄 𑀅 𑀆 𑀇 𑀈 𑀉 𑀊 𑀋 𑀌 𑀍 𑀎 𑀏
|
||||
11010 │ 𑀐 𑀑 𑀒 𑀓 𑀔 𑀕 𑀖 𑀗 𑀘 𑀙 𑀚 𑀛 𑀜 𑀝 𑀞 𑀟
|
||||
11020 │ 𑀠 𑀡 𑀢 𑀣 𑀤 𑀥 𑀦 𑀧 𑀨 𑀩 𑀪 𑀫 𑀬 𑀭 𑀮 𑀯
|
||||
11030 │ 𑀰 𑀱 𑀲 𑀳 𑀴 𑀵 𑀶 𑀷
|
||||
11040 │ 𑁇 𑁈 𑁉 𑁊 𑁋 𑁌 𑁍
|
||||
11050 │ 𑁒 𑁓 𑁔 𑁕 𑁖 𑁗 𑁘 𑁙 𑁚 𑁛 𑁜 𑁝 𑁞 𑁟
|
||||
11060 │ 𑁠 𑁡 𑁢 𑁣 𑁤 𑁥 𑁦 𑁧 𑁨 𑁩 𑁪 𑁫 𑁬 𑁭 𑁮 𑁯
|
||||
|
||||
Sinhala Archaic Numbers
|
||||
═══════════════════════════════════════════════════════
|
||||
111e0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
111e0 │ 𑇡 𑇢 𑇣 𑇤 𑇥 𑇦 𑇧 𑇨 𑇩 𑇪 𑇫 𑇬 𑇭 𑇮 𑇯
|
||||
111f0 │ 𑇰 𑇱 𑇲 𑇳 𑇴
|
||||
|
||||
Egyptian Hieroglyphs
|
||||
═══════════════════════════════════════════════════════
|
||||
13000 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
13000 │ 𓀀 𓀁 𓀂 𓀃 𓀄 𓀅 𓀆 𓀇 𓀈 𓀉 𓀊 𓀋 𓀌 𓀍 𓀎 𓀏
|
||||
13010 │ 𓀐 𓀑 𓀒 𓀓 𓀔 𓀕 𓀖 𓀗 𓀘 𓀙 𓀚 𓀛 𓀜 𓀝 𓀞 𓀟
|
||||
13020 │ 𓀠 𓀡 𓀢 𓀣 𓀤 𓀥 𓀦 𓀧 𓀨 𓀩 𓀪 𓀫 𓀬 𓀭 𓀮 𓀯
|
||||
13030 │ 𓀰 𓀱 𓀲 𓀳 𓀴 𓀵 𓀶 𓀷 𓀸 𓀹 𓀺 𓀻 𓀼 𓀽 𓀾 𓀿
|
||||
13040 │ 𓁀 𓁁 𓁂 𓁃 𓁄 𓁅 𓁆 𓁇 𓁈 𓁉 𓁊 𓁋 𓁌 𓁍 𓁎 𓁏
|
||||
13050 │ 𓁐 𓁑 𓁒 𓁓 𓁔 𓁕 𓁖 𓁗 𓁘 𓁙 𓁚 𓁛 𓁜 𓁝 𓁞 𓁟
|
||||
13060 │ 𓁠 𓁡 𓁢 𓁣 𓁤 𓁥 𓁦 𓁧 𓁨 𓁩 𓁪 𓁫 𓁬 𓁭 𓁮 𓁯
|
||||
13070 │ 𓁰 𓁱 𓁲 𓁳 𓁴 𓁵 𓁶 𓁷 𓁸 𓁹 𓁺 𓁻 𓁼 𓁽 𓁾 𓁿
|
||||
13080 │ 𓂀 𓂁 𓂂 𓂃 𓂄 𓂅 𓂆 𓂇 𓂈 𓂉 𓂊 𓂋 𓂌 𓂍 𓂎 𓂏
|
||||
13090 │ 𓂐 𓂑 𓂒 𓂓 𓂔 𓂕 𓂖 𓂗 𓂘 𓂙 𓂚 𓂛 𓂜 𓂝 𓂞 𓂟
|
||||
130a0 │ 𓂠 𓂡 𓂢 𓂣 𓂤 𓂥 𓂦 𓂧 𓂨 𓂩 𓂪 𓂫 𓂬 𓂭 𓂮 𓂯
|
||||
130b0 │ 𓂰 𓂱 𓂲 𓂳 𓂴 𓂵 𓂶 𓂷 𓂻 𓂼 𓂽 𓂾 𓂿
|
||||
130c0 │ 𓃀 𓃁 𓃂 𓃃 𓃄 𓃅 𓃆 𓃇 𓃈 𓃉 𓃊 𓃋 𓃌 𓃍 𓃎 𓃏
|
||||
130d0 │ 𓃐 𓃑 𓃒 𓃓 𓃔 𓃕 𓃖 𓃗 𓃘 𓃙 𓃚 𓃛 𓃜 𓃝 𓃞 𓃟
|
||||
130e0 │ 𓃠 𓃡 𓃢 𓃣 𓃤 𓃥 𓃦 𓃧 𓃨 𓃩 𓃪 𓃫 𓃬 𓃭 𓃮 𓃯
|
||||
130f0 │ 𓃰 𓃱 𓃲 𓃳 𓃴 𓃵 𓃶 𓃷 𓃸 𓃹 𓃺 𓃻 𓃼 𓃽 𓃾 𓃿
|
||||
13100 │ 𓄀 𓄁 𓄂 𓄃 𓄄 𓄅 𓄆 𓄇 𓄈 𓄉 𓄊 𓄋 𓄌 𓄍 𓄎 𓄏
|
||||
13110 │ 𓄐 𓄑 𓄒 𓄓 𓄔 𓄕 𓄖 𓄗 𓄘 𓄙 𓄚 𓄛 𓄜 𓄝 𓄞 𓄟
|
||||
13120 │ 𓄠 𓄡 𓄢 𓄣 𓄤 𓄥 𓄦 𓄧 𓄨 𓄩 𓄪 𓄫 𓄬 𓄭 𓄮 𓄯
|
||||
13130 │ 𓄰 𓄱 𓄲 𓄳 𓄴 𓄵 𓄶 𓄷 𓄸 𓄹 𓄺 𓄻 𓄼 𓄽 𓄾 𓄿
|
||||
13140 │ 𓅀 𓅁 𓅂 𓅃 𓅄 𓅅 𓅆 𓅇 𓅈 𓅉 𓅊 𓅋 𓅌 𓅍 𓅎 𓅏
|
||||
13150 │ 𓅐 𓅑 𓅒 𓅓 𓅔 𓅕 𓅖 𓅗 𓅘 𓅙 𓅚 𓅛 𓅜 𓅝 𓅞 𓅟
|
||||
13160 │ 𓅠 𓅡 𓅢 𓅣 𓅤 𓅥 𓅦 𓅧 𓅨 𓅩 𓅪 𓅫 𓅬 𓅭 𓅮 𓅯
|
||||
13170 │ 𓅰 𓅱 𓅲 𓅳 𓅴 𓅵 𓅶 𓅷 𓅸 𓅹 𓅺 𓅻 𓅼 𓅽 𓅾 𓅿
|
||||
13180 │ 𓆀 𓆁 𓆂 𓆃 𓆄 𓆅 𓆆 𓆇 𓆈 𓆉 𓆊 𓆋 𓆌 𓆍 𓆎 𓆏
|
||||
13190 │ 𓆐 𓆑 𓆒 𓆓 𓆔 𓆕 𓆖 𓆗 𓆘 𓆙 𓆚 𓆛 𓆜 𓆝 𓆞 𓆟
|
||||
131a0 │ 𓆠 𓆡 𓆢 𓆣 𓆤 𓆥 𓆦 𓆧 𓆨 𓆩 𓆪 𓆫 𓆬 𓆭 𓆮 𓆯
|
||||
131b0 │ 𓆰 𓆱 𓆲 𓆳 𓆴 𓆵 𓆶 𓆷 𓆸 𓆹 𓆺 𓆻 𓆼 𓆽 𓆾 𓆿
|
||||
131c0 │ 𓇀 𓇁 𓇂 𓇃 𓇄 𓇅 𓇆 𓇇 𓇈 𓇉 𓇊 𓇋 𓇌 𓇍 𓇎 𓇏
|
||||
131d0 │ 𓇐 𓇑 𓇒 𓇓 𓇔 𓇕 𓇖 𓇗 𓇘 𓇙 𓇚 𓇛 𓇜 𓇝 𓇞 𓇟
|
||||
131e0 │ 𓇠 𓇡 𓇢 𓇣 𓇤 𓇥 𓇦 𓇧 𓇨 𓇩 𓇪 𓇫 𓇬 𓇭 𓇮 𓇯
|
||||
131f0 │ 𓇰 𓇱 𓇲 𓇳 𓇴 𓇵 𓇶 𓇷 𓇸 𓇹 𓇺 𓇻 𓇼 𓇽 𓇾 𓇿
|
||||
13200 │ 𓈀 𓈁 𓈂 𓈃 𓈄 𓈅 𓈆 𓈇 𓈈 𓈉 𓈊 𓈋 𓈌 𓈍 𓈎 𓈏
|
||||
13210 │ 𓈐 𓈑 𓈒 𓈓 𓈔 𓈕 𓈖 𓈗 𓈘 𓈙 𓈚 𓈛 𓈜 𓈝 𓈞 𓈟
|
||||
13220 │ 𓈠 𓈡 𓈢 𓈣 𓈤 𓈥 𓈦 𓈧 𓈨 𓈩 𓈪 𓈫 𓈬 𓈭 𓈮 𓈯
|
||||
13230 │ 𓈰 𓈱 𓈲 𓈳 𓈴 𓈵 𓈶 𓈷 𓈸 𓈹 𓈺 𓈻 𓈼 𓈽 𓈾 𓈿
|
||||
13240 │ 𓉀 𓉁 𓉂 𓉃 𓉄 𓉅 𓉆 𓉇 𓉈 𓉉 𓉊 𓉋 𓉌 𓉍 𓉎 𓉏
|
||||
13250 │ 𓉐 𓉑 𓉒 𓉓 𓉔 𓉕 𓉖 𓉗 𓉘 𓉙 𓉚 𓉛 𓉜 𓉝 𓉞 𓉟
|
||||
13260 │ 𓉠 𓉡 𓉢 𓉣 𓉤 𓉥 𓉦 𓉧 𓉨 𓉩 𓉪 𓉫 𓉬 𓉭 𓉮 𓉯
|
||||
13270 │ 𓉰 𓉱 𓉲 𓉳 𓉴 𓉵 𓉶 𓉷 𓉸 𓉹 𓉺 𓉻 𓉼 𓉽 𓉾 𓉿
|
||||
13280 │ 𓊀 𓊁 𓊂 𓊃 𓊄 𓊅 𓊆 𓊇 𓊈 𓊉 𓊊 𓊋 𓊌 𓊍 𓊎 𓊏
|
||||
13290 │ 𓊐 𓊑 𓊒 𓊓 𓊔 𓊕 𓊖 𓊗 𓊘 𓊙 𓊚 𓊛 𓊜 𓊝 𓊞 𓊟
|
||||
132a0 │ 𓊠 𓊡 𓊢 𓊣 𓊤 𓊥 𓊦 𓊧 𓊨 𓊩 𓊪 𓊫 𓊬 𓊭 𓊮 𓊯
|
||||
132b0 │ 𓊰 𓊱 𓊲 𓊳 𓊴 𓊵 𓊶 𓊷 𓊸 𓊹 𓊺 𓊻 𓊼 𓊽 𓊾 𓊿
|
||||
132c0 │ 𓋀 𓋁 𓋂 𓋃 𓋄 𓋅 𓋆 𓋇 𓋈 𓋉 𓋊 𓋋 𓋌 𓋍 𓋎 𓋏
|
||||
132d0 │ 𓋐 𓋑 𓋒 𓋓 𓋔 𓋕 𓋖 𓋗 𓋘 𓋙 𓋚 𓋛 𓋜 𓋝 𓋞 𓋟
|
||||
132e0 │ 𓋠 𓋡 𓋢 𓋣 𓋤 𓋥 𓋦 𓋧 𓋨 𓋩 𓋪 𓋫 𓋬 𓋭 𓋮 𓋯
|
||||
132f0 │ 𓋰 𓋱 𓋲 𓋳 𓋴 𓋵 𓋶 𓋷 𓋸 𓋹 𓋺 𓋻 𓋼 𓋽 𓋾 𓋿
|
||||
13300 │ 𓌀 𓌁 𓌂 𓌃 𓌄 𓌅 𓌆 𓌇 𓌈 𓌉 𓌊 𓌋 𓌌 𓌍 𓌎 𓌏
|
||||
13310 │ 𓌐 𓌑 𓌒 𓌓 𓌔 𓌕 𓌖 𓌗 𓌘 𓌙 𓌚 𓌛 𓌜 𓌝 𓌞 𓌟
|
||||
13320 │ 𓌠 𓌡 𓌢 𓌣 𓌤 𓌥 𓌦 𓌧 𓌨 𓌩 𓌪 𓌫 𓌬 𓌭 𓌮 𓌯
|
||||
13330 │ 𓌰 𓌱 𓌲 𓌳 𓌴 𓌵 𓌶 𓌷 𓌸 𓌹 𓌺 𓌻 𓌼 𓌽 𓌾 𓌿
|
||||
13340 │ 𓍀 𓍁 𓍂 𓍃 𓍄 𓍅 𓍆 𓍇 𓍈 𓍉 𓍊 𓍋 𓍌 𓍍 𓍎 𓍏
|
||||
13350 │ 𓍐 𓍑 𓍒 𓍓 𓍔 𓍕 𓍖 𓍗 𓍘 𓍙 𓍚 𓍛 𓍜 𓍝 𓍞 𓍟
|
||||
13360 │ 𓍠 𓍡 𓍢 𓍣 𓍤 𓍥 𓍦 𓍧 𓍨 𓍩 𓍪 𓍫 𓍬 𓍭 𓍮 𓍯
|
||||
13370 │ 𓍰 𓍱 𓍲 𓍳 𓍴 𓍵 𓍶 𓍷 𓍸 𓍹 𓍺 𓍻 𓍼 𓍽 𓍾 𓍿
|
||||
13380 │ 𓎀 𓎁 𓎂 𓎃 𓎄 𓎅 𓎆 𓎇 𓎈 𓎉 𓎊 𓎋 𓎌 𓎍 𓎎 𓎏
|
||||
13390 │ 𓎐 𓎑 𓎒 𓎓 𓎔 𓎕 𓎖 𓎗 𓎘 𓎙 𓎚 𓎛 𓎜 𓎝 𓎞 𓎟
|
||||
133a0 │ 𓎠 𓎡 𓎢 𓎣 𓎤 𓎥 𓎦 𓎧 𓎨 𓎩 𓎪 𓎫 𓎬 𓎭 𓎮 𓎯
|
||||
133b0 │ 𓎰 𓎱 𓎲 𓎳 𓎴 𓎵 𓎶 𓎷 𓎸 𓎹 𓎺 𓎻 𓎼 𓎽 𓎾 𓎿
|
||||
133c0 │ 𓏀 𓏁 𓏂 𓏃 𓏄 𓏅 𓏆 𓏇 𓏈 𓏉 𓏊 𓏋 𓏌 𓏍 𓏎 𓏏
|
||||
133d0 │ 𓏐 𓏑 𓏒 𓏓 𓏔 𓏕 𓏖 𓏗 𓏘 𓏙 𓏚 𓏛 𓏜 𓏝 𓏞 𓏟
|
||||
133e0 │ 𓏠 𓏡 𓏢 𓏣 𓏤 𓏥 𓏦 𓏧 𓏨 𓏩 𓏪 𓏫 𓏬 𓏭 𓏮 𓏯
|
||||
133f0 │ 𓏰 𓏱 𓏲 𓏳 𓏴 𓏵 𓏶 𓏷 𓏸 𓏹 𓏺 𓏻 𓏼 𓏽 𓏾 𓏿
|
||||
13400 │ 𓐀 𓐁 𓐂 𓐃 𓐄 𓐅 𓐆 𓐇 𓐈 𓐉 𓐊 𓐋 𓐌 𓐍 𓐎 𓐏
|
||||
13410 │ 𓐐 𓐑 𓐒 𓐓 𓐔 𓐕 𓐖 𓐗 𓐘 𓐙 𓐚 𓐛 𓐜 𓐝 𓐞 𓐟
|
||||
13420 │ 𓐠 𓐡 𓐢 𓐣 𓐤 𓐥 𓐦 𓐧 𓐨 𓐩 𓐪 𓐫 𓐬 𓐭 𓐮
|
||||
|
||||
Mathematical Alphanumeric Symbols
|
||||
═══════════════════════════════════════════════════════
|
||||
1d400 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1d400 │ 𝐀 𝐁 𝐂 𝐃 𝐄 𝐅 𝐆 𝐇 𝐈 𝐉 𝐊 𝐋 𝐌 𝐍 𝐎 𝐏
|
||||
1d410 │ 𝐐 𝐑 𝐒 𝐓 𝐔 𝐕 𝐖 𝐗 𝐘 𝐙 𝐚 𝐛 𝐜 𝐝 𝐞 𝐟
|
||||
1d420 │ 𝐠 𝐡 𝐢 𝐣 𝐤 𝐥 𝐦 𝐧 𝐨 𝐩 𝐪 𝐫 𝐬 𝐭 𝐮 𝐯
|
||||
1d430 │ 𝐰 𝐱 𝐲 𝐳 𝐴 𝐵 𝐶 𝐷 𝐸 𝐹 𝐺 𝐻 𝐼 𝐽 𝐾 𝐿
|
||||
1d440 │ 𝑀 𝑁 𝑂 𝑃 𝑄 𝑅 𝑆 𝑇 𝑈 𝑉 𝑊 𝑋 𝑌 𝑍 𝑎 𝑏
|
||||
1d450 │ 𝑐 𝑑 𝑒 𝑓 𝑔 𝑖 𝑗 𝑘 𝑙 𝑚 𝑛 𝑜 𝑝 𝑞 𝑟
|
||||
1d460 │ 𝑠 𝑡 𝑢 𝑣 𝑤 𝑥 𝑦 𝑧 𝑨 𝑩 𝑪 𝑫 𝑬 𝑭 𝑮 𝑯
|
||||
1d470 │ 𝑰 𝑱 𝑲 𝑳 𝑴 𝑵 𝑶 𝑷 𝑸 𝑹 𝑺 𝑻 𝑼 𝑽 𝑾 𝑿
|
||||
1d480 │ 𝒀 𝒁 𝒂 𝒃 𝒄 𝒅 𝒆 𝒇 𝒈 𝒉 𝒊 𝒋 𝒌 𝒍 𝒎 𝒏
|
||||
1d490 │ 𝒐 𝒑 𝒒 𝒓 𝒔 𝒕 𝒖 𝒗 𝒘 𝒙 𝒚 𝒛 𝒜 𝒞 𝒟
|
||||
1d4a0 │ 𝒢 𝒥 𝒦 𝒩 𝒪 𝒫 𝒬 𝒮 𝒯
|
||||
1d4b0 │ 𝒰 𝒱 𝒲 𝒳 𝒴 𝒵 𝒶 𝒷 𝒸 𝒹 𝒻 𝒽 𝒾 𝒿
|
||||
1d4c0 │ 𝓀 𝓁 𝓂 𝓃 𝓅 𝓆 𝓇 𝓈 𝓉 𝓊 𝓋 𝓌 𝓍 𝓎 𝓏
|
||||
1d4d0 │ 𝓐 𝓑 𝓒 𝓓 𝓔 𝓕 𝓖 𝓗 𝓘 𝓙 𝓚 𝓛 𝓜 𝓝 𝓞 𝓟
|
||||
1d4e0 │ 𝓠 𝓡 𝓢 𝓣 𝓤 𝓥 𝓦 𝓧 𝓨 𝓩 𝓪 𝓫 𝓬 𝓭 𝓮 𝓯
|
||||
1d4f0 │ 𝓰 𝓱 𝓲 𝓳 𝓴 𝓵 𝓶 𝓷 𝓸 𝓹 𝓺 𝓻 𝓼 𝓽 𝓾 𝓿
|
||||
1d500 │ 𝔀 𝔁 𝔂 𝔃 𝔄 𝔅 𝔇 𝔈 𝔉 𝔊 𝔍 𝔎 𝔏
|
||||
1d510 │ 𝔐 𝔑 𝔒 𝔓 𝔔 𝔖 𝔗 𝔘 𝔙 𝔚 𝔛 𝔜 𝔞 𝔟
|
||||
1d520 │ 𝔠 𝔡 𝔢 𝔣 𝔤 𝔥 𝔦 𝔧 𝔨 𝔩 𝔪 𝔫 𝔬 𝔭 𝔮 𝔯
|
||||
1d530 │ 𝔰 𝔱 𝔲 𝔳 𝔴 𝔵 𝔶 𝔷 𝔸 𝔹 𝔻 𝔼 𝔽 𝔾
|
||||
1d540 │ 𝕀 𝕁 𝕂 𝕃 𝕄 𝕆 𝕊 𝕋 𝕌 𝕍 𝕎 𝕏
|
||||
1d550 │ 𝕐 𝕒 𝕓 𝕔 𝕕 𝕖 𝕗 𝕘 𝕙 𝕚 𝕛 𝕜 𝕝 𝕞 𝕟
|
||||
1d560 │ 𝕠 𝕡 𝕢 𝕣 𝕤 𝕥 𝕦 𝕧 𝕨 𝕩 𝕪 𝕫 𝕬 𝕭 𝕮 𝕯
|
||||
1d570 │ 𝕰 𝕱 𝕲 𝕳 𝕴 𝕵 𝕶 𝕷 𝕸 𝕹 𝕺 𝕻 𝕼 𝕽 𝕾 𝕿
|
||||
1d580 │ 𝖀 𝖁 𝖂 𝖃 𝖄 𝖅 𝖆 𝖇 𝖈 𝖉 𝖊 𝖋 𝖌 𝖍 𝖎 𝖏
|
||||
1d590 │ 𝖐 𝖑 𝖒 𝖓 𝖔 𝖕 𝖖 𝖗 𝖘 𝖙 𝖚 𝖛 𝖜 𝖝 𝖞 𝖟
|
||||
1d5a0 │ 𝖠 𝖡 𝖢 𝖣 𝖤 𝖥 𝖦 𝖧 𝖨 𝖩 𝖪 𝖫 𝖬 𝖭 𝖮 𝖯
|
||||
1d5b0 │ 𝖰 𝖱 𝖲 𝖳 𝖴 𝖵 𝖶 𝖷 𝖸 𝖹 𝖺 𝖻 𝖼 𝖽 𝖾 𝖿
|
||||
1d5c0 │ 𝗀 𝗁 𝗂 𝗃 𝗄 𝗅 𝗆 𝗇 𝗈 𝗉 𝗊 𝗋 𝗌 𝗍 𝗎 𝗏
|
||||
1d5d0 │ 𝗐 𝗑 𝗒 𝗓 𝗔 𝗕 𝗖 𝗗 𝗘 𝗙 𝗚 𝗛 𝗜 𝗝 𝗞 𝗟
|
||||
1d5e0 │ 𝗠 𝗡 𝗢 𝗣 𝗤 𝗥 𝗦 𝗧 𝗨 𝗩 𝗪 𝗫 𝗬 𝗭 𝗮 𝗯
|
||||
1d5f0 │ 𝗰 𝗱 𝗲 𝗳 𝗴 𝗵 𝗶 𝗷 𝗸 𝗹 𝗺 𝗻 𝗼 𝗽 𝗾 𝗿
|
||||
1d600 │ 𝘀 𝘁 𝘂 𝘃 𝘄 𝘅 𝘆 𝘇 𝘈 𝘉 𝘊 𝘋 𝘌 𝘍 𝘎 𝘏
|
||||
1d610 │ 𝘐 𝘑 𝘒 𝘓 𝘔 𝘕 𝘖 𝘗 𝘘 𝘙 𝘚 𝘛 𝘜 𝘝 𝘞 𝘟
|
||||
1d620 │ 𝘠 𝘡 𝘢 𝘣 𝘤 𝘥 𝘦 𝘧 𝘨 𝘩 𝘪 𝘫 𝘬 𝘭 𝘮 𝘯
|
||||
1d630 │ 𝘰 𝘱 𝘲 𝘳 𝘴 𝘵 𝘶 𝘷 𝘸 𝘹 𝘺 𝘻 𝘼 𝘽 𝘾 𝘿
|
||||
1d640 │ 𝙀 𝙁 𝙂 𝙃 𝙄 𝙅 𝙆 𝙇 𝙈 𝙉 𝙊 𝙋 𝙌 𝙍 𝙎 𝙏
|
||||
1d650 │ 𝙐 𝙑 𝙒 𝙓 𝙔 𝙕 𝙖 𝙗 𝙘 𝙙 𝙚 𝙛 𝙜 𝙝 𝙞 𝙟
|
||||
1d660 │ 𝙠 𝙡 𝙢 𝙣 𝙤 𝙥 𝙦 𝙧 𝙨 𝙩 𝙪 𝙫 𝙬 𝙭 𝙮 𝙯
|
||||
1d670 │ 𝙰 𝙱 𝙲 𝙳 𝙴 𝙵 𝙶 𝙷 𝙸 𝙹 𝙺 𝙻 𝙼 𝙽 𝙾 𝙿
|
||||
1d680 │ 𝚀 𝚁 𝚂 𝚃 𝚄 𝚅 𝚆 𝚇 𝚈 𝚉 𝚊 𝚋 𝚌 𝚍 𝚎 𝚏
|
||||
1d690 │ 𝚐 𝚑 𝚒 𝚓 𝚔 𝚕 𝚖 𝚗 𝚘 𝚙 𝚚 𝚛 𝚜 𝚝 𝚞 𝚟
|
||||
1d6a0 │ 𝚠 𝚡 𝚢 𝚣 𝚤 𝚥 𝚩 𝚪 𝚫 𝚬 𝚭 𝚮 𝚯
|
||||
1d6b0 │ 𝚰 𝚱 𝚲 𝚳 𝚴 𝚵 𝚶 𝚷 𝚸 𝚹 𝚺 𝚻 𝚼 𝚽 𝚾 𝚿
|
||||
1d6c0 │ 𝛀 𝛁 𝛂 𝛃 𝛄 𝛅 𝛆 𝛇 𝛈 𝛉 𝛊 𝛋 𝛌 𝛍 𝛎 𝛏
|
||||
1d6d0 │ 𝛐 𝛑 𝛒 𝛓 𝛔 𝛕 𝛖 𝛗 𝛘 𝛙 𝛚 𝛛 𝛜 𝛝 𝛞 𝛟
|
||||
1d6e0 │ 𝛠 𝛡 𝛢 𝛣 𝛤 𝛥 𝛦 𝛧 𝛨 𝛩 𝛪 𝛫 𝛬 𝛭 𝛮 𝛯
|
||||
1d6f0 │ 𝛰 𝛱 𝛲 𝛳 𝛴 𝛵 𝛶 𝛷 𝛸 𝛹 𝛺 𝛻 𝛼 𝛽 𝛾 𝛿
|
||||
1d700 │ 𝜀 𝜁 𝜂 𝜃 𝜄 𝜅 𝜆 𝜇 𝜈 𝜉 𝜊 𝜋 𝜌 𝜍 𝜎 𝜏
|
||||
1d710 │ 𝜐 𝜑 𝜒 𝜓 𝜔 𝜕 𝜖 𝜗 𝜘 𝜙 𝜚 𝜛 𝜜 𝜝 𝜞 𝜟
|
||||
1d720 │ 𝜠 𝜡 𝜢 𝜣 𝜤 𝜥 𝜦 𝜧 𝜨 𝜩 𝜪 𝜫 𝜬 𝜭 𝜮 𝜯
|
||||
1d730 │ 𝜰 𝜱 𝜲 𝜳 𝜴 𝜵 𝜶 𝜷 𝜸 𝜹 𝜺 𝜻 𝜼 𝜽 𝜾 𝜿
|
||||
1d740 │ 𝝀 𝝁 𝝂 𝝃 𝝄 𝝅 𝝆 𝝇 𝝈 𝝉 𝝊 𝝋 𝝌 𝝍 𝝎 𝝏
|
||||
1d750 │ 𝝐 𝝑 𝝒 𝝓 𝝔 𝝕 𝝖 𝝗 𝝘 𝝙 𝝚 𝝛 𝝜 𝝝 𝝞 𝝟
|
||||
1d760 │ 𝝠 𝝡 𝝢 𝝣 𝝤 𝝥 𝝦 𝝧 𝝨 𝝩 𝝪 𝝫 𝝬 𝝭 𝝮 𝝯
|
||||
1d770 │ 𝝰 𝝱 𝝲 𝝳 𝝴 𝝵 𝝶 𝝷 𝝸 𝝹 𝝺 𝝻 𝝼 𝝽 𝝾 𝝿
|
||||
1d780 │ 𝞀 𝞁 𝞂 𝞃 𝞄 𝞅 𝞆 𝞇 𝞈 𝞉 𝞊 𝞋 𝞌 𝞍 𝞎 𝞏
|
||||
1d790 │ 𝞐 𝞑 𝞒 𝞓 𝞔 𝞕 𝞖 𝞗 𝞘 𝞙 𝞚 𝞛 𝞜 𝞝 𝞞 𝞟
|
||||
1d7a0 │ 𝞠 𝞡 𝞢 𝞣 𝞤 𝞥 𝞦 𝞧 𝞨 𝞩 𝞪 𝞫 𝞬 𝞭 𝞮 𝞯
|
||||
1d7b0 │ 𝞰 𝞱 𝞲 𝞳 𝞴 𝞵 𝞶 𝞷 𝞸 𝞹 𝞺 𝞻 𝞼 𝞽 𝞾 𝞿
|
||||
1d7c0 │ 𝟀 𝟁 𝟂 𝟃 𝟄 𝟅 𝟆 𝟇 𝟈 𝟉 𝟊 𝟎 𝟏
|
||||
1d7d0 │ 𝟐 𝟑 𝟒 𝟓 𝟔 𝟕 𝟖 𝟗 𝟘 𝟙 𝟚 𝟛 𝟜 𝟝 𝟞 𝟟
|
||||
1d7e0 │ 𝟠 𝟡 𝟢 𝟣 𝟤 𝟥 𝟦 𝟧 𝟨 𝟩 𝟪 𝟫 𝟬 𝟭 𝟮 𝟯
|
||||
1d7f0 │ 𝟰 𝟱 𝟲 𝟳 𝟴 𝟵 𝟶 𝟷 𝟸 𝟹 𝟺 𝟻 𝟼 𝟽 𝟾 𝟿
|
||||
|
||||
Mahjong Tiles
|
||||
═══════════════════════════════════════════════════════
|
||||
1f000 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1f000 │ 🀀 🀁 🀂 🀃 🀄 🀅 🀆 🀇 🀈 🀉 🀊 🀋 🀌 🀍 🀎 🀏
|
||||
1f010 │ 🀐 🀑 🀒 🀓 🀔 🀕 🀖 🀗 🀘 🀙 🀚 🀛 🀜 🀝 🀞 🀟
|
||||
1f020 │ 🀠 🀡 🀢 🀣 🀤 🀥 🀦 🀧 🀨 🀩 🀪 🀫
|
||||
|
||||
Domino Tiles
|
||||
═══════════════════════════════════════════════════════
|
||||
1f030 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1f030 │ 🀰 🀱 🀲 🀳 🀴 🀵 🀶 🀷 🀸 🀹 🀺 🀻 🀼 🀽 🀾 🀿
|
||||
1f040 │ 🁀 🁁 🁂 🁃 🁄 🁅 🁆 🁇 🁈 🁉 🁊 🁋 🁌 🁍 🁎 🁏
|
||||
1f050 │ 🁐 🁑 🁒 🁓 🁔 🁕 🁖 🁗 🁘 🁙 🁚 🁛 🁜 🁝 🁞 🁟
|
||||
1f060 │ 🁠 🁡 🁢 🁣 🁤 🁥 🁦 🁧 🁨 🁩 🁪 🁫 🁬 🁭 🁮 🁯
|
||||
1f070 │ 🁰 🁱 🁲 🁳 🁴 🁵 🁶 🁷 🁸 🁹 🁺 🁻 🁼 🁽 🁾 🁿
|
||||
1f080 │ 🂀 🂁 🂂 🂃 🂄 🂅 🂆 🂇 🂈 🂉 🂊 🂋 🂌 🂍 🂎 🂏
|
||||
1f090 │ 🂐 🂑 🂒 🂓
|
||||
|
||||
Playing Cards
|
||||
═══════════════════════════════════════════════════════
|
||||
1f0a0 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1f0a0 │ 🂠 🂡 🂢 🂣 🂤 🂥 🂦 🂧 🂨 🂩 🂪 🂫 🂬 🂭 🂮
|
||||
1f0b0 │ 🂱 🂲 🂳 🂴 🂵 🂶 🂷 🂸 🂹 🂺 🂻 🂼 🂽 🂾
|
||||
1f0c0 │ 🃁 🃂 🃃 🃄 🃅 🃆 🃇 🃈 🃉 🃊 🃋 🃌 🃍 🃎 🃏
|
||||
1f0d0 │ 🃑 🃒 🃓 🃔 🃕 🃖 🃗 🃘 🃙 🃚 🃛 🃜 🃝 🃞 🃟
|
||||
|
||||
Enclosed Alphanumeric Supplement
|
||||
═══════════════════════════════════════════════════════
|
||||
1f100 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1f100 │ 🄀 🄁 🄂 🄃 🄄 🄅 🄆 🄇 🄈 🄉 🄊
|
||||
1f110 │ 🄐 🄑 🄒 🄓 🄔 🄕 🄖 🄗 🄘 🄙 🄚 🄛 🄜 🄝 🄞 🄟
|
||||
1f120 │ 🄠 🄡 🄢 🄣 🄤 🄥 🄦 🄧 🄨 🄩 🄪 🄫 🄬 🄭 🄮 🄯
|
||||
1f130 │ 🄰 🄱 🄲 🄳 🄴 🄵 🄶 🄷 🄸 🄹 🄺 🄻 🄼 🄽 🄾 🄿
|
||||
1f140 │ 🅀 🅁 🅂 🅃 🅄 🅅 🅆 🅇 🅈 🅉 🅊 🅋 🅌 🅍 🅎 🅏
|
||||
1f150 │ 🅐 🅑 🅒 🅓 🅔 🅕 🅖 🅗 🅘 🅙 🅚 🅛 🅜 🅝 🅞 🅟
|
||||
1f160 │ 🅠 🅡 🅢 🅣 🅤 🅥 🅦 🅧 🅨 🅩
|
||||
1f170 │ 🅰 🅱 🅲 🅳 🅴 🅵 🅶 🅷 🅸 🅹 🅺 🅻 🅼 🅽 🅾 🅿
|
||||
1f180 │ 🆀 🆁 🆂 🆃 🆄 🆅 🆆 🆇 🆈 🆉 🆊 🆋 🆌 🆍 🆎 🆏
|
||||
1f190 │ 🆐 🆑 🆒 🆓 🆔 🆕 🆖 🆗 🆘 🆙 🆚
|
||||
1f1e0 │ 🇦 🇧 🇨 🇩 🇪 🇫 🇬 🇭 🇮 🇯
|
||||
1f1f0 │ 🇰 🇱 🇲 🇳 🇴 🇵 🇶 🇷 🇸 🇹 🇺 🇻 🇼 🇽 🇾 🇿
|
||||
|
||||
Enclosed Ideographic Supplement
|
||||
═══════════════════════════════════════════════════════
|
||||
1f200 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1f200 │ 🈀 🈁 🈂
|
||||
1f210 │ 🈐 🈑 🈒 🈓 🈔 🈕 🈖 🈗 🈘 🈙 🈚 🈛 🈜 🈝 🈞 🈟
|
||||
1f220 │ 🈠 🈡 🈢 🈣 🈤 🈥 🈦 🈧 🈨 🈩 🈪 🈫 🈬 🈭 🈮 🈯
|
||||
1f230 │ 🈰 🈱 🈲 🈳 🈴 🈵 🈶 🈷 🈸 🈹 🈺
|
||||
1f240 │ 🉀 🉁 🉂 🉃 🉄 🉅 🉆 🉇 🉈
|
||||
1f250 │ 🉐 🉑
|
||||
|
||||
Miscellaneous Symbols and Pictographs
|
||||
═══════════════════════════════════════════════════════
|
||||
1f300 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1f300 │ 🌀 🌁 🌂 🌃 🌄 🌅 🌆 🌇 🌈 🌉 🌊 🌋 🌌 🌍 🌎 🌏
|
||||
1f310 │ 🌐 🌑 🌒 🌓 🌔 🌕 🌖 🌗 🌘 🌙 🌚 🌛 🌜 🌝 🌞 🌟
|
||||
1f320 │ 🌠 🌡 🌢 🌣 🌤 🌥 🌦 🌧 🌨 🌩 🌪 🌫 🌬 🌭 🌮 🌯
|
||||
1f330 │ 🌰 🌱 🌲 🌳 🌴 🌵 🌶 🌷 🌸 🌹 🌺 🌻 🌼 🌽 🌾 🌿
|
||||
1f340 │ 🍀 🍁 🍂 🍃 🍄 🍅 🍆 🍇 🍈 🍉 🍊 🍋 🍌 🍍 🍎 🍏
|
||||
1f350 │ 🍐 🍑 🍒 🍓 🍔 🍕 🍖 🍗 🍘 🍙 🍚 🍛 🍜 🍝 🍞 🍟
|
||||
1f360 │ 🍠 🍡 🍢 🍣 🍤 🍥 🍦 🍧 🍨 🍩 🍪 🍫 🍬 🍭 🍮 🍯
|
||||
1f370 │ 🍰 🍱 🍲 🍳 🍴 🍵 🍶 🍷 🍸 🍹 🍺 🍻 🍼 🍽 🍾 🍿
|
||||
1f380 │ 🎀 🎁 🎂 🎃 🎄 🎅 🎆 🎇 🎈 🎉 🎊 🎋 🎌 🎍 🎎 🎏
|
||||
1f390 │ 🎐 🎑 🎒 🎓 🎔 🎕 🎖 🎗 🎘 🎙 🎚 🎛 🎜 🎝 🎞 🎟
|
||||
1f3a0 │ 🎠 🎡 🎢 🎣 🎤 🎥 🎦 🎧 🎨 🎩 🎪 🎫 🎬 🎭 🎮 🎯
|
||||
1f3b0 │ 🎰 🎱 🎲 🎳 🎴 🎵 🎶 🎷 🎸 🎹 🎺 🎻 🎼 🎽 🎾 🎿
|
||||
1f3c0 │ 🏀 🏁 🏂 🏃 🏄 🏅 🏆 🏇 🏈 🏉 🏊 🏋 🏌 🏍 🏎 🏏
|
||||
1f3d0 │ 🏐 🏑 🏒 🏓 🏔 🏕 🏖 🏗 🏘 🏙 🏚 🏛 🏜 🏝 🏞 🏟
|
||||
1f3e0 │ 🏠 🏡 🏢 🏣 🏤 🏥 🏦 🏧 🏨 🏩 🏪 🏫 🏬 🏭 🏮 🏯
|
||||
1f3f0 │ 🏰 🏱 🏲 🏳 🏴 🏵 🏶 🏷 🏸 🏹 🏺 🏻 🏼 🏽 🏾 🏿
|
||||
1f400 │ 🐀 🐁 🐂 🐃 🐄 🐅 🐆 🐇 🐈 🐉 🐊 🐋 🐌 🐍 🐎 🐏
|
||||
1f410 │ 🐐 🐑 🐒 🐓 🐔 🐕 🐖 🐗 🐘 🐙 🐚 🐛 🐜 🐝 🐞 🐟
|
||||
1f420 │ 🐠 🐡 🐢 🐣 🐤 🐥 🐦 🐧 🐨 🐩 🐪 🐫 🐬 🐭 🐮 🐯
|
||||
1f430 │ 🐰 🐱 🐲 🐳 🐴 🐵 🐶 🐷 🐸 🐹 🐺 🐻 🐼 🐽 🐾 🐿
|
||||
1f440 │ 👀 👁 👂 👃 👄 👅 👆 👇 👈 👉 👊 👋 👌 👍 👎 👏
|
||||
1f450 │ 👐 👑 👒 👓 👔 👕 👖 👗 👘 👙 👚 👛 👜 👝 👞 👟
|
||||
1f460 │ 👠 👡 👢 👣 👤 👥 👦 👧 👨 👩 👪 👫 👬 👭 👮 👯
|
||||
1f470 │ 👰 👱 👲 👳 👴 👵 👶 👷 👸 👹 👺 👻 👼 👽 👾 👿
|
||||
1f480 │ 💀 💁 💂 💃 💄 💅 💆 💇 💈 💉 💊 💋 💌 💍 💎 💏
|
||||
1f490 │ 💐 💑 💒 💓 💔 💕 💖 💗 💘 💙 💚 💛 💜 💝 💞 💟
|
||||
1f4a0 │ 💠 💡 💢 💣 💤 💥 💦 💧 💨 💩 💪 💫 💬 💭 💮 💯
|
||||
1f4b0 │ 💰 💱 💲 💳 💴 💵 💶 💷 💸 💹 💺 💻 💼 💽 💾 💿
|
||||
1f4c0 │ 📀 📁 📂 📃 📄 📅 📆 📇 📈 📉 📊 📋 📌 📍 📎 📏
|
||||
1f4d0 │ 📐 📑 📒 📓 📔 📕 📖 📗 📘 📙 📚 📛 📜 📝 📞 📟
|
||||
1f4e0 │ 📠 📡 📢 📣 📤 📥 📦 📧 📨 📩 📪 📫 📬 📭 📮 📯
|
||||
1f4f0 │ 📰 📱 📲 📳 📴 📵 📶 📷 📸 📹 📺 📻 📼 📽 📾 📿
|
||||
1f500 │ 🔀 🔁 🔂 🔃 🔄 🔅 🔆 🔇 🔈 🔉 🔊 🔋 🔌 🔍 🔎 🔏
|
||||
1f510 │ 🔐 🔑 🔒 🔓 🔔 🔕 🔖 🔗 🔘 🔙 🔚 🔛 🔜 🔝 🔞 🔟
|
||||
1f520 │ 🔠 🔡 🔢 🔣 🔤 🔥 🔦 🔧 🔨 🔩 🔪 🔫 🔬 🔭 🔮 🔯
|
||||
1f530 │ 🔰 🔱 🔲 🔳 🔴 🔵 🔶 🔷 🔸 🔹 🔺 🔻 🔼 🔽 🔾 🔿
|
||||
1f540 │ 🕀 🕁 🕂 🕃 🕄 🕅 🕆 🕇 🕈 🕉 🕊 🕋 🕌 🕍 🕎 🕏
|
||||
1f550 │ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 🕟
|
||||
1f560 │ 🕠 🕡 🕢 🕣 🕤 🕥 🕦 🕧 🕨 🕩 🕪 🕫 🕬 🕭 🕮 🕯
|
||||
1f570 │ 🕰 🕱 🕲 🕳 🕴 🕵 🕶 🕷 🕸 🕹 🕺 🕻 🕼 🕽 🕾 🕿
|
||||
1f580 │ 🖀 🖁 🖂 🖃 🖄 🖅 🖆 🖇 🖈 🖉 🖊 🖋 🖌 🖍 🖎 🖏
|
||||
1f590 │ 🖐 🖑 🖒 🖓 🖔 🖕 🖖 🖗 🖘 🖙 🖚 🖛 🖜 🖝 🖞 🖟
|
||||
1f5a0 │ 🖠 🖡 🖢 🖣 🖤 🖥 🖦 🖧 🖨 🖩 🖪 🖫 🖬 🖭 🖮 🖯
|
||||
1f5b0 │ 🖰 🖱 🖲 🖳 🖴 🖵 🖶 🖷 🖸 🖹 🖺 🖻 🖼 🖽 🖾 🖿
|
||||
1f5c0 │ 🗀 🗁 🗂 🗃 🗄 🗅 🗆 🗇 🗈 🗉 🗊 🗋 🗌 🗍 🗎 🗏
|
||||
1f5d0 │ 🗐 🗑 🗒 🗓 🗔 🗕 🗖 🗗 🗘 🗙 🗚 🗛 🗜 🗝 🗞 🗟
|
||||
1f5e0 │ 🗠 🗡 🗢 🗣 🗤 🗥 🗦 🗧 🗨 🗩 🗪 🗫 🗬 🗭 🗮 🗯
|
||||
1f5f0 │ 🗰 🗱 🗲 🗳 🗴 🗵 🗶 🗷 🗸 🗹 🗺 🗻 🗼 🗽 🗾 🗿
|
||||
|
||||
Emoticons
|
||||
═══════════════════════════════════════════════════════
|
||||
1f600 │ 0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
───────────────────────────────────────────────────────
|
||||
1f600 │ 😀 😁 😂 😃 😄 😅 😆 😇 😈 😉 😊 😋 😌 😍 😎 😏
|
||||
1f610 │ 😐 😑 😒 😓 😔 😕 😖 😗 😘 😙 😚 😛 😜 😝 😞 😟
|
||||
1f620 │ 😠 😡 😢 😣 😤 😥 😦 😧 😨 😩 😪 😫 😬 😭 😮 😯
|
||||
1f630 │ 😰 😱 😲 😳 😴 😵 😶 😷 😸 😹 😺 😻 😼 😽 😾 😿
|
||||
1f640 │ 🙀 🙁 🙂 🙃 🙄 🙅 🙆 🙇 🙈 🙉 🙊 🙋 🙌 🙍 🙎 🙏
|
|
@ -41,7 +41,7 @@ static const int16_t kDel16[8] = {127, 127, 127, 127, 127, 127, 127, 127};
|
|||
* @param n if -1 implies strlen
|
||||
* @param z if non-NULL receives output length
|
||||
*/
|
||||
char *utf16toutf8(const char16_t *p, size_t n, size_t *z) {
|
||||
char *utf16to8(const char16_t *p, size_t n, size_t *z) {
|
||||
char *r, *q;
|
||||
wint_t x, y;
|
||||
unsigned m, j, w;
|
|
@ -1,7 +1,7 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
|
@ -17,37 +17,35 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/runtime/gc.internal.h"
|
||||
#include "libc/testlib/ezbench.h"
|
||||
#include "libc/testlib/hyperion.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/str/tpenc.h"
|
||||
#include "libc/x/x.h"
|
||||
|
||||
TEST(utf8toutf32, test) {
|
||||
EXPECT_STREQ(L"", gc(utf8toutf32(0, 0, 0)));
|
||||
EXPECT_STREQ(L"", gc(utf8toutf32("", -1, 0)));
|
||||
EXPECT_STREQ(L"hello", gc(utf8toutf32("hello", -1, 0)));
|
||||
}
|
||||
|
||||
TEST(utf8toutf32, testLargeAscii) {
|
||||
EXPECT_STREQ(L"hellohellohelloz", gc(utf8toutf32("hellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ(L"hellohellohellozhellohellohelloz",
|
||||
gc(utf8toutf32("hellohellohellozhellohellohelloz", -1, 0)));
|
||||
}
|
||||
|
||||
TEST(utf8toutf32, testLargeThompsonPikeEncoded) {
|
||||
EXPECT_STREQ(L"hellohellohello𝑧hellohellohelloz",
|
||||
gc(utf8toutf32("hellohellohello𝑧hellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ(L"hellohellohelloh𝑧ellohellohelloz",
|
||||
gc(utf8toutf32("hellohellohelloh𝑧ellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ(
|
||||
L"𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑧",
|
||||
gc(utf8toutf32(
|
||||
"𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑧",
|
||||
-1, 0)));
|
||||
}
|
||||
|
||||
BENCH(utf8toutf32, bench) {
|
||||
EZBENCH2("utf8toutf32", donothing,
|
||||
free(utf8toutf32(kHyperion, kHyperionSize, 0)));
|
||||
/**
|
||||
* Transcodes UTF-32 to UTF-8.
|
||||
*
|
||||
* @param p is input value
|
||||
* @param n if -1 implies wcslen
|
||||
* @param z if non-NULL receives output length
|
||||
*/
|
||||
char *utf32to8(const wchar_t *p, size_t n, size_t *z) {
|
||||
size_t i;
|
||||
wint_t x;
|
||||
uint64_t w;
|
||||
char *r, *q;
|
||||
if (z) *z = 0;
|
||||
if (n == -1) n = p ? wcslen(p) : 0;
|
||||
if ((q = r = malloc(n * 6 + 1))) {
|
||||
for (i = 0; i < n; ++i) {
|
||||
x = p[i];
|
||||
w = tpenc(x);
|
||||
do {
|
||||
*q++ = w;
|
||||
} while ((w >>= 8));
|
||||
}
|
||||
if (z) *z = q - r;
|
||||
*q++ = '\0';
|
||||
if ((q = realloc(r, q - r))) r = q;
|
||||
}
|
||||
return r;
|
||||
}
|
|
@ -29,7 +29,7 @@
|
|||
* @param n if -1 implies strlen
|
||||
* @param z if non-NULL receives output length
|
||||
*/
|
||||
char16_t *utf8toutf16(const char *p, size_t n, size_t *z) {
|
||||
char16_t *utf8to16(const char *p, size_t n, size_t *z) {
|
||||
size_t i;
|
||||
wint_t x, a, b;
|
||||
char16_t *r, *q;
|
|
@ -16,6 +16,7 @@
|
|||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/intrin/likely.h"
|
||||
#include "libc/intrin/pcmpgtb.h"
|
||||
#include "libc/intrin/pmovmskb.h"
|
||||
#include "libc/intrin/punpckhbw.h"
|
||||
|
@ -35,7 +36,8 @@
|
|||
* @param n if -1 implies strlen
|
||||
* @param z if non-NULL receives output length
|
||||
*/
|
||||
wchar_t *utf8toutf32(const char *p, size_t n, size_t *z) {
|
||||
wchar_t *utf8to32(const char *p, size_t n, size_t *z) {
|
||||
int e;
|
||||
size_t i;
|
||||
unsigned m, j;
|
||||
wint_t x, a, b;
|
||||
|
@ -45,7 +47,8 @@ wchar_t *utf8toutf32(const char *p, size_t n, size_t *z) {
|
|||
if (n == -1) n = p ? strlen(p) : 0;
|
||||
if ((q = r = malloc(n * sizeof(wchar_t) + sizeof(wchar_t)))) {
|
||||
for (i = 0; i < n;) {
|
||||
if (i + 16 < n) { /* 10x speedup for ascii */
|
||||
if (!((uintptr_t)(p + i) & 15) && i + 16 < n) {
|
||||
/* 10x speedup for ascii */
|
||||
bzero(vz, 16);
|
||||
do {
|
||||
memcpy(v1, p + i, 16);
|
|
@ -52,10 +52,11 @@ char *xstrmul(const char *, size_t) paramsnonnull((1)) _XMAL;
|
|||
char *xinet_ntop(int, const void *) _XPNN _XMAL;
|
||||
void *xunbinga(size_t, const char16_t *) attributeallocalign((1)) _XMAL _XRET;
|
||||
void *xunbing(const char16_t *) _XMAL _XRET;
|
||||
char16_t *utf8toutf16(const char *, size_t, size_t *) dontdiscard;
|
||||
char *utf16toutf8(const char16_t *, size_t, size_t *) dontdiscard;
|
||||
wchar_t *utf8toutf32(const char *, size_t, size_t *) dontdiscard;
|
||||
char16_t *utf8to16(const char *, size_t, size_t *) dontdiscard;
|
||||
char *utf16to8(const char16_t *, size_t, size_t *) dontdiscard;
|
||||
wchar_t *utf8to32(const char *, size_t, size_t *) dontdiscard;
|
||||
wchar_t *utf16to32(const char16_t *, size_t, size_t *) dontdiscard;
|
||||
char *utf32to8(const wchar_t *, size_t, size_t *) dontdiscard;
|
||||
char *xhomedir(void) dontdiscard;
|
||||
char *xstripext(const char *) dontdiscard;
|
||||
char *xstripexts(const char *) dontdiscard;
|
||||
|
|
|
@ -16,9 +16,9 @@
|
|||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/intrin/bits.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/fmt/fmt.h"
|
||||
#include "libc/intrin/bits.h"
|
||||
#include "libc/limits.h"
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
|
@ -87,7 +87,7 @@ TEST(sscanf, testStringBuffer_gothicUtf8ToUtf8_roundTrips) {
|
|||
EXPECT_STREQ("𐌴𐌵𐌶𐌷", s2);
|
||||
}
|
||||
|
||||
TEST(sscanf, testStringBuffer_gothicUtf8ToUtf16) {
|
||||
TEST(sscanf, testStringBuffer_gothicUtf8to16) {
|
||||
char16_t s1[64], s2[64];
|
||||
ASSERT_EQ(2, sscanf("𐌰𐌱𐌲𐌳 𐌴𐌵𐌶𐌷", "%63hs %63hs", s1, s2));
|
||||
EXPECT_STREQ(u"𐌰𐌱𐌲𐌳", s1);
|
||||
|
|
|
@ -32,7 +32,7 @@ TEST(strsak32, test) {
|
|||
|
||||
BENCH(strsak32, bench) {
|
||||
size_t wcslen_(const wchar_t *) asm("wcslen");
|
||||
wchar_t *p = gc(utf8toutf32(kHyperion, kHyperionSize, 0));
|
||||
wchar_t *p = gc(utf8to32(kHyperion, kHyperionSize, 0));
|
||||
EZBENCH_N("wcslen", kHyperionSize, wcslen_(p));
|
||||
for (int i = 128; i >= 2; i /= 2) {
|
||||
p[i - 0] = 0;
|
||||
|
|
|
@ -167,6 +167,22 @@ TEST(rawmemchr, fuzz) {
|
|||
free(p);
|
||||
}
|
||||
|
||||
/*
|
||||
* strchr 0 l: 10c 3ns m: 38c 12ns
|
||||
* strchr 5 l: 13c 4ns m: 42c 14ns
|
||||
* strchr 8 l: 14c 5ns m: 44c 14ns
|
||||
* strchr 17 l: 13c 4ns m: 45c 15ns
|
||||
* strchr 34 l: 16c 5ns m: 48c 16ns
|
||||
* strchr z l: 369c 119ns m: 408c 132ns
|
||||
* rawmemchr z l: 236c 76ns m: 391c 126ns
|
||||
* memchr z l: 357c 115ns m: 423c 137ns
|
||||
* strchr Z l: 1,872c 605ns m: 1,911c 617ns
|
||||
* rawmemchr \0 l: 1,184c 382ns m: 1,880c 607ns
|
||||
* strlen l: 1,174c 379ns m: 1,237c 400ns
|
||||
* memchr Z l: 1,866c 603ns m: 1,945c 628ns
|
||||
* strchrnul z l: 365c 118ns m: 408c 132ns
|
||||
* strchrnul Z l: 1,871c 604ns m: 1,914c 618ns
|
||||
*/
|
||||
BENCH(strchr, bench2) {
|
||||
char *strchr_(const char *, int) asm("strchr");
|
||||
char *strchrnul_(const char *, int) asm("strchrnul");
|
||||
|
|
|
@ -51,6 +51,6 @@ TEST(utf16to32, testAstralPlanesGothic) {
|
|||
BENCH(utf16to8, bench) {
|
||||
size_t n;
|
||||
char16_t *h;
|
||||
h = gc(utf8toutf16(kHyperion, kHyperionSize, &n));
|
||||
EZBENCH2("utf16toutf8", donothing, free(utf16to32(h, n, 0)));
|
||||
h = gc(utf8to16(kHyperion, kHyperionSize, &n));
|
||||
EZBENCH2("utf16to32", donothing, free(utf16to32(h, n, 0)));
|
||||
}
|
||||
|
|
|
@ -23,21 +23,21 @@
|
|||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/x/x.h"
|
||||
|
||||
TEST(utf16toutf8, test) {
|
||||
EXPECT_STREQ("hello☻♥", gc(utf16toutf8(u"hello☻♥", -1, 0)));
|
||||
EXPECT_STREQ("hello☻♥hello☻♥h", gc(utf16toutf8(u"hello☻♥hello☻♥h", -1, 0)));
|
||||
EXPECT_STREQ("hello☻♥hello☻♥hi", gc(utf16toutf8(u"hello☻♥hello☻♥hi", -1, 0)));
|
||||
TEST(utf16to8, test) {
|
||||
EXPECT_STREQ("hello☻♥", gc(utf16to8(u"hello☻♥", -1, 0)));
|
||||
EXPECT_STREQ("hello☻♥hello☻♥h", gc(utf16to8(u"hello☻♥hello☻♥h", -1, 0)));
|
||||
EXPECT_STREQ("hello☻♥hello☻♥hi", gc(utf16to8(u"hello☻♥hello☻♥hi", -1, 0)));
|
||||
EXPECT_STREQ("hello☻♥hello☻♥hello☻♥hello☻♥hello☻♥",
|
||||
gc(utf16toutf8(u"hello☻♥hello☻♥hello☻♥hello☻♥hello☻♥", -1, 0)));
|
||||
EXPECT_STREQ("hello--hello--h", gc(utf16toutf8(u"hello--hello--h", -1, 0)));
|
||||
EXPECT_STREQ("hello--hello--hi", gc(utf16toutf8(u"hello--hello--hi", -1, 0)));
|
||||
gc(utf16to8(u"hello☻♥hello☻♥hello☻♥hello☻♥hello☻♥", -1, 0)));
|
||||
EXPECT_STREQ("hello--hello--h", gc(utf16to8(u"hello--hello--h", -1, 0)));
|
||||
EXPECT_STREQ("hello--hello--hi", gc(utf16to8(u"hello--hello--hi", -1, 0)));
|
||||
EXPECT_STREQ("hello--hello--hello--hello--hello--",
|
||||
gc(utf16toutf8(u"hello--hello--hello--hello--hello--", -1, 0)));
|
||||
gc(utf16to8(u"hello--hello--hello--hello--hello--", -1, 0)));
|
||||
}
|
||||
|
||||
BENCH(utf16toutf8, bench) {
|
||||
BENCH(utf16to8, bench) {
|
||||
size_t n;
|
||||
char16_t *h;
|
||||
h = gc(utf8toutf16(kHyperion, kHyperionSize, &n));
|
||||
EZBENCH2("utf16toutf8", donothing, free(utf16toutf8(h, n, 0)));
|
||||
h = gc(utf8to16(kHyperion, kHyperionSize, &n));
|
||||
EZBENCH2("utf16to8", donothing, free(utf16to8(h, n, 0)));
|
||||
}
|
|
@ -23,19 +23,18 @@
|
|||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/x/x.h"
|
||||
|
||||
TEST(utf8toutf16, test) {
|
||||
EXPECT_STREQ(u"hello☻♥", gc(utf8toutf16("hello☻♥", -1, 0)));
|
||||
EXPECT_STREQ(u"hello☻♥hello☻♥h", gc(utf8toutf16("hello☻♥hello☻♥h", -1, 0)));
|
||||
EXPECT_STREQ(u"hello☻♥hello☻♥hi", gc(utf8toutf16("hello☻♥hello☻♥hi", -1, 0)));
|
||||
TEST(utf8to16, test) {
|
||||
EXPECT_STREQ(u"hello☻♥", gc(utf8to16("hello☻♥", -1, 0)));
|
||||
EXPECT_STREQ(u"hello☻♥hello☻♥h", gc(utf8to16("hello☻♥hello☻♥h", -1, 0)));
|
||||
EXPECT_STREQ(u"hello☻♥hello☻♥hi", gc(utf8to16("hello☻♥hello☻♥hi", -1, 0)));
|
||||
EXPECT_STREQ(u"hello☻♥hello☻♥hello☻♥hello☻♥hello☻♥",
|
||||
gc(utf8toutf16("hello☻♥hello☻♥hello☻♥hello☻♥hello☻♥", -1, 0)));
|
||||
EXPECT_STREQ(u"hello--hello--h", gc(utf8toutf16("hello--hello--h", -1, 0)));
|
||||
EXPECT_STREQ(u"hello--hello--hi", gc(utf8toutf16("hello--hello--hi", -1, 0)));
|
||||
gc(utf8to16("hello☻♥hello☻♥hello☻♥hello☻♥hello☻♥", -1, 0)));
|
||||
EXPECT_STREQ(u"hello--hello--h", gc(utf8to16("hello--hello--h", -1, 0)));
|
||||
EXPECT_STREQ(u"hello--hello--hi", gc(utf8to16("hello--hello--hi", -1, 0)));
|
||||
EXPECT_STREQ(u"hello--hello--hello--hello--hello--",
|
||||
gc(utf8toutf16("hello--hello--hello--hello--hello--", -1, 0)));
|
||||
gc(utf8to16("hello--hello--hello--hello--hello--", -1, 0)));
|
||||
}
|
||||
|
||||
BENCH(utf8toutf16, bench) {
|
||||
EZBENCH2("utf8toutf16", donothing,
|
||||
free(utf8toutf16(kHyperion, kHyperionSize, 0)));
|
||||
BENCH(utf8to16, bench) {
|
||||
EZBENCH2("utf8to16", donothing, free(utf8to16(kHyperion, kHyperionSize, 0)));
|
||||
}
|
107
test/libc/x/utf8to32_test.c
Normal file
107
test/libc/x/utf8to32_test.c
Normal file
|
@ -0,0 +1,107 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/mem/mem.h"
|
||||
#include "libc/mem/shuffle.internal.h"
|
||||
#include "libc/runtime/gc.internal.h"
|
||||
#include "libc/stdio/rand.h"
|
||||
#include "libc/testlib/ezbench.h"
|
||||
#include "libc/testlib/hyperion.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "libc/testlib/viewables.h"
|
||||
#include "libc/x/x.h"
|
||||
|
||||
TEST(utf8to32, test) {
|
||||
EXPECT_STREQ(L"", gc(utf8to32(0, 0, 0)));
|
||||
EXPECT_STREQ(L"", gc(utf8to32("", -1, 0)));
|
||||
EXPECT_STREQ(L"hello", gc(utf8to32("hello", -1, 0)));
|
||||
}
|
||||
|
||||
TEST(utf8to32, poke) {
|
||||
wchar_t *p = gc(utf8to32("hi", 2, 0));
|
||||
ASSERT_EQ('h', p[0]);
|
||||
ASSERT_EQ('i', p[1]);
|
||||
ASSERT_EQ(0, p[2]);
|
||||
}
|
||||
|
||||
TEST(utf32to8, poke) {
|
||||
char *p = gc(utf32to8(L"hi", 2, 0));
|
||||
ASSERT_EQ('h', p[0]);
|
||||
ASSERT_EQ('i', p[1]);
|
||||
ASSERT_EQ(0, p[2]);
|
||||
}
|
||||
|
||||
TEST(utf8to32, testLargeAscii) {
|
||||
EXPECT_STREQ(L"hellohellohelloz", gc(utf8to32("hellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ(L"hellohellohellozhellohellohelloz",
|
||||
gc(utf8to32("hellohellohellozhellohellohelloz", -1, 0)));
|
||||
}
|
||||
|
||||
TEST(utf32to8, testLargeAscii) {
|
||||
EXPECT_STREQ("hellohellohelloz", gc(utf32to8(L"hellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ("hellohellohellozhellohellohelloz",
|
||||
gc(utf32to8(L"hellohellohellozhellohellohelloz", -1, 0)));
|
||||
}
|
||||
|
||||
TEST(utf8to32, testLargeThompsonPikeEncoded) {
|
||||
EXPECT_STREQ(L"hellohellohello𝑧hellohellohelloz",
|
||||
gc(utf8to32("hellohellohello𝑧hellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ(L"hellohellohelloh𝑧ellohellohelloz",
|
||||
gc(utf8to32("hellohellohelloh𝑧ellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ(
|
||||
L"𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑧",
|
||||
gc(utf8to32(
|
||||
"𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑧",
|
||||
-1, 0)));
|
||||
}
|
||||
|
||||
TEST(utf32to8, testLargeThompsonPikeEncoded) {
|
||||
EXPECT_STREQ("hellohellohello𝑧hellohellohelloz",
|
||||
gc(utf32to8(L"hellohellohello𝑧hellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ("hellohellohelloh𝑧ellohellohelloz",
|
||||
gc(utf32to8(L"hellohellohelloh𝑧ellohellohelloz", -1, 0)));
|
||||
EXPECT_STREQ(
|
||||
"𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑧",
|
||||
gc(utf32to8(
|
||||
L"𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑒𝑙𝑙𝑜𝑧",
|
||||
-1, 0)));
|
||||
}
|
||||
|
||||
char *GenerateBranchyUtf8Text(size_t *out_n) {
|
||||
char *p;
|
||||
size_t n;
|
||||
wchar_t *q = gc(utf8to32(kViewables, kViewablesSize, &n));
|
||||
shuffle(lemur64, q, n);
|
||||
p = utf32to8(q, n, &n);
|
||||
if (out_n) *out_n = n;
|
||||
return p;
|
||||
}
|
||||
|
||||
/*
|
||||
* utf8to32 l: 5,806c 1,875ns m: 5,863c 1,894ns
|
||||
* utf32to8 l: 104,671c 33,808ns m: 103,803c 33,528ns
|
||||
* utf8to32 [branchy] l: 746,846c 241,227ns m: 747,312c 241,377ns
|
||||
*/
|
||||
BENCH(utf8to32, bench) {
|
||||
EZBENCH2("utf8to32", donothing, free(utf8to32(kHyperion, kHyperionSize, 0)));
|
||||
size_t n;
|
||||
wchar_t *h = gc(utf8to32(kHyperion, kHyperionSize, &n));
|
||||
EZBENCH2("utf32to8", donothing, free(utf32to8(h, n, 0)));
|
||||
char *p = gc(GenerateBranchyUtf8Text(&n));
|
||||
EZBENCH2("utf8to32 [branchy]", donothing, free(utf8to32(p, n, 0)));
|
||||
}
|
2
third_party/python/Modules/getpath.c
vendored
2
third_party/python/Modules/getpath.c
vendored
|
@ -664,7 +664,7 @@ Py_GetProgramFullPath(void)
|
|||
{
|
||||
static bool once;
|
||||
if (_cmpxchg(&once, false, true)) {
|
||||
progpath = utf8toutf32(GetProgramExecutableName(), -1, 0);
|
||||
progpath = utf8to32(GetProgramExecutableName(), -1, 0);
|
||||
__cxa_atexit(free, progpath, 0);
|
||||
}
|
||||
return progpath;
|
||||
|
|
8
third_party/python/Modules/posixmodule.c
vendored
8
third_party/python/Modules/posixmodule.c
vendored
|
@ -3399,7 +3399,7 @@ os__getfinalpathname_impl(PyObject *module, PyObject *path)
|
|||
int result_length;
|
||||
PyObject *result;
|
||||
if (!(path_utf8 = PyUnicode_AsUTF8String(path))) return 0;
|
||||
path_utf16 = gc(utf8toutf16(PyBytes_AS_STRING(path_utf8), PyBytes_GET_SIZE(path_utf8), 0));
|
||||
path_utf16 = gc(utf8to16(PyBytes_AS_STRING(path_utf8), PyBytes_GET_SIZE(path_utf8), 0));
|
||||
Py_DECREF(path_utf8);
|
||||
if (!path_utf16) return PyErr_NoMemory();
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
|
@ -3439,7 +3439,7 @@ os__getfinalpathname_impl(PyObject *module, PyObject *path)
|
|||
buf_size = result_length;
|
||||
target_path = tmp;
|
||||
}
|
||||
final8 = gc(utf16toutf8(target_path, result_length, &final8z));
|
||||
final8 = gc(utf16to8(target_path, result_length, &final8z));
|
||||
result = PyUnicode_FromStringAndSize(final8, final8z);
|
||||
cleanup:
|
||||
if (target_path != buf) {
|
||||
|
@ -3537,7 +3537,7 @@ os__getvolumepathname_impl(PyObject *module, PyObject *path)
|
|||
size_t buflen;
|
||||
bool32 ret;
|
||||
if (!(path_utf8 = PyUnicode_AsUTF8String(path))) return 0;
|
||||
path_utf16 = gc(utf8toutf16(PyBytes_AS_STRING(path_utf8), PyBytes_GET_SIZE(path_utf8), &buflen));
|
||||
path_utf16 = gc(utf8to16(PyBytes_AS_STRING(path_utf8), PyBytes_GET_SIZE(path_utf8), &buflen));
|
||||
Py_DECREF(path_utf8);
|
||||
if (!path_utf16) return PyErr_NoMemory();
|
||||
buflen += 1;
|
||||
|
@ -3554,7 +3554,7 @@ os__getvolumepathname_impl(PyObject *module, PyObject *path)
|
|||
Py_SAFE_DOWNCAST(buflen, size_t, uint32_t));
|
||||
Py_END_ALLOW_THREADS
|
||||
if (ret) {
|
||||
mountpath8 = gc(utf16toutf8(mountpath, -1, &buflen));
|
||||
mountpath8 = gc(utf16to8(mountpath, -1, &buflen));
|
||||
result = PyUnicode_FromStringAndSize(mountpath8, buflen);
|
||||
} else {
|
||||
result = win32_error_object("_getvolumepathname", path);
|
||||
|
|
4
third_party/python/Python/sysmodule.c
vendored
4
third_party/python/Python/sysmodule.c
vendored
|
@ -12,9 +12,9 @@
|
|||
#include "libc/runtime/gc.internal.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
#include "libc/stdio/stdio.h"
|
||||
#include "libc/str/locale.h"
|
||||
#include "libc/sysv/consts/exit.h"
|
||||
#include "libc/sysv/consts/s.h"
|
||||
#include "libc/str/locale.h"
|
||||
#include "libc/x/x.h"
|
||||
#include "third_party/python/Include/abstract.h"
|
||||
#include "third_party/python/Include/boolobject.h"
|
||||
|
@ -1044,7 +1044,7 @@ sys_getwindowsversion(PyObject *self)
|
|||
PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.dwMinorVersion));
|
||||
PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.dwBuildNumber));
|
||||
PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.dwPlatformId));
|
||||
PyStructSequence_SET_ITEM(version, pos++, PyUnicode_FromString(gc(utf16toutf8(ver.szCSDVersion,-1,0))));
|
||||
PyStructSequence_SET_ITEM(version, pos++, PyUnicode_FromString(gc(utf16to8(ver.szCSDVersion,-1,0))));
|
||||
PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wServicePackMajor));
|
||||
PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wServicePackMinor));
|
||||
PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wSuiteMask));
|
||||
|
|
2
third_party/python/launch.c
vendored
2
third_party/python/launch.c
vendored
|
@ -125,7 +125,7 @@ main(int argc, char *argv[])
|
|||
Py_LimitedPath();
|
||||
if (!(a = PyList_New(argc))) return 127;
|
||||
for (i = 0; i < argc; ++i) {
|
||||
if (!(w = utf8toutf32(argv[i], -1, &n))) return 126;
|
||||
if (!(w = utf8to32(argv[i], -1, &n))) return 126;
|
||||
if (!(s = PyUnicode_FromWideChar(w, n))) return 125;
|
||||
PyList_SetItem(a, i, s);
|
||||
free(w);
|
||||
|
|
4
third_party/python/pycomp.c
vendored
4
third_party/python/pycomp.c
vendored
|
@ -17,11 +17,11 @@
|
|||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/assert.h"
|
||||
#include "libc/intrin/bits.h"
|
||||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/struct/iovec.h"
|
||||
#include "libc/calls/struct/stat.h"
|
||||
#include "libc/fmt/conv.h"
|
||||
#include "libc/intrin/bits.h"
|
||||
#include "libc/log/check.h"
|
||||
#include "libc/log/log.h"
|
||||
#include "libc/runtime/gc.internal.h"
|
||||
|
@ -125,7 +125,7 @@ main(int argc, char *argv[])
|
|||
Py_IgnoreEnvironmentFlag++;
|
||||
Py_FrozenFlag++;
|
||||
/* Py_VerboseFlag++; */
|
||||
Py_SetProgramName(gc(utf8toutf32(argv[0], -1, 0)));
|
||||
Py_SetProgramName(gc(utf8to32(argv[0], -1, 0)));
|
||||
_Py_InitializeEx_Private(1, 0);
|
||||
name = gc(xjoinpaths("/zip/.python", StripComponents(inpath, 3)));
|
||||
code = Py_CompileStringExFlags(p, name, Py_file_input, NULL, optimize);
|
||||
|
|
|
@ -301,7 +301,7 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
// write output archive
|
||||
CHECK_NE(-1, (outfd = open(outpath, O_WRONLY | O_TRUNC | O_CREAT, 0644)));
|
||||
CHECK_NE(-1, (outfd = creat(outpath, 0644)));
|
||||
ftruncate(outfd, outsize);
|
||||
if ((outsize = writev(outfd, iov, ARRAYLEN(iov))) == -1) {
|
||||
reason = "writev1 failed";
|
||||
|
|
|
@ -162,14 +162,14 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
xn += 1000;
|
||||
L = xmalloc((yn + 2) * sizeof(*L));
|
||||
L[0] = utf8toutf16(gc(xasprintf(" %*s ", xn, " ")), -1, 0);
|
||||
L[0] = utf8to16(gc(xasprintf(" %*s ", xn, " ")), -1, 0);
|
||||
for (y = 0; y < yn; ++y) {
|
||||
s = xasprintf(" %s%*s ", T[y], xn - n, " ");
|
||||
L[y + 1] = utf8toutf16(s, -1, 0);
|
||||
L[y + 1] = utf8to16(s, -1, 0);
|
||||
free(T[y]);
|
||||
free(s);
|
||||
}
|
||||
L[yn + 2 - 1] = utf8toutf16(gc(xasprintf(" %*s ", xn, " ")), -1, 0);
|
||||
L[yn + 2 - 1] = utf8to16(gc(xasprintf(" %*s ", xn, " ")), -1, 0);
|
||||
free(T);
|
||||
V = xcalloc((yn + 1) * (xn + 1), 1);
|
||||
for (y = 1; y <= yn; ++y) {
|
||||
|
@ -185,7 +185,7 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
}
|
||||
for (y = 1; y + 1 < yn; ++y) {
|
||||
s = utf16toutf8(L[y], -1, 0);
|
||||
s = utf16to8(L[y], -1, 0);
|
||||
n = strlen(s);
|
||||
while (n && s[n - 1] == ' ') s[n - 1] = 0, --n;
|
||||
puts(s + 1);
|
||||
|
|
Loading…
Reference in a new issue